From d938352d05f9c86ae0825b10a6c987af23f9199d Mon Sep 17 00:00:00 2001 From: Nate Bross Date: Tue, 7 Jul 2026 21:42:49 -0500 Subject: [PATCH 1/5] refactor(scripting): synthesize step factory delegates in the registry - StepRegistry falls back to shape-driven parsing (StepXmlParser / StepDisplayParser) when a step's FromXml/FromDisplay is null - Add ScriptStep, a CRTP base supplying shape-driven ToXml/ToDisplayLine/Parse defaults - Per-step delegates stay explicit for now; trampolines get deleted mechanically next --- .../Scripting/Registry/StepMetadata.cs | 17 ++++++----- .../Scripting/Registry/StepRegistry.cs | 11 +++++--- src/SharpFM.Model/Scripting/ScriptStepOfT.cs | 28 +++++++++++++++++++ 3 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 src/SharpFM.Model/Scripting/ScriptStepOfT.cs diff --git a/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs b/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs index fc2c4200..588e8b79 100644 --- a/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs +++ b/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs @@ -14,10 +14,11 @@ namespace SharpFM.Model.Scripting.Registry; /// /// The factory delegates (, /// ) live on the metadata so the registry can -/// bridge them into the legacy StepXmlFactory and +/// bridge them into the StepXmlFactory and /// StepDisplayFactory surfaces without touching the POCO's -/// declaration site. Once the legacy surfaces are retired the delegates -/// become the sole construction path. +/// declaration site. Leaving a delegate null tells the registry to +/// synthesize shape-driven parsing from instead; a +/// step assigns one explicitly only to opt out with a hand-written parser. /// /// public sealed record StepMetadata @@ -60,15 +61,17 @@ public sealed record StepMetadata /// /// Delegate that constructs a POCO instance from a source - /// <Step> element. Usually assigned via method-group - /// reference to the POCO's static FromXml method. + /// <Step> element. null (the default) means + /// synthesizes shape-driven parsing from + /// ; assign explicitly only for a hand-written parser. /// public Func? FromXml { get; init; } /// /// Delegate that constructs a POCO instance from parsed display-text - /// tokens. Usually assigned via method-group reference to the POCO's - /// static FromDisplayParams method. + /// tokens. null (the default) means + /// synthesizes shape-driven parsing from ; assign + /// explicitly only for a hand-written parser. /// public Func? FromDisplay { get; init; } } diff --git a/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs b/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs index a9921a66..e025ad41 100644 --- a/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs +++ b/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs @@ -122,10 +122,13 @@ private static void Scan() // Bridge into legacy factories so callers that still use // StepXmlFactory / StepDisplayFactory pick up POCO-backed // construction without each POCO needing a ModuleInitializer. - if (metadata.FromXml is { } fromXml) - StepXmlFactory.Register(metadata.Name, fromXml); - if (metadata.FromDisplay is { } fromDisplay) - StepDisplayFactory.Register(metadata.Name, fromDisplay); + // A null delegate means the step relies on shape-driven parsing; + // synthesize it from the step's own Shape rather than requiring + // every POCO to declare a trampoline. + StepXmlFactory.Register(metadata.Name, + metadata.FromXml ?? (el => StepXmlParser.Parse(type, el, metadata))); + StepDisplayFactory.Register(metadata.Name, + metadata.FromDisplay ?? ((enabled, hrParams) => StepDisplayParser.Parse(type, enabled, hrParams, metadata))); } // Sort for deterministic All iteration. diff --git a/src/SharpFM.Model/Scripting/ScriptStepOfT.cs b/src/SharpFM.Model/Scripting/ScriptStepOfT.cs new file mode 100644 index 00000000..9022e663 --- /dev/null +++ b/src/SharpFM.Model/Scripting/ScriptStepOfT.cs @@ -0,0 +1,28 @@ +using System.Xml.Linq; +using SharpFM.Model.Scripting.Registry; +using SharpFM.Model.Scripting.Serialization; + +namespace SharpFM.Model.Scripting; + +/// +/// Self-typed base for shape-driven step POCOs (the curiously recurring +/// pattern, as in ). Supplies the +/// shape-engine serializers once — TSelf.Metadata resolves through +/// the static-abstract constraint — and a typed +/// factory returning the concrete step type. Steps +/// with hand-written XML parsing derive plain +/// instead and declare everything explicitly. +/// +public abstract class ScriptStep : ScriptStep + where TSelf : ScriptStep, IStepFactory +{ + protected ScriptStep(bool enabled) : base(enabled) { } + + public override XElement ToXml() => StepXmlRenderer.Render(this, TSelf.Metadata); + + public override string ToDisplayLine() => StepDisplayRenderer.Render(this, TSelf.Metadata); + + /// Typed counterpart of the dispatch + /// for callers that already know the step kind. + public static TSelf Parse(XElement step) => StepXmlParser.Parse(step, TSelf.Metadata); +} From 0169304edc833dc1a0a1c2dc84fafa96a9f76f45 Mon Sep 17 00:00:00 2001 From: Nate Bross Date: Sun, 12 Jul 2026 13:37:38 -0500 Subject: [PATCH 2/5] refactor(scripting): replace factory delegates with virtual dispatch - StepMetadata drops FromXml/FromDisplay entirely; nothing outside StepRegistry's own bridge ever read them - ScriptStep gains PopulateFromXml/PopulateFromDisplay; ScriptStep supplies shape-driven defaults and a typed static Parse - StepRegistry registers one uniform construction closure per step; customization is ordinary virtual dispatch, not a delegate lookup - StepXmlParser/StepDisplayParser expose Populate(instance, ...) to populate an existing instance, used by both the typed Parse path and the registry's closure --- .../Scripting/Registry/StepMetadata.cs | 30 ++++--------------- .../Scripting/Registry/StepRegistry.cs | 30 ++++++++++++------- src/SharpFM.Model/Scripting/ScriptStep.cs | 12 ++++++++ src/SharpFM.Model/Scripting/ScriptStepOfT.cs | 24 +++++++++++---- .../Serialization/StepDisplayParser.cs | 12 ++++++-- .../Scripting/Serialization/StepXmlParser.cs | 20 +++++++++---- src/SharpFM.Model/Scripting/Steps/RawStep.cs | 9 ++++++ 7 files changed, 90 insertions(+), 47 deletions(-) diff --git a/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs b/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs index 588e8b79..329423d1 100644 --- a/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs +++ b/src/SharpFM.Model/Scripting/Registry/StepMetadata.cs @@ -1,6 +1,4 @@ -using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Registry; @@ -12,13 +10,11 @@ namespace SharpFM.Model.Scripting.Registry; /// discovers them via reflection at first access. /// /// -/// The factory delegates (, -/// ) live on the metadata so the registry can -/// bridge them into the StepXmlFactory and -/// StepDisplayFactory surfaces without touching the POCO's -/// declaration site. Leaving a delegate null tells the registry to -/// synthesize shape-driven parsing from instead; a -/// step assigns one explicitly only to opt out with a hand-written parser. +/// Construction is not described here: always +/// constructs a blank instance and calls its (possibly overridden) +/// / . +/// A step opts into hand-written parsing by overriding those methods, not +/// by describing it on this record. /// /// public sealed record StepMetadata @@ -58,20 +54,4 @@ public sealed record StepMetadata /// Behavioural intelligence — tooltip / lint source. public StepNotes? Notes { get; init; } - - /// - /// Delegate that constructs a POCO instance from a source - /// <Step> element. null (the default) means - /// synthesizes shape-driven parsing from - /// ; assign explicitly only for a hand-written parser. - /// - public Func? FromXml { get; init; } - - /// - /// Delegate that constructs a POCO instance from parsed display-text - /// tokens. null (the default) means - /// synthesizes shape-driven parsing from ; assign - /// explicitly only for a hand-written parser. - /// - public Func? FromDisplay { get; init; } } diff --git a/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs b/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs index e025ad41..9e7c0985 100644 --- a/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs +++ b/src/SharpFM.Model/Scripting/Registry/StepRegistry.cs @@ -119,16 +119,26 @@ private static void Scan() if (metadata.Id != 0) _byId[metadata.Id] = metadata; - // Bridge into legacy factories so callers that still use - // StepXmlFactory / StepDisplayFactory pick up POCO-backed - // construction without each POCO needing a ModuleInitializer. - // A null delegate means the step relies on shape-driven parsing; - // synthesize it from the step's own Shape rather than requiring - // every POCO to declare a trampoline. - StepXmlFactory.Register(metadata.Name, - metadata.FromXml ?? (el => StepXmlParser.Parse(type, el, metadata))); - StepDisplayFactory.Register(metadata.Name, - metadata.FromDisplay ?? ((enabled, hrParams) => StepDisplayParser.Parse(type, enabled, hrParams, metadata))); + // Bridge into StepXmlFactory / StepDisplayFactory so dispatch finds + // the typed POCO without each POCO needing a ModuleInitializer. + // Every step is registered the same way — customization happens + // through virtual dispatch on the constructed instance + // (ScriptStep.PopulateFromXml / PopulateFromDisplay), not a + // per-step delegate lookup. + StepXmlFactory.Register(metadata.Name, el => + { + var instance = (ScriptStep)Activator.CreateInstance(type, nonPublic: true)!; + instance.Enabled = el.Attribute("enable")?.Value != "False"; + instance.PopulateFromXml(el); + return instance; + }); + StepDisplayFactory.Register(metadata.Name, (enabled, hrParams) => + { + var instance = (ScriptStep)Activator.CreateInstance(type, nonPublic: true)!; + instance.Enabled = enabled; + instance.PopulateFromDisplay(hrParams); + return instance; + }); } // Sort for deterministic All iteration. diff --git a/src/SharpFM.Model/Scripting/ScriptStep.cs b/src/SharpFM.Model/Scripting/ScriptStep.cs index 05108dc4..fc4a2269 100644 --- a/src/SharpFM.Model/Scripting/ScriptStep.cs +++ b/src/SharpFM.Model/Scripting/ScriptStep.cs @@ -30,6 +30,18 @@ protected ScriptStep(bool enabled) public abstract XElement ToXml(); public abstract string ToDisplayLine(); + /// + /// Populates this instance from a source <Step> element. + /// is already set by the caller before this runs. + /// + protected internal abstract void PopulateFromXml(XElement step); + + /// + /// Populates this instance from parsed display-text tokens. + /// is already set by the caller before this runs. + /// + protected internal abstract void PopulateFromDisplay(string[] hrParams); + public virtual List Validate(int lineIndex) => new(); /// diff --git a/src/SharpFM.Model/Scripting/ScriptStepOfT.cs b/src/SharpFM.Model/Scripting/ScriptStepOfT.cs index 9022e663..89fd1a59 100644 --- a/src/SharpFM.Model/Scripting/ScriptStepOfT.cs +++ b/src/SharpFM.Model/Scripting/ScriptStepOfT.cs @@ -1,3 +1,4 @@ +using System; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Serialization; @@ -8,10 +9,11 @@ namespace SharpFM.Model.Scripting; /// Self-typed base for shape-driven step POCOs (the curiously recurring /// pattern, as in ). Supplies the /// shape-engine serializers once — TSelf.Metadata resolves through -/// the static-abstract constraint — and a typed -/// factory returning the concrete step type. Steps -/// with hand-written XML parsing derive plain -/// instead and declare everything explicitly. +/// the static-abstract constraint. A step +/// overrides , +/// , , +/// or only where shape-driven behavior isn't sufficient; +/// unrecognized state falls through to these generic defaults. /// public abstract class ScriptStep : ScriptStep where TSelf : ScriptStep, IStepFactory @@ -22,7 +24,19 @@ protected ScriptStep(bool enabled) : base(enabled) { } public override string ToDisplayLine() => StepDisplayRenderer.Render(this, TSelf.Metadata); + protected internal override void PopulateFromXml(XElement step) => + StepXmlParser.Populate(this, step, TSelf.Metadata); + + protected internal override void PopulateFromDisplay(string[] hrParams) => + StepDisplayParser.Populate(this, hrParams, TSelf.Metadata); + /// Typed counterpart of the dispatch /// for callers that already know the step kind. - public static TSelf Parse(XElement step) => StepXmlParser.Parse(step, TSelf.Metadata); + public static TSelf Parse(XElement step) + { + var instance = (TSelf)Activator.CreateInstance(typeof(TSelf), nonPublic: true)!; + instance.Enabled = step.Attribute("enable")?.Value != "False"; + instance.PopulateFromXml(step); + return instance; + } } diff --git a/src/SharpFM.Model/Scripting/Serialization/StepDisplayParser.cs b/src/SharpFM.Model/Scripting/Serialization/StepDisplayParser.cs index d01c1d5d..6f1f4506 100644 --- a/src/SharpFM.Model/Scripting/Serialization/StepDisplayParser.cs +++ b/src/SharpFM.Model/Scripting/Serialization/StepDisplayParser.cs @@ -33,7 +33,17 @@ public static ScriptStep Parse(Type pocoType, bool enabled, string[] hrParams, S throw new InvalidOperationException( $"{pocoType.Name} needs a parameterless constructor for shape-driven display parsing."); instance.Enabled = enabled; + Populate(instance, hrParams, meta); + return instance; + } + /// + /// Populates an already-constructed instance's shape-bound properties + /// from parsed display-text tokens. is + /// not touched here — callers set it before invoking this. + /// + public static void Populate(ScriptStep instance, string[] hrParams, StepMetadata meta) + { var slots = ShapeHrView.HrNodes(meta.Shape).Where(n => n is not HrOnly).ToList(); var used = new bool[slots.Count]; @@ -75,8 +85,6 @@ public static ScriptStep Parse(Type pocoType, bool enabled, string[] hrParams, S bound = true; } } - - return instance; } private static void Assign(object target, ShapeNode node, string value) diff --git a/src/SharpFM.Model/Scripting/Serialization/StepXmlParser.cs b/src/SharpFM.Model/Scripting/Serialization/StepXmlParser.cs index cdbdc48a..55d401e4 100644 --- a/src/SharpFM.Model/Scripting/Serialization/StepXmlParser.cs +++ b/src/SharpFM.Model/Scripting/Serialization/StepXmlParser.cs @@ -29,11 +29,21 @@ public static ScriptStep Parse(Type pocoType, XElement step, StepMetadata meta) $"{pocoType.Name} needs a parameterless constructor for shape-driven parsing."); instance.Enabled = step.Attribute("enable")?.Value != "False"; + Populate(instance, step, meta); + return instance; + } + + /// + /// Populates an already-constructed instance's shape-bound properties + /// from a source <Step> element. + /// is not touched here — callers set it before invoking this. + /// + public static void Populate(ScriptStep instance, XElement step, StepMetadata meta) + { foreach (var node in meta.Shape) - Populate(instance, step, node); + PopulateNode(instance, step, node); CapturePassthrough(instance, step, meta.Shape); - return instance; } /// @@ -58,7 +68,7 @@ private static void CapturePassthrough(object target, XElement parent, IReadOnly : extras); } - private static void Populate(object target, XElement step, ShapeNode node) + private static void PopulateNode(object target, XElement step, ShapeNode node) { switch (node) { @@ -177,7 +187,7 @@ private static void Populate(object target, XElement step, ShapeNode node) if (wrapper is not null) { foreach (var child in w.Children) - Populate(target, wrapper, child); + PopulateNode(target, wrapper, child); CapturePassthrough(target, wrapper, w.Children); } return; @@ -202,7 +212,7 @@ private static void Populate(object target, XElement step, ShapeNode node) // its init-only positional properties. var value = CreateBlank(match.WhenType); foreach (var child in match.Children) - Populate(value, step, child); + PopulateNode(value, step, child); Set(target, prop, value); return; } diff --git a/src/SharpFM.Model/Scripting/Steps/RawStep.cs b/src/SharpFM.Model/Scripting/Steps/RawStep.cs index 48a7af0b..cd36182a 100644 --- a/src/SharpFM.Model/Scripting/Steps/RawStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RawStep.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Xml.Linq; @@ -50,6 +51,14 @@ public override string ToDisplayLine() return Name; } + // Never constructed via the registry's Activator-based path — RawStep is + // built directly by StepXmlFactory.Create when no POCO is registered. + protected internal override void PopulateFromXml(XElement step) => + throw new NotSupportedException($"{nameof(RawStep)} is constructed directly, not populated."); + + protected internal override void PopulateFromDisplay(string[] hrParams) => + throw new NotSupportedException($"{nameof(RawStep)} is constructed directly, not populated."); + public override List Validate(int lineIndex) => new() { From f782ef330cec59407d66e44c89953f4784391ece Mon Sep 17 00:00:00 2001 From: Nate Bross Date: Sun, 12 Jul 2026 13:37:54 -0500 Subject: [PATCH 3/5] refactor(scripting): collapse step POCOs onto ScriptStep - Every step now derives ScriptStep, including the 7 previously hand-XML steps (CommentStep, GoToLayoutStep, PerformScript family, TruncateTableStep) that used to stay on plain ScriptStep - Deleted boilerplate ToXml/ToDisplayLine overrides and FromXml/ FromDisplayParams trampolines wherever shape-driven defaults suffice - Converted hand-written FromXml/FromDisplayParams into PopulateFromXml/PopulateFromDisplay overrides that mutate the constructed instance instead of returning a new one - One rule replaces the old 3-category (5-bucket) decision tree: derive the generic base, override only non-boilerplate members --- .../Scripting/Steps/AVPlayerPlayStep.cs | 22 ++--- .../Scripting/Steps/AVPlayerSetOptionsStep.cs | 25 ++--- .../Steps/AVPlayerSetPlaybackStateStep.cs | 16 +-- .../Scripting/Steps/AddAccountStep.cs | 16 +-- .../Scripting/Steps/AdjustWindowStep.cs | 16 +-- .../Scripting/Steps/AllowFormattingBarStep.cs | 16 +-- .../Scripting/Steps/AllowUserAbortStep.cs | 16 +-- .../Scripting/Steps/AppendPdfStep.cs | 20 ++-- .../Scripting/Steps/ArrangeAllWindowsStep.cs | 16 +-- src/SharpFM.Model/Scripting/Steps/BeepStep.cs | 16 +-- .../Scripting/Steps/CancelPdfStep.cs | 16 +-- .../Scripting/Steps/ChangePasswordStep.cs | 16 +-- .../Scripting/Steps/CheckFoundSetStep.cs | 16 +-- .../Scripting/Steps/CheckRecordStep.cs | 16 +-- .../Scripting/Steps/CheckSelectionStep.cs | 16 +-- .../Scripting/Steps/ClearStep.cs | 16 +-- .../Scripting/Steps/CloseDataFileStep.cs | 16 +-- .../Scripting/Steps/CloseFileStep.cs | 15 +-- .../Scripting/Steps/ClosePdfStep.cs | 19 ++-- .../Scripting/Steps/ClosePopoverStep.cs | 16 +-- .../Scripting/Steps/CloseWindowStep.cs | 17 +--- .../Scripting/Steps/CommentStep.cs | 25 ++--- .../Steps/CommitRecordsRequestsStep.cs | 16 +-- .../Scripting/Steps/CommitTransactionStep.cs | 16 +-- .../Scripting/Steps/ConfigureAIAccountStep.cs | 19 ++-- .../Steps/ConfigureLocalNotificationStep.cs | 16 +-- .../ConfigureMachineLearningModelStep.cs | 16 +-- .../Steps/ConfigureNfcReadingStep.cs | 16 +-- .../Steps/ConfigurePromptTemplateStep.cs | 22 ++--- .../Steps/ConfigureRAGAccountStep.cs | 16 +-- .../Steps/ConfigureRegionMonitorScriptStep.cs | 16 +-- .../Steps/ConfigureRegressionModelStep.cs | 16 +-- .../Scripting/Steps/ConstrainFoundSetStep.cs | 16 +-- .../Scripting/Steps/ControlFlowSteps.cs | 99 ++----------------- .../Scripting/Steps/ConvertFileStep.cs | 19 ++-- .../Steps/CopyAllRecordsRequestsStep.cs | 16 +-- .../Scripting/Steps/CopyRecordRequestStep.cs | 16 +-- src/SharpFM.Model/Scripting/Steps/CopyStep.cs | 16 +-- .../Scripting/Steps/CorrectWordStep.cs | 16 +-- .../Scripting/Steps/CreateDataFileStep.cs | 16 +-- .../Scripting/Steps/CreatePdfStep.cs | 21 ++-- src/SharpFM.Model/Scripting/Steps/CutStep.cs | 16 +-- .../Scripting/Steps/DeleteAccountStep.cs | 16 +-- .../Scripting/Steps/DeleteAllRecordsStep.cs | 16 +-- .../Scripting/Steps/DeleteFileStep.cs | 17 +--- .../Scripting/Steps/DeletePortalRowStep.cs | 16 +-- .../Steps/DeleteRecordRequestStep.cs | 16 +-- .../Scripting/Steps/DialPhoneStep.cs | 17 +--- .../Steps/DuplicateRecordRequestStep.cs | 16 +-- .../Scripting/Steps/EditUserDictionaryStep.cs | 16 +-- .../Scripting/Steps/EnableAccountStep.cs | 16 +-- .../Steps/EnableTouchKeyboardStep.cs | 16 +-- .../Scripting/Steps/EnterBrowseModeStep.cs | 16 +-- .../Scripting/Steps/EnterFindModeStep.cs | 19 +--- .../Scripting/Steps/EnterPreviewModeStep.cs | 16 +-- .../Steps/ExecuteFileMakerDataApiStep.cs | 17 +--- .../Scripting/Steps/ExecuteSqlStep.cs | 16 +-- .../Scripting/Steps/ExitApplicationStep.cs | 16 +-- .../Scripting/Steps/ExitScriptStep.cs | 16 +-- .../Steps/ExportFieldContentsStep.cs | 19 ++-- .../Scripting/Steps/ExportRecordsStep.cs | 15 +-- .../Scripting/Steps/ExtendFoundSetStep.cs | 16 +-- .../Steps/FindMatchingRecordsStep.cs | 16 +-- .../Scripting/Steps/FineTuneModelStep.cs | 16 +-- .../Scripting/Steps/FlushCacheToDiskStep.cs | 16 +-- .../Scripting/Steps/FreezeWindowStep.cs | 16 +-- .../Steps/GenerateResponseFromModelStep.cs | 16 +-- .../Steps/GetDataFilePositionStep.cs | 16 +-- .../Scripting/Steps/GetFileExistsStep.cs | 16 +-- .../Scripting/Steps/GetFileSizeStep.cs | 16 +-- .../Scripting/Steps/GetFolderPathStep.cs | 16 +-- .../Scripting/Steps/GoToFieldStep.cs | 16 +-- .../Scripting/Steps/GoToLayoutStep.cs | 33 +++---- .../Scripting/Steps/GoToListOfRecordsStep.cs | 18 ++-- .../Scripting/Steps/GoToNextFieldStep.cs | 16 +-- .../Scripting/Steps/GoToObjectStep.cs | 16 +-- .../Scripting/Steps/GoToPortalRowStep.cs | 19 ++-- .../Scripting/Steps/GoToPreviousFieldStep.cs | 16 +-- .../Scripting/Steps/GoToRecordStep.cs | 32 +++--- .../Scripting/Steps/GoToRelatedRecordStep.cs | 22 ++--- .../Scripting/Steps/HaltScriptStep.cs | 16 +-- .../Scripting/Steps/ImportRecordsStep.cs | 15 +-- .../Scripting/Steps/InsertAudioVideoStep.cs | 16 +-- .../Steps/InsertCalculatedResultStep.cs | 17 +--- .../Scripting/Steps/InsertCurrentDateStep.cs | 16 +-- .../Scripting/Steps/InsertCurrentTimeStep.cs | 16 +-- .../Steps/InsertCurrentUserNameStep.cs | 16 +-- .../Steps/InsertEmbeddingInFoundSetStep.cs | 14 +-- .../Scripting/Steps/InsertEmbeddingStep.cs | 14 +-- .../Scripting/Steps/InsertFileStep.cs | 18 ++-- .../Scripting/Steps/InsertFromDeviceStep.cs | 16 +-- .../Scripting/Steps/InsertFromIndexStep.cs | 16 +-- .../Steps/InsertFromLastVisitedStep.cs | 16 +-- .../Scripting/Steps/InsertFromUrlStep.cs | 21 ++-- .../Scripting/Steps/InsertPdfStep.cs | 16 +-- .../Scripting/Steps/InsertPictureStep.cs | 16 +-- .../Scripting/Steps/InsertTextStep.cs | 17 +--- .../Scripting/Steps/InstallMenuSetStep.cs | 16 +-- .../Steps/InstallOnTimerScriptStep.cs | 16 +-- .../Scripting/Steps/InstallPlugInFileStep.cs | 16 +-- .../Scripting/Steps/ModifyLastFindStep.cs | 16 +-- .../Scripting/Steps/MoveResizeWindowStep.cs | 16 +-- .../Scripting/Steps/NewFileStep.cs | 16 +-- .../Scripting/Steps/NewRecordRequestStep.cs | 16 +-- .../Scripting/Steps/NewWindowStep.cs | 26 ++--- .../Steps/OmitMultipleRecordsStep.cs | 16 +-- .../Scripting/Steps/OmitRecordStep.cs | 16 +-- .../Scripting/Steps/OpenDataFileStep.cs | 16 +-- .../Scripting/Steps/OpenEditSavedFindsStep.cs | 16 +-- .../Scripting/Steps/OpenFavoritesStep.cs | 16 +-- .../Scripting/Steps/OpenFileOptionsStep.cs | 16 +-- .../Scripting/Steps/OpenFileStep.cs | 16 +-- .../Scripting/Steps/OpenFindReplaceStep.cs | 16 +-- .../Scripting/Steps/OpenHelpStep.cs | 16 +-- .../Scripting/Steps/OpenHostsStep.cs | 16 +-- .../Steps/OpenManageContainersStep.cs | 16 +-- .../Steps/OpenManageDataSourcesStep.cs | 16 +-- .../Scripting/Steps/OpenManageDatabaseStep.cs | 16 +-- .../Scripting/Steps/OpenManageLayoutsStep.cs | 16 +-- .../Scripting/Steps/OpenManageThemesStep.cs | 16 +-- .../Steps/OpenManageValueListsStep.cs | 16 +-- .../Scripting/Steps/OpenPdfStep.cs | 20 ++-- .../Scripting/Steps/OpenRecordRequestStep.cs | 16 +-- .../Steps/OpenScriptWorkspaceStep.cs | 16 +-- .../Scripting/Steps/OpenSettingsStep.cs | 16 +-- .../Scripting/Steps/OpenSharingStep.cs | 16 +-- .../Scripting/Steps/OpenTransactionStep.cs | 16 +-- .../Scripting/Steps/OpenURLStep.cs | 16 +-- .../Scripting/Steps/OpenUploadToHostStep.cs | 16 +-- .../Scripting/Steps/PasteStep.cs | 16 +-- .../Scripting/Steps/PauseResumeScriptStep.cs | 16 +-- .../Scripting/Steps/PerformAppleScriptStep.cs | 16 +-- .../Steps/PerformFindByNaturalLanguageStep.cs | 16 +-- .../Scripting/Steps/PerformFindReplaceStep.cs | 18 ++-- .../Scripting/Steps/PerformFindStep.cs | 16 +-- .../Steps/PerformJavaScriptInWebViewerStep.cs | 17 +--- .../Scripting/Steps/PerformQuickFindStep.cs | 16 +-- .../Scripting/Steps/PerformRagActionStep.cs | 16 +-- .../Steps/PerformScriptOnServerStep.cs | 32 +++--- .../PerformScriptOnServerWithCallbackStep.cs | 40 +++++--- .../Scripting/Steps/PerformScriptStep.cs | 30 +++--- .../Steps/PerformSemanticFindStep.cs | 16 +-- .../PerformSqlQueryByNaturalLanguageStep.cs | 16 +-- .../Scripting/Steps/PrintSetupStep.cs | 16 +-- .../Scripting/Steps/PrintStep.cs | 16 +-- .../Scripting/Steps/ReLoginStep.cs | 16 +-- .../Scripting/Steps/ReadFromDataFileStep.cs | 18 ++-- .../Scripting/Steps/RecoverFileStep.cs | 16 +-- .../Scripting/Steps/RefreshObjectStep.cs | 16 +-- .../Scripting/Steps/RefreshPortalStep.cs | 16 +-- .../Scripting/Steps/RefreshWindowStep.cs | 20 +--- .../Steps/RelookupFieldContentsStep.cs | 16 +-- .../Scripting/Steps/RenameFileStep.cs | 16 +-- .../Steps/ReplaceFieldContentsStep.cs | 19 ++-- .../Steps/ResetAccountPasswordStep.cs | 16 +-- .../Steps/RevertRecordRequestStep.cs | 16 +-- .../Scripting/Steps/RevertTransactionStep.cs | 16 +-- .../Steps/SaveACopyAsAddOnPackageStep.cs | 16 +-- .../Scripting/Steps/SaveACopyAsStep.cs | 16 +-- .../Scripting/Steps/SaveACopyAsXMLStep.cs | 16 +-- .../Scripting/Steps/SaveRecordsAsExcelStep.cs | 29 +++--- .../Scripting/Steps/SaveRecordsAsJsonlStep.cs | 26 ++--- .../Scripting/Steps/SaveRecordsAsPdfStep.cs | 23 +++-- .../Steps/SaveRecordsAsSnapshotLinkStep.cs | 16 +-- .../Scripting/Steps/ScrollWindowStep.cs | 16 +-- .../Scripting/Steps/SelectAllStep.cs | 16 +-- .../Scripting/Steps/SelectDictionariesStep.cs | 16 +-- .../Scripting/Steps/SelectWindowStep.cs | 16 +-- .../Scripting/Steps/SendDDEExecuteStep.cs | 16 +-- .../Scripting/Steps/SendEventStep.cs | 18 ++-- .../Scripting/Steps/SendMailStep.cs | 13 +-- .../Scripting/Steps/SetAICallLoggingStep.cs | 18 ++-- .../Steps/SetDataFilePositionStep.cs | 16 +-- .../Scripting/Steps/SetDictionaryStep.cs | 16 +-- .../Scripting/Steps/SetErrorCaptureStep.cs | 16 +-- .../Scripting/Steps/SetErrorLoggingStep.cs | 16 +-- .../Scripting/Steps/SetFieldByNameStep.cs | 16 +-- .../Scripting/Steps/SetFieldStep.cs | 16 +-- .../Steps/SetLayoutObjectAnimationStep.cs | 16 +-- .../Scripting/Steps/SetMultiUserStep.cs | 16 +-- .../Scripting/Steps/SetNextSerialValueStep.cs | 16 +-- .../Steps/SetRevertTransactionOnErrorStep.cs | 16 +-- .../Scripting/Steps/SetSelectionStep.cs | 16 +-- .../Steps/SetSessionIdentifierStep.cs | 16 +-- .../Steps/SetUseSystemFormatsStep.cs | 16 +-- .../Scripting/Steps/SetVariableStep.cs | 20 +--- .../Scripting/Steps/SetWebViewerStep.cs | 16 +-- .../Scripting/Steps/SetWindowTitleStep.cs | 16 +-- .../Scripting/Steps/SetZoomLevelStep.cs | 20 +--- .../Scripting/Steps/ShowAllRecordsStep.cs | 16 +-- .../Scripting/Steps/ShowCustomDialogStep.cs | 19 ++-- .../Scripting/Steps/ShowHideMenubarStep.cs | 20 +--- .../Scripting/Steps/ShowHideTextRulerStep.cs | 16 +-- .../Scripting/Steps/ShowHideToolbarsStep.cs | 20 +--- .../Scripting/Steps/ShowOmittedOnlyStep.cs | 16 +-- .../Scripting/Steps/SortRecordsByFieldStep.cs | 16 +-- .../Scripting/Steps/SortRecordsStep.cs | 16 +-- .../Scripting/Steps/SpeakStep.cs | 18 +--- .../Scripting/Steps/SpellingOptionsStep.cs | 16 +-- .../Steps/TriggerClarisConnectFlowStep.cs | 23 ++--- .../Scripting/Steps/TruncateTableStep.cs | 33 ++++--- .../Scripting/Steps/UndoRedoStep.cs | 16 +-- .../Scripting/Steps/UnsortRecordsStep.cs | 16 +-- .../Scripting/Steps/ViewAsStep.cs | 16 +-- .../Scripting/Steps/WriteToDataFileStep.cs | 18 ++-- 205 files changed, 597 insertions(+), 3028 deletions(-) diff --git a/src/SharpFM.Model/Scripting/Steps/AVPlayerPlayStep.cs b/src/SharpFM.Model/Scripting/Steps/AVPlayerPlayStep.cs index 82061c56..ae05c0a3 100644 --- a/src/SharpFM.Model/Scripting/Steps/AVPlayerPlayStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AVPlayerPlayStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class AVPlayerPlayStep : ScriptStep, IStepFactory +public sealed class AVPlayerPlayStep : ScriptStep, IStepFactory { public const int XmlId = 177; public const string XmlName = "AVPlayer Play"; @@ -84,17 +82,12 @@ public AVPlayerPlayStep( private static string PresentationHr(string x) => _PresentationToHr.TryGetValue(x, out var h) ? h : x; private static string PresentationXml(string h) => _PresentationFromHr.TryGetValue(h, out var x) ? x : h; - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: Hide Controls / Disable Interaction map the wire's // "True"/absent values to On/Off, a translation display metadata cannot // express without widening the nodes' wire ValidValues. public override string ToDisplayLine() => "AVPlayer Play [ " + SourceHr(Source) + " ; " + "Repetition: " + (Repetition?.Text ?? "") + " ; " + "Presentation: " + PresentationHr(Presentation) + " ; " + "Position: " + (Position?.Text ?? "") + " ; " + "Start Offset: " + (StartOffset?.Text ?? "") + " ; " + "End Offset: " + (EndOffset?.Text ?? "") + " ; " + "Hide Controls: " + (HideControls == "True" ? "On" : "Off") + " ; " + "Disable Interaction: " + (DisableInteraction == "True" ? "On" : "Off") + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when a toggle is explicitly stored /// as False: the display renders both the absent and the explicit-False @@ -103,7 +96,7 @@ public override string ToDisplayLine() => public override bool IsFullyEditable => HideControls != "False" && DisableInteraction != "False"; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); // The leading unlabeled token is the source enum. @@ -126,7 +119,14 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) foreach (var tok in tokens) { if (tok.StartsWith("Hide Controls:", StringComparison.OrdinalIgnoreCase)) { var v = tok.Substring(14).Trim(); hideControls_v = v.Equals("On", StringComparison.OrdinalIgnoreCase) ? "True" : ""; break; } } string disableInteraction_v = ""; foreach (var tok in tokens) { if (tok.StartsWith("Disable Interaction:", StringComparison.OrdinalIgnoreCase)) { var v = tok.Substring(20).Trim(); disableInteraction_v = v.Equals("On", StringComparison.OrdinalIgnoreCase) ? "True" : ""; break; } } - return new AVPlayerPlayStep(source_v, repetition_v, presentation_v, position_v, startOffset_v, endOffset_v, hideControls_v, disableInteraction_v, enabled); + Source = source_v; + Repetition = repetition_v; + Presentation = presentation_v; + Position = position_v; + StartOffset = startOffset_v; + EndOffset = endOffset_v; + HideControls = hideControls_v; + DisableInteraction = disableInteraction_v; } public static StepMetadata Metadata { get; } = new() @@ -150,7 +150,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new EnumValueChild("HideControls") { PocoProperty = "HideControls", HrLabel = "Hide Controls", Optional = true, DisplayValues = ["On", "Off"] }, new EnumValueChild("DisableInteraction") { PocoProperty = "DisableInteraction", HrLabel = "Disable Interaction", Optional = true, DisplayValues = ["On", "Off"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/AVPlayerSetOptionsStep.cs b/src/SharpFM.Model/Scripting/Steps/AVPlayerSetOptionsStep.cs index 7998481d..d277d643 100644 --- a/src/SharpFM.Model/Scripting/Steps/AVPlayerSetOptionsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AVPlayerSetOptionsStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class AVPlayerSetOptionsStep : ScriptStep, IStepFactory +public sealed class AVPlayerSetOptionsStep : ScriptStep, IStepFactory { public const int XmlId = 179; public const string XmlName = "AVPlayer Set Options"; @@ -114,16 +112,11 @@ public AVPlayerSetOptionsStep( private static string SequenceHr(string x) => _SequenceToHr.TryGetValue(x, out var h) ? h : x; private static string SequenceXml(string h) => _SequenceFromHr.TryGetValue(h, out var x) ? x : h; - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: option toggles map the wire's "True"/absent values to // On/Off, a translation display metadata cannot express. public override string ToDisplayLine() => "AVPlayer Set Options [ " + "Presentation: " + PresentationHr(Presentation) + " ; " + "Disable Interaction: " + (DisableInteraction == "True" ? "On" : "Off") + " ; " + "Hide Controls: " + (HideControls == "True" ? "On" : "Off") + " ; " + "Disable External Controls: " + (DisableExternalControls == "True" ? "On" : "Off") + " ; " + "Pause in Background: " + (PauseInBackground == "True" ? "On" : "Off") + " ; " + "Position: " + (Position?.Text ?? "") + " ; " + "Start Offset: " + (StartOffset?.Text ?? "") + " ; " + "End Offset: " + (EndOffset?.Text ?? "") + " ; " + "Volume: " + (Volume?.Text ?? "") + " ; " + "Zoom: " + ZoomHr(Zoom) + " ; " + "Sequence: " + SequenceHr(Sequence) + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when a toggle is explicitly stored /// as False: the display renders both the absent and the explicit-False @@ -133,7 +126,7 @@ public override string ToDisplayLine() => DisableInteraction != "False" && HideControls != "False" && DisableExternalControls != "False" && PauseInBackground != "False"; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); string presentation_v = "Start Full Screen"; @@ -160,7 +153,17 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) foreach (var tok in tokens) { if (tok.StartsWith("Zoom:", StringComparison.OrdinalIgnoreCase)) { var v = tok.Substring(5).Trim(); zoom_v = ZoomXml(v); break; } } string sequence_v = "None"; foreach (var tok in tokens) { if (tok.StartsWith("Sequence:", StringComparison.OrdinalIgnoreCase)) { var v = tok.Substring(9).Trim(); sequence_v = SequenceXml(v); break; } } - return new AVPlayerSetOptionsStep(presentation_v, disableInteraction_v, hideControls_v, disableExternalControls_v, pauseInBackground_v, position_v, startOffset_v, endOffset_v, volume_v, zoom_v, sequence_v, enabled); + Presentation = presentation_v; + DisableInteraction = disableInteraction_v; + HideControls = hideControls_v; + DisableExternalControls = disableExternalControls_v; + PauseInBackground = pauseInBackground_v; + Position = position_v; + StartOffset = startOffset_v; + EndOffset = endOffset_v; + Volume = volume_v; + Zoom = zoom_v; + Sequence = sequence_v; } public static StepMetadata Metadata { get; } = new() @@ -186,7 +189,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new EnumValueChild("Zoom") { PocoProperty = "Zoom", HrLabel = "Zoom", Optional = true, DisplayValues = ["Fit", "Fill", "Stretch", "Fit Only", "Fill Only", "Stretch Only"] }, new EnumValueChild("Sequence") { PocoProperty = "Sequence", HrLabel = "Sequence", Optional = true, DisplayValues = ["None", "Next", "Previous"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/AVPlayerSetPlaybackStateStep.cs b/src/SharpFM.Model/Scripting/Steps/AVPlayerSetPlaybackStateStep.cs index 1d87d87a..c766f2c5 100644 --- a/src/SharpFM.Model/Scripting/Steps/AVPlayerSetPlaybackStateStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AVPlayerSetPlaybackStateStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class AVPlayerSetPlaybackStateStep : ScriptStep, IStepFactory +public sealed class AVPlayerSetPlaybackStateStep : ScriptStep, IStepFactory { public const int XmlId = 178; public const string XmlName = "AVPlayer Set Playback State"; @@ -29,16 +27,6 @@ public AVPlayerSetPlaybackStateStep(string playbackState = "Stopped", bool enabl PlaybackState = playbackState; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -50,7 +38,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("PlaybackState") { PocoProperty = "PlaybackState", DefaultValue = "Stopped", ValidValues = ["Stopped", "Paused", "Playing"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/AddAccountStep.cs b/src/SharpFM.Model/Scripting/Steps/AddAccountStep.cs index 1ac442bc..a68e93a9 100644 --- a/src/SharpFM.Model/Scripting/Steps/AddAccountStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AddAccountStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <AddAccount> wrapper holding the text <AccountType> /// and the optional account name / password / privilege-set fields. /// -public sealed class AddAccountStep : ScriptStep, IStepFactory +public sealed class AddAccountStep : ScriptStep, IStepFactory { public const int XmlId = 134; public const string XmlName = "Add Account"; @@ -41,16 +39,6 @@ public AddAccountStep( ExpirePassword = expirePassword; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -70,7 +58,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedTextChild("PrivilegeSet") { PocoProperty = "PrivilegeSet", HrLabel = "Privilege Set", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ]), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/AdjustWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/AdjustWindowStep.cs index cecc82f0..f91c1635 100644 --- a/src/SharpFM.Model/Scripting/Steps/AdjustWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AdjustWindowStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class AdjustWindowStep : ScriptStep, IStepFactory +public sealed class AdjustWindowStep : ScriptStep, IStepFactory { public const int XmlId = 31; public const string XmlName = "Adjust Window"; @@ -29,16 +27,6 @@ public AdjustWindowStep(string windowState = "ResizeToFit", bool enabled = true) WindowState = windowState; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -50,7 +38,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("WindowState") { PocoProperty = "WindowState", DefaultValue = "ResizeToFit", ValidValues = ["Resize to Fit", "Maximize", "Minimize", "Restore", "Hide"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/AllowFormattingBarStep.cs b/src/SharpFM.Model/Scripting/Steps/AllowFormattingBarStep.cs index d1678329..3640a83e 100644 --- a/src/SharpFM.Model/Scripting/Steps/AllowFormattingBarStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AllowFormattingBarStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <Set state="True|False"/> child. All round-tripped. /// -public sealed class AllowFormattingBarStep : ScriptStep, IStepFactory +public sealed class AllowFormattingBarStep : ScriptStep, IStepFactory { public const int XmlId = 115; public const string XmlName = "Allow Formatting Bar"; @@ -27,16 +25,6 @@ public AllowFormattingBarStep(bool set = false, bool enabled = true) Set = set; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -44,7 +32,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => Category = "miscellaneous", HelpUrl = "https://help.claris.com/en/pro-help/content/allow-formatting-bar.html", Shape = [new BoolStateChild("Set")], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/AllowUserAbortStep.cs b/src/SharpFM.Model/Scripting/Steps/AllowUserAbortStep.cs index 2b32618e..37faa9a9 100644 --- a/src/SharpFM.Model/Scripting/Steps/AllowUserAbortStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AllowUserAbortStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <Set state="True|False"/> child. All round-tripped. /// -public sealed class AllowUserAbortStep : ScriptStep, IStepFactory +public sealed class AllowUserAbortStep : ScriptStep, IStepFactory { public const int XmlId = 85; public const string XmlName = "Allow User Abort"; @@ -27,23 +25,11 @@ public AllowUserAbortStep(bool set = false, bool enabled = true) Set = set; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "control", Shape = [new BoolStateChild("Set")], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/AppendPdfStep.cs b/src/SharpFM.Model/Scripting/Steps/AppendPdfStep.cs index ccfd5a9b..c69a5dde 100644 --- a/src/SharpFM.Model/Scripting/Steps/AppendPdfStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/AppendPdfStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <UniversalPathList>, and the <AppendPDFFile> /// wrapper carries the save type plus an optional open-password calculation. /// -public sealed class AppendPdfStep : ScriptStep, IStepFactory +public sealed class AppendPdfStep : ScriptStep, IStepFactory { public const int XmlId = 244; public const string XmlName = "Append PDF"; @@ -38,13 +36,6 @@ public AppendPdfStep( OpenPassword = openPassword; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when state the display line cannot /// carry is present: an open-password calculation or a non-default save @@ -54,7 +45,7 @@ public AppendPdfStep( // Hand-written: couples the hidden Option wire flag to path presence, // which the shape parser cannot express. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { string path = ""; foreach (var tok in hrParams) @@ -62,7 +53,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) var t = tok.Trim(); if (!string.IsNullOrWhiteSpace(t)) { path = t; break; } } - return new AppendPdfStep(!string.IsNullOrEmpty(path), path, "File", null, enabled); + SpecifyFile = !string.IsNullOrEmpty(path); + Path = path; + SaveType = "File"; + OpenPassword = null; } public static StepMetadata Metadata { get; } = new() @@ -87,7 +81,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) // slot, mirroring the legacy AppendPDFFile param. new HrOnly("AppendPDFFile"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ArrangeAllWindowsStep.cs b/src/SharpFM.Model/Scripting/Steps/ArrangeAllWindowsStep.cs index acf9683d..133ae73c 100644 --- a/src/SharpFM.Model/Scripting/Steps/ArrangeAllWindowsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ArrangeAllWindowsStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class ArrangeAllWindowsStep : ScriptStep, IStepFactory +public sealed class ArrangeAllWindowsStep : ScriptStep, IStepFactory { public const int XmlId = 120; public const string XmlName = "Arrange All Windows"; @@ -29,16 +27,6 @@ public ArrangeAllWindowsStep(string windowArrangement = "Cascade Window", bool e WindowArrangement = windowArrangement; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -50,7 +38,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("WindowArrangement") { PocoProperty = "WindowArrangement", DefaultValue = "Cascade Window", ValidValues = ["Tile Horizontally", "Tile Vertically", "Cascade Window", "Bring All To Front"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/BeepStep.cs b/src/SharpFM.Model/Scripting/Steps/BeepStep.cs index 35963886..dd899e30 100644 --- a/src/SharpFM.Model/Scripting/Steps/BeepStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/BeepStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -15,7 +13,7 @@ namespace SharpFM.Model.Scripting.Steps; /// exist in FM Pro's clipboard output. No advanced-syntax extensions are /// required; the step's display text is literally its name. /// -public sealed class BeepStep : ScriptStep, IStepFactory +public sealed class BeepStep : ScriptStep, IStepFactory { public const int XmlId = 93; public const string XmlName = "Beep"; @@ -24,23 +22,11 @@ private BeepStep() : base(false) { } public BeepStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "miscellaneous", HelpUrl = "https://help.claris.com/en/pro-help/content/beep.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CancelPdfStep.cs b/src/SharpFM.Model/Scripting/Steps/CancelPdfStep.cs index 5d55a9ea..03ab8482 100644 --- a/src/SharpFM.Model/Scripting/Steps/CancelPdfStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CancelPdfStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -8,7 +6,7 @@ namespace SharpFM.Model.Scripting.Steps; /// Cancel PDF aborts an in-progress multi-step PDF assembly. It carries no /// parameters — the canonical form is an empty <Step> element. /// -public sealed class CancelPdfStep : ScriptStep, IStepFactory +public sealed class CancelPdfStep : ScriptStep, IStepFactory { public const int XmlId = 247; public const string XmlName = "Cancel PDF"; @@ -17,23 +15,11 @@ private CancelPdfStep() : base(false) { } public CancelPdfStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "files", HelpUrl = "https://help.claris.com/en/pro-help/content/cancel-pdf.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ChangePasswordStep.cs b/src/SharpFM.Model/Scripting/Steps/ChangePasswordStep.cs index 3d5d6543..d49f27e5 100644 --- a/src/SharpFM.Model/Scripting/Steps/ChangePasswordStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ChangePasswordStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ChangePasswordStep : ScriptStep, IStepFactory +public sealed class ChangePasswordStep : ScriptStep, IStepFactory { public const int XmlId = 83; public const string XmlName = "Change Password"; @@ -37,16 +35,6 @@ public ChangePasswordStep( WithDialog = withDialog; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -62,7 +50,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("NewPassword") { PocoProperty = "Password", HrLabel = "Password", Optional = true, DisplayEmptyAs = "" }, new BoolStateChild("NoInteract") { PocoProperty = "NoInteract", HrLabel = "With dialog", DisplayInverted = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CheckFoundSetStep.cs b/src/SharpFM.Model/Scripting/Steps/CheckFoundSetStep.cs index d26e65f5..bdd842b3 100644 --- a/src/SharpFM.Model/Scripting/Steps/CheckFoundSetStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CheckFoundSetStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class CheckFoundSetStep : ScriptStep, IStepFactory +public sealed class CheckFoundSetStep : ScriptStep, IStepFactory { public const int XmlId = 20; public const string XmlName = "Check Found Set"; @@ -18,23 +16,11 @@ private CheckFoundSetStep() : base(false) { } public CheckFoundSetStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "spelling", HelpUrl = "https://help.claris.com/en/pro-help/content/check-found-set.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CheckRecordStep.cs b/src/SharpFM.Model/Scripting/Steps/CheckRecordStep.cs index bac761a6..b7d048f4 100644 --- a/src/SharpFM.Model/Scripting/Steps/CheckRecordStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CheckRecordStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class CheckRecordStep : ScriptStep, IStepFactory +public sealed class CheckRecordStep : ScriptStep, IStepFactory { public const int XmlId = 19; public const string XmlName = "Check Record"; @@ -18,23 +16,11 @@ private CheckRecordStep() : base(false) { } public CheckRecordStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "spelling", HelpUrl = "https://help.claris.com/en/pro-help/content/check-record.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CheckSelectionStep.cs b/src/SharpFM.Model/Scripting/Steps/CheckSelectionStep.cs index 876a35c0..ff4f595a 100644 --- a/src/SharpFM.Model/Scripting/Steps/CheckSelectionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CheckSelectionStep.cs @@ -1,14 +1,12 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class CheckSelectionStep : ScriptStep, IStepFactory +public sealed class CheckSelectionStep : ScriptStep, IStepFactory { public const int XmlId = 18; public const string XmlName = "Check Selection"; @@ -28,16 +26,6 @@ public CheckSelectionStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -51,7 +39,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ClearStep.cs b/src/SharpFM.Model/Scripting/Steps/ClearStep.cs index 9aace375..db0f6b56 100644 --- a/src/SharpFM.Model/Scripting/Steps/ClearStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ClearStep.cs @@ -1,14 +1,12 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ClearStep : ScriptStep, IStepFactory +public sealed class ClearStep : ScriptStep, IStepFactory { public const int XmlId = 49; public const string XmlName = "Clear"; @@ -28,16 +26,6 @@ public ClearStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -51,7 +39,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CloseDataFileStep.cs b/src/SharpFM.Model/Scripting/Steps/CloseDataFileStep.cs index 41b96df5..82aba7e0 100644 --- a/src/SharpFM.Model/Scripting/Steps/CloseDataFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CloseDataFileStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class CloseDataFileStep : ScriptStep, IStepFactory +public sealed class CloseDataFileStep : ScriptStep, IStepFactory { public const int XmlId = 196; public const string XmlName = "Close Data File"; @@ -23,16 +21,6 @@ public CloseDataFileStep( FileID = fileID; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -44,7 +32,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BareCalcChild { PocoProperty = "FileID", HrLabel = "File ID", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CloseFileStep.cs b/src/SharpFM.Model/Scripting/Steps/CloseFileStep.cs index 84d7e9cc..1aa3a3ee 100644 --- a/src/SharpFM.Model/Scripting/Steps/CloseFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CloseFileStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class CloseFileStep : ScriptStep, IStepFactory +public sealed class CloseFileStep : ScriptStep, IStepFactory { public const int XmlId = 34; public const string XmlName = "Close File"; @@ -21,8 +19,6 @@ public CloseFileStep(FileReference? file = null, bool enabled = true) File = file; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the token comes from the FileReference value type // (absence means "Current File"), which the shape-driven renderer // cannot surface. @@ -31,10 +27,7 @@ File is null ? "Close File [ Current File ]" : $"Close File [ {File.ToDisplayString()} ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { FileReference? file = null; foreach (var tok in hrParams) @@ -44,7 +37,7 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) file = FileReference.FromDisplayToken(t); break; } - return new CloseFileStep(file, enabled); + File = file; } public static StepMetadata Metadata { get; } = new() @@ -56,7 +49,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) // FileReference is emitted only when a specific file is configured; // its absence means "Current File". Shape = [new ValueTypeChild("FileReference") { PocoProperty = "File", Optional = true }], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ClosePdfStep.cs b/src/SharpFM.Model/Scripting/Steps/ClosePdfStep.cs index 8bf29418..95050859 100644 --- a/src/SharpFM.Model/Scripting/Steps/ClosePdfStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ClosePdfStep.cs @@ -1,7 +1,5 @@ using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// an optional output path, and a <ClosePDFFile> wrapper holding /// the save type. /// -public sealed class ClosePdfStep : ScriptStep, IStepFactory +public sealed class ClosePdfStep : ScriptStep, IStepFactory { public const int XmlId = 245; public const string XmlName = "Close PDF"; @@ -41,8 +39,6 @@ public ClosePdfStep( SaveType = saveType; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: AutoOpen/CreateEmail render as conditional bare tokens, // a form a BoolStateChild cannot produce (it always renders On/Off). public override string ToDisplayLine() @@ -56,10 +52,7 @@ public override string ToDisplayLine() : $"Close PDF [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool autoOpen = false, createEmail = false; string path = ""; @@ -71,7 +64,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (t.Equals("Create email", System.StringComparison.OrdinalIgnoreCase)) createEmail = true; else if (!pathSeen && !string.IsNullOrWhiteSpace(t)) { path = t; pathSeen = true; } } - return new ClosePdfStep(false, autoOpen, createEmail, path, "File", enabled); + CreateDirectories = false; + AutoOpen = autoOpen; + CreateEmail = createEmail; + Path = path; + SaveType = "File"; } public static StepMetadata Metadata { get; } = new() @@ -97,7 +94,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) // mirroring the legacy ClosePDFFile param. new HrOnly("ClosePDFFile"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ClosePopoverStep.cs b/src/SharpFM.Model/Scripting/Steps/ClosePopoverStep.cs index bb5873da..ec682eca 100644 --- a/src/SharpFM.Model/Scripting/Steps/ClosePopoverStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ClosePopoverStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class ClosePopoverStep : ScriptStep, IStepFactory +public sealed class ClosePopoverStep : ScriptStep, IStepFactory { public const int XmlId = 169; public const string XmlName = "Close Popover"; @@ -18,23 +16,11 @@ private ClosePopoverStep() : base(false) { } public ClosePopoverStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "navigation", HelpUrl = "https://help.claris.com/en/pro-help/content/close-popover.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CloseWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/CloseWindowStep.cs index 87750a23..4666641a 100644 --- a/src/SharpFM.Model/Scripting/Steps/CloseWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CloseWindowStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class CloseWindowStep : ScriptStep, IStepFactory +public sealed class CloseWindowStep : ScriptStep, IStepFactory { public const int XmlId = 121; public const string XmlName = "Close Window"; @@ -45,17 +43,12 @@ public CloseWindowStep( private static string WindowHr(string x) => _WindowToHr.TryGetValue(x, out var h) ? h : x; private static string WindowXml(string h) => _WindowFromHr.TryGetValue(h, out var x) ? x : h; - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: variant window-target grammar (Current/ByName) the shape // renderer cannot produce. public override string ToDisplayLine() => "Close Window [ " + (LimitToWindowsOfCurrentFile ? "On" : "Off") + " ; " + WindowHr(Window) + " ; " + Calculation.Text + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Positional display grammar: [ On/Off ; Window ; name-calc ]. A // trailing empty calc token is dropped by the param splitter. @@ -66,7 +59,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Calculation? calculation_v = tokens.Length > 2 && tokens[2].Length > 0 ? new Calculation(tokens[2]) : null; - return new CloseWindowStep(limitToWindowsOfCurrentFile_v, window_v, calculation_v, enabled); + LimitToWindowsOfCurrentFile = limitToWindowsOfCurrentFile_v; + Window = window_v; + Calculation = calculation_v ?? new Calculation(""); } public static StepMetadata Metadata { get; } = new() @@ -83,7 +78,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new EnumValueChild("Window") { PocoProperty = "Window", DefaultValue = "ByName", DisplayValues = ["ByName", "Current"], Display = DisplayMode.Native }, new NamedCalcChild("Name") { PocoProperty = "Calculation", Optional = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CommentStep.cs b/src/SharpFM.Model/Scripting/Steps/CommentStep.cs index 4126ad01..2303664c 100644 --- a/src/SharpFM.Model/Scripting/Steps/CommentStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CommentStep.cs @@ -1,6 +1,5 @@ using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// visible (U+23CE) return glyph so the comment stays on a /// single editor line. The glyph is reversed to a real newline on parse. /// -public sealed class CommentStep : ScriptStep, IStepFactory +public sealed class CommentStep : ScriptStep, IStepFactory { public const int XmlId = 89; public const string XmlName = "# (comment)"; @@ -23,30 +22,27 @@ public sealed class CommentStep : ScriptStep, IStepFactory public string Text { get; set; } + private CommentStep() : base(false) { Text = ""; } + public CommentStep(bool enabled, string text) : base(enabled) { Text = text; } - // Hand-written rather than StepXmlParser: the reader must normalize the - // clipboard's CR/CRLF newlines to LF, a text transform the shape engine - // does not express. - public static new ScriptStep FromXml(XElement step) + // Hand-written: normalizes the clipboard's CR/CRLF newlines to LF, a + // text transform the shape engine does not express. + protected internal override void PopulateFromXml(XElement step) { - var enabled = step.Attribute("enable")?.Value != "False"; // Normalize all line endings to \n. FM Pro's clipboard XML uses // (CR) as its canonical newline; those must not leak into // the display document because AvaloniaEdit would treat them as // visual line breaks, desynchronizing the editor's line numbers // from MultiLineStatementRanges (which splits on \n only). var raw = step.Element("Text")?.Value ?? ""; - var text = NormalizeNewlines(raw); - return new CommentStep(enabled, text); + Text = NormalizeNewlines(raw); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the comment grammar (# prefix, no brackets) is outside // the shared "Name [ tokens ]" display form. public override string ToDisplayLine() => @@ -57,14 +53,13 @@ public override string ToDisplayLine() => ? string.Empty : "# " + Text.Replace("\n", ReturnGlyph.ToString()); - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // ScriptLineParser routes a comment through as a single hrParam // containing everything after the '#' (TrimStart'd). Restore any // ⏎ glyphs back to real newlines before storing. var raw = hrParams.Length > 0 ? hrParams[0] : ""; - var text = raw.Replace(ReturnGlyph.ToString(), "\n"); - return new CommentStep(enabled, text); + Text = raw.Replace(ReturnGlyph.ToString(), "\n"); } public static StepMetadata Metadata { get; } = new() @@ -78,8 +73,6 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) [ new NamedTextChild("Text") { Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; // CR/LF/CRLF → LF. Critical because any raw CR leaking into the diff --git a/src/SharpFM.Model/Scripting/Steps/CommitRecordsRequestsStep.cs b/src/SharpFM.Model/Scripting/Steps/CommitRecordsRequestsStep.cs index 42dfac52..013f39d4 100644 --- a/src/SharpFM.Model/Scripting/Steps/CommitRecordsRequestsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CommitRecordsRequestsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// to state="False"). Two additional flags skip data-entry /// validation and force-commit through external SQL lock conflicts. /// -public sealed class CommitRecordsRequestsStep : ScriptStep, IStepFactory +public sealed class CommitRecordsRequestsStep : ScriptStep, IStepFactory { public const int XmlId = 75; public const string XmlName = "Commit Records/Requests"; @@ -40,16 +38,6 @@ public CommitRecordsRequestsStep( ForceCommit = forceCommit; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -62,7 +50,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Option") { PocoProperty = "SkipDataEntryValidation", HrLabel = "Skip data entry validation" }, new BoolStateChild("ESSForceCommit") { PocoProperty = "ForceCommit", HrLabel = "Force commit" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CommitTransactionStep.cs b/src/SharpFM.Model/Scripting/Steps/CommitTransactionStep.cs index eb1bd032..fdd2a3e0 100644 --- a/src/SharpFM.Model/Scripting/Steps/CommitTransactionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CommitTransactionStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class CommitTransactionStep : ScriptStep, IStepFactory +public sealed class CommitTransactionStep : ScriptStep, IStepFactory { public const int XmlId = 206; public const string XmlName = "Commit Transaction"; @@ -18,23 +16,11 @@ private CommitTransactionStep() : base(false) { } public CommitTransactionStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "control", HelpUrl = "https://help.claris.com/en/pro-help/content/commit-transaction.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigureAIAccountStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigureAIAccountStep.cs index 5cb134da..1200710e 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigureAIAccountStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigureAIAccountStep.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -16,7 +14,7 @@ namespace SharpFM.Model.Scripting.Steps; /// endpoint and API key. is nullable so an /// absent flag stays distinct from a present "False". /// -public sealed class ConfigureAIAccountStep : ScriptStep, IStepFactory +public sealed class ConfigureAIAccountStep : ScriptStep, IStepFactory { public const int XmlId = 212; public const string XmlName = "Configure AI Account"; @@ -62,17 +60,12 @@ public ConfigureAIAccountStep( private static string ModelProviderHr(string x) => _ModelProviderToHr.TryGetValue(x, out var h) ? h : x; private static string ModelProviderXml(string h) => _ModelProviderFromHr.TryGetValue(h, out var x) ? x : h; - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: FileMaker's token order (Account Name before Model // Provider, SSL flag fourth) diverges from the canonical XML order, and // the nullable SSL flag renders absent and explicit-False identically. public override string ToDisplayLine() => "Configure AI Account [ " + "Account Name: " + AccountName.Text + " ; " + "Model Provider: " + ModelProviderHr(ModelProvider) + " ; " + "Endpoint: " + Endpoint.Text + " ; " + "Verify SSL Certificates: " + (VerifySSLCertificates == true ? "On" : "Off") + " ; " + "API key: " + APIKey.Text + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when the SSL flag is explicitly /// stored as False: the display renders both the absent and the @@ -80,7 +73,7 @@ public override string ToDisplayLine() => /// public override bool IsFullyEditable => VerifySSLCertificates != false; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); Calculation? accountName_v = null; @@ -95,7 +88,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) foreach (var tok in tokens) { if (tok.StartsWith("Verify SSL Certificates:", StringComparison.OrdinalIgnoreCase)) { var v = tok.Substring(24).Trim(); verifySSLCertificates_v = v.Equals("On", StringComparison.OrdinalIgnoreCase) ? true : null; break; } } Calculation? aPIKey_v = null; foreach (var tok in tokens) { if (tok.StartsWith("API key:", StringComparison.OrdinalIgnoreCase)) { aPIKey_v = new Calculation(tok.Substring(8).Trim()); break; } } - return new ConfigureAIAccountStep(accountName_v, modelProvider_v, endpoint_v, verifySSLCertificates_v, aPIKey_v, enabled); + AccountName = accountName_v ?? new Calculation(""); + ModelProvider = modelProvider_v; + Endpoint = endpoint_v ?? new Calculation(""); + VerifySSLCertificates = verifySSLCertificates_v; + APIKey = aPIKey_v ?? new Calculation(""); } public static StepMetadata Metadata { get; } = new() @@ -116,7 +113,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("AccessAPIKey") { PocoProperty = "APIKey", HrLabel = "API key", Optional = true, Display = DisplayMode.Augmented }, ]), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigureLocalNotificationStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigureLocalNotificationStep.cs index 229d25bd..1c9499c5 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigureLocalNotificationStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigureLocalNotificationStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// versions. The POCO preserves the full child set via /// for lossless round-trip. /// -public sealed class ConfigureLocalNotificationStep : ScriptStep, IStepFactory +public sealed class ConfigureLocalNotificationStep : ScriptStep, IStepFactory { public const int XmlId = 187; public const string XmlName = "Configure Local Notification"; @@ -30,22 +28,12 @@ public ConfigureLocalNotificationStep(StepChildBag? children = null, bool enable Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -55,7 +43,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigureMachineLearningModelStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigureMachineLearningModelStep.cs index adf1771f..177cf2d2 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigureMachineLearningModelStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigureMachineLearningModelStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ConfigureMachineLearningModelStep : ScriptStep, IStepFactory +public sealed class ConfigureMachineLearningModelStep : ScriptStep, IStepFactory { public const int XmlId = 202; public const string XmlName = "Configure Machine Learning Model"; @@ -24,22 +22,12 @@ public ConfigureMachineLearningModelStep(StepChildBag? children = null, bool ena Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigureNfcReadingStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigureNfcReadingStep.cs index b9595d05..87b18e0d 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigureNfcReadingStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigureNfcReadingStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ConfigureNfcReadingStep : ScriptStep, IStepFactory +public sealed class ConfigureNfcReadingStep : ScriptStep, IStepFactory { public const int XmlId = 201; public const string XmlName = "Configure NFC Reading"; @@ -24,22 +22,12 @@ public ConfigureNfcReadingStep(StepChildBag? children = null, bool enabled = tru Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigurePromptTemplateStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigurePromptTemplateStep.cs index 926f158c..ffa35856 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigurePromptTemplateStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigurePromptTemplateStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ConfigurePromptTemplateStep : ScriptStep, IStepFactory +public sealed class ConfigurePromptTemplateStep : ScriptStep, IStepFactory { public const int XmlId = 226; public const string XmlName = "Configure Prompt Template"; @@ -79,17 +77,12 @@ public ConfigurePromptTemplateStep( private static string TemplateTypeHr(string x) => _TemplateTypeToHr.TryGetValue(x, out var h) ? h : x; private static string TemplateTypeXml(string h) => _TemplateTypeFromHr.TryGetValue(h, out var x) ? x : h; - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: trailing bare On/Off token and token order diverging from // the canonical XML order. public override string ToDisplayLine() => "Configure Prompt Template [ " + "Template Name: " + TemplateName.Text + " ; " + "Model Provider: " + ModelProviderHr(ModelProvider) + " ; " + "Template Type: " + TemplateTypeHr(TemplateType) + " ; " + "SQL Prompt: " + SQLPrompt.Text + " ; " + "Natural Language Prompt: " + NaturalLanguagePrompt.Text + " ; " + "Find Request Prompt: " + FindRequestPrompt.Text + " ; " + "RAG Prompt: " + RAGPrompt.Text + " ; " + (Option ? "On" : "Off") + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); Calculation? templateName_v = null; @@ -107,7 +100,14 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Calculation? rAGPrompt_v = null; foreach (var tok in tokens) { if (tok.StartsWith("RAG Prompt:", StringComparison.OrdinalIgnoreCase)) { rAGPrompt_v = new Calculation(tok.Substring(11).Trim()); break; } } bool option_v = false; - return new ConfigurePromptTemplateStep(templateName_v, modelProvider_v, templateType_v, sQLPrompt_v, naturalLanguagePrompt_v, findRequestPrompt_v, rAGPrompt_v, option_v, enabled); + TemplateName = templateName_v ?? new Calculation(""); + ModelProvider = modelProvider_v; + TemplateType = templateType_v; + SQLPrompt = sQLPrompt_v ?? new Calculation(""); + NaturalLanguagePrompt = naturalLanguagePrompt_v ?? new Calculation(""); + FindRequestPrompt = findRequestPrompt_v ?? new Calculation(""); + RAGPrompt = rAGPrompt_v ?? new Calculation(""); + Option = option_v; } public static StepMetadata Metadata { get; } = new() @@ -133,7 +133,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new HrOnly("FindRequestPrompt") { HrLabel = "Find Request Prompt" }, new HrOnly("RAGPrompt") { HrLabel = "RAG Prompt" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigureRAGAccountStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigureRAGAccountStep.cs index 2cd72d66..209fd9d2 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigureRAGAccountStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigureRAGAccountStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// configured and is emitted empty when not. The step name carries a trailing /// space, preserved verbatim. /// -public sealed class ConfigureRAGAccountStep : ScriptStep, IStepFactory +public sealed class ConfigureRAGAccountStep : ScriptStep, IStepFactory { public const int XmlId = 227; public const string XmlName = "Configure RAG Account "; @@ -39,16 +37,6 @@ public ConfigureRAGAccountStep( VerifySSLCertificates = verifySSLCertificates; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -66,7 +54,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("AccessAPIKey") { PocoProperty = "APIKey", HrLabel = "API key", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ]), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigureRegionMonitorScriptStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigureRegionMonitorScriptStep.cs index 9858b6d0..319493fb 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigureRegionMonitorScriptStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigureRegionMonitorScriptStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ConfigureRegionMonitorScriptStep : ScriptStep, IStepFactory +public sealed class ConfigureRegionMonitorScriptStep : ScriptStep, IStepFactory { public const int XmlId = 185; public const string XmlName = "Configure Region Monitor Script"; @@ -24,22 +22,12 @@ public ConfigureRegionMonitorScriptStep(StepChildBag? children = null, bool enab Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConfigureRegressionModelStep.cs b/src/SharpFM.Model/Scripting/Steps/ConfigureRegressionModelStep.cs index aa16f325..255f350a 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConfigureRegressionModelStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConfigureRegressionModelStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ConfigureRegressionModelStep : ScriptStep, IStepFactory +public sealed class ConfigureRegressionModelStep : ScriptStep, IStepFactory { public const int XmlId = 222; public const string XmlName = "Configure Regression Model"; @@ -24,22 +22,12 @@ public ConfigureRegressionModelStep(StepChildBag? children = null, bool enabled Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConstrainFoundSetStep.cs b/src/SharpFM.Model/Scripting/Steps/ConstrainFoundSetStep.cs index 6751c0fd..1fb4cd89 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConstrainFoundSetStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConstrainFoundSetStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ConstrainFoundSetStep : ScriptStep, IStepFactory +public sealed class ConstrainFoundSetStep : ScriptStep, IStepFactory { public const int XmlId = 126; public const string XmlName = "Constrain Found Set"; @@ -29,13 +27,6 @@ public ConstrainFoundSetStep( Query = query; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when state the display line cannot /// carry is present: a stored <Query> request list, or an @@ -44,9 +35,6 @@ public ConstrainFoundSetStep( /// public override bool IsFullyEditable => !WithoutIndexes && Query is null; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -61,7 +49,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Restore") { PocoProperty = "RestoreStoredRequests", HrLabel = "Restore" }, new ValueTypeChild("Query") { PocoProperty = "Query", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ControlFlowSteps.cs b/src/SharpFM.Model/Scripting/Steps/ControlFlowSteps.cs index 0e8fbd2f..5eeced93 100644 --- a/src/SharpFM.Model/Scripting/Steps/ControlFlowSteps.cs +++ b/src/SharpFM.Model/Scripting/Steps/ControlFlowSteps.cs @@ -1,4 +1,3 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; @@ -22,7 +21,7 @@ namespace SharpFM.Model.Scripting.Steps; /// skill's round-trip testing against FM Pro 2025/2026 supersedes that.) /// /// -public sealed class IfStep : ScriptStep, IStepFactory +public sealed class IfStep : ScriptStep, IStepFactory { public const int XmlId = 68; public const string XmlName = "If"; @@ -40,16 +39,6 @@ public IfStep(bool enabled, Calculation condition) Condition = condition; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -69,12 +58,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BareCalcChild { PocoProperty = "Condition", Required = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], Notes = new StepNotes { Constraints = "Requires a matching End If step." }, - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } -public sealed class ElseIfStep : ScriptStep, IStepFactory +public sealed class ElseIfStep : ScriptStep, IStepFactory { public const int XmlId = 125; public const string XmlName = "Else If"; @@ -92,16 +79,6 @@ public ElseIfStep(bool enabled, Calculation condition) Condition = condition; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -120,12 +97,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Restore") { PocoProperty = "Restore", Display = DisplayMode.Hidden }, new BareCalcChild { PocoProperty = "Condition", Required = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } -public sealed class ElseStep : ScriptStep, IStepFactory +public sealed class ElseStep : ScriptStep, IStepFactory { public const int XmlId = 69; public const string XmlName = "Else"; @@ -138,16 +113,6 @@ private ElseStep() : base(false) { } public ElseStep(bool enabled) : base(enabled) { } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -162,12 +127,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => }, // Canonical §8.1: . Shape = [new BoolStateChild("Restore") { PocoProperty = "Restore", Display = DisplayMode.Hidden }], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } -public sealed class EndIfStep : ScriptStep, IStepFactory +public sealed class EndIfStep : ScriptStep, IStepFactory { public const int XmlId = 70; public const string XmlName = "End If"; @@ -177,16 +140,6 @@ private EndIfStep() : base(false) { } public EndIfStep(bool enabled) : base(enabled) { } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -199,12 +152,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => Role = BlockPairRole.Close, Partners = ["If"], }, - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } -public sealed class LoopStep : ScriptStep, IStepFactory +public sealed class LoopStep : ScriptStep, IStepFactory { public const int XmlId = 71; public const string XmlName = "Loop"; @@ -220,16 +171,6 @@ private LoopStep() : base(false) { } public LoopStep(bool enabled) : base(enabled) { } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -248,12 +189,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Restore") { PocoProperty = "Restore", Display = DisplayMode.Hidden }, new EnumValueChild("FlushType") { PocoProperty = "FlushType", DefaultValue = "Always", Display = DisplayMode.Hidden }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } -public sealed class EndLoopStep : ScriptStep, IStepFactory +public sealed class EndLoopStep : ScriptStep, IStepFactory { public const int XmlId = 73; public const string XmlName = "End Loop"; @@ -263,16 +202,6 @@ private EndLoopStep() : base(false) { } public EndLoopStep(bool enabled) : base(enabled) { } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -285,12 +214,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => Role = BlockPairRole.Close, Partners = ["Loop"], }, - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } -public sealed class ExitLoopIfStep : ScriptStep, IStepFactory +public sealed class ExitLoopIfStep : ScriptStep, IStepFactory { public const int XmlId = 72; public const string XmlName = "Exit Loop If"; @@ -305,16 +232,6 @@ public ExitLoopIfStep(bool enabled, Calculation condition) Condition = condition; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -329,7 +246,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => }, // Canonical §8.1: bare only — no on Exit Loop If. Shape = [new BareCalcChild { PocoProperty = "Condition", Required = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ConvertFileStep.cs b/src/SharpFM.Model/Scripting/Steps/ConvertFileStep.cs index c8235831..bedf54cd 100644 --- a/src/SharpFM.Model/Scripting/Steps/ConvertFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ConvertFileStep.cs @@ -1,8 +1,6 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// booleans (three labeled, one inverted) and an unlabeled positional /// enum (DataSourceType) carrying "File" or "XMLSource". /// -public sealed class ConvertFileStep : ScriptStep, IStepFactory +public sealed class ConvertFileStep : ScriptStep, IStepFactory { public const int XmlId = 139; public const string XmlName = "Convert File"; @@ -48,8 +46,6 @@ public ConvertFileStep( VerifySSLCertificates = verifySSLCertificates; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: With dialog renders mid-line between same-mode groups, an // order the Native-then-Augmented display projection cannot produce. public override string ToDisplayLine() => @@ -61,10 +57,7 @@ public override string ToDisplayLine() => + " ; Verify SSL Certificates: " + (VerifySSLCertificates ? "On" : "Off") + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); var openFile = ParseOn(tokens, "Open File:", defaultValue: false); @@ -79,7 +72,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) !t.StartsWith("With dialog:", StringComparison.OrdinalIgnoreCase) && !t.StartsWith("Verify SSL Certificates:", StringComparison.OrdinalIgnoreCase)) ?? "File"; - return new ConvertFileStep(openFile, skipIdx, withDialog, dataType, sslVerify, enabled); + OpenFile = openFile; + SkipIndexes = skipIdx; + WithDialog = withDialog; + DataSourceType = dataType; + VerifySSLCertificates = sslVerify; } private static bool ParseOn(string[] tokens, string prefix, bool defaultValue) @@ -111,7 +108,5 @@ private static bool ParseOn(string[] tokens, string prefix, bool defaultValue) new BoolStateChild("VerifySSLCertificates") { PocoProperty = "VerifySSLCertificates", HrLabel = "Verify SSL Certificates", Display = DisplayMode.Augmented }, new EnumValueChild("DataSourceType") { PocoProperty = "DataSourceType", Optional = true, DisplayValues = ["File", "XMLSource"], Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CopyAllRecordsRequestsStep.cs b/src/SharpFM.Model/Scripting/Steps/CopyAllRecordsRequestsStep.cs index 21bf5567..7db2ab06 100644 --- a/src/SharpFM.Model/Scripting/Steps/CopyAllRecordsRequestsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CopyAllRecordsRequestsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class CopyAllRecordsRequestsStep : ScriptStep, IStepFactory +public sealed class CopyAllRecordsRequestsStep : ScriptStep, IStepFactory { public const int XmlId = 98; public const string XmlName = "Copy All Records/Requests"; @@ -18,23 +16,11 @@ private CopyAllRecordsRequestsStep() : base(false) { } public CopyAllRecordsRequestsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "records", HelpUrl = "https://help.claris.com/en/pro-help/content/copy-all-records-requests.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CopyRecordRequestStep.cs b/src/SharpFM.Model/Scripting/Steps/CopyRecordRequestStep.cs index 02cb1ad4..163a2ecb 100644 --- a/src/SharpFM.Model/Scripting/Steps/CopyRecordRequestStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CopyRecordRequestStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class CopyRecordRequestStep : ScriptStep, IStepFactory +public sealed class CopyRecordRequestStep : ScriptStep, IStepFactory { public const int XmlId = 101; public const string XmlName = "Copy Record/Request"; @@ -18,23 +16,11 @@ private CopyRecordRequestStep() : base(false) { } public CopyRecordRequestStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "records", HelpUrl = "https://help.claris.com/en/pro-help/content/copy-record-request.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CopyStep.cs b/src/SharpFM.Model/Scripting/Steps/CopyStep.cs index feee9cbb..e7246b8e 100644 --- a/src/SharpFM.Model/Scripting/Steps/CopyStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CopyStep.cs @@ -1,14 +1,12 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class CopyStep : ScriptStep, IStepFactory +public sealed class CopyStep : ScriptStep, IStepFactory { public const int XmlId = 47; public const string XmlName = "Copy"; @@ -28,16 +26,6 @@ public CopyStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -51,7 +39,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CorrectWordStep.cs b/src/SharpFM.Model/Scripting/Steps/CorrectWordStep.cs index 54b8e896..79516569 100644 --- a/src/SharpFM.Model/Scripting/Steps/CorrectWordStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CorrectWordStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class CorrectWordStep : ScriptStep, IStepFactory +public sealed class CorrectWordStep : ScriptStep, IStepFactory { public const int XmlId = 106; public const string XmlName = "Correct Word"; @@ -18,23 +16,11 @@ private CorrectWordStep() : base(false) { } public CorrectWordStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "spelling", HelpUrl = "https://help.claris.com/en/pro-help/content/correct-word.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CreateDataFileStep.cs b/src/SharpFM.Model/Scripting/Steps/CreateDataFileStep.cs index d5910cc2..70c2696e 100644 --- a/src/SharpFM.Model/Scripting/Steps/CreateDataFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CreateDataFileStep.cs @@ -1,11 +1,9 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; -public sealed class CreateDataFileStep : ScriptStep, IStepFactory +public sealed class CreateDataFileStep : ScriptStep, IStepFactory { public const int XmlId = 190; public const string XmlName = "Create Data File"; @@ -25,16 +23,6 @@ public CreateDataFileStep( CreateFolders = createFolders; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -47,7 +35,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedTextChild("UniversalPathList") { PocoProperty = "UniversalPathList", Optional = true, DisplayEmptyAs = "" }, new BoolStateChild("CreateDirectories") { PocoProperty = "CreateFolders", HrLabel = "Create folders" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CreatePdfStep.cs b/src/SharpFM.Model/Scripting/Steps/CreatePdfStep.cs index 0f98d49c..f795abbd 100644 --- a/src/SharpFM.Model/Scripting/Steps/CreatePdfStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CreatePdfStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <CreatePDFFile> wrapper whose Document / Security /// / View blocks reuse the same value types as Save Records as PDF. /// -public sealed class CreatePdfStep : ScriptStep, IStepFactory +public sealed class CreatePdfStep : ScriptStep, IStepFactory { public const int XmlId = 243; public const string XmlName = "Create PDF"; @@ -41,13 +39,6 @@ public CreatePdfStep( View = view ?? PdfView.Default(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// The canonical Document block FileMaker writes for an unconfigured /// step: all pages numbered from 1 with a 1–1 page range. @@ -70,7 +61,7 @@ StoredLabel is null // Hand-written: must materialize the canonical Document block // (DefaultDocument) that the shape parser's plain ctor cannot supply. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var restore = false; foreach (var tok in hrParams) @@ -79,7 +70,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) if (t.StartsWith("Restore:", System.StringComparison.OrdinalIgnoreCase)) restore = t.Substring(8).Trim().Equals("On", System.StringComparison.OrdinalIgnoreCase); } - return new CreatePdfStep(restore, null, DefaultDocument(), null, null, enabled); + RestoreStoredOptions = restore; + StoredLabel = null; + Document = DefaultDocument(); + Security = PdfSecurity.Default(); + View = PdfView.Default(); } public static StepMetadata Metadata { get; } = new() @@ -105,7 +100,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) // display slot, mirroring the legacy CreatePDFFile param. new HrOnly("CreatePDFFile"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/CutStep.cs b/src/SharpFM.Model/Scripting/Steps/CutStep.cs index a8903903..198091db 100644 --- a/src/SharpFM.Model/Scripting/Steps/CutStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/CutStep.cs @@ -1,14 +1,12 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class CutStep : ScriptStep, IStepFactory +public sealed class CutStep : ScriptStep, IStepFactory { public const int XmlId = 46; public const string XmlName = "Cut"; @@ -28,16 +26,6 @@ public CutStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -51,7 +39,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/DeleteAccountStep.cs b/src/SharpFM.Model/Scripting/Steps/DeleteAccountStep.cs index 5238dc3c..7d940118 100644 --- a/src/SharpFM.Model/Scripting/Steps/DeleteAccountStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/DeleteAccountStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class DeleteAccountStep : ScriptStep, IStepFactory +public sealed class DeleteAccountStep : ScriptStep, IStepFactory { public const int XmlId = 135; public const string XmlName = "Delete Account"; @@ -23,16 +21,6 @@ public DeleteAccountStep( AccountName = accountName ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -44,7 +32,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new NamedCalcChild("AccountName") { PocoProperty = "AccountName", HrLabel = "Account Name", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/DeleteAllRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/DeleteAllRecordsStep.cs index bb2cd6c6..0bd0337f 100644 --- a/src/SharpFM.Model/Scripting/Steps/DeleteAllRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/DeleteAllRecordsStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <NoInteract state="True|False"/> child. All round-tripped. /// -public sealed class DeleteAllRecordsStep : ScriptStep, IStepFactory +public sealed class DeleteAllRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 10; public const string XmlName = "Delete All Records"; @@ -35,16 +33,6 @@ public DeleteAllRecordsStep(bool withdialog = false, bool enabled = true) WithDialog = withdialog; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -56,7 +44,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("NoInteract") { PocoProperty = "NoInteract", HrLabel = "With dialog", DisplayInverted = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/DeleteFileStep.cs b/src/SharpFM.Model/Scripting/Steps/DeleteFileStep.cs index cbe00033..20c91d62 100644 --- a/src/SharpFM.Model/Scripting/Steps/DeleteFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/DeleteFileStep.cs @@ -1,8 +1,6 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// file path as text. Display form uses the HR-label prefix /// "Target file:" followed by the raw path string. /// -public sealed class DeleteFileStep : ScriptStep, IStepFactory +public sealed class DeleteFileStep : ScriptStep, IStepFactory { public const int XmlId = 197; public const string XmlName = "Delete File"; @@ -27,22 +25,15 @@ public DeleteFileStep(string targetFile = "", bool enabled = true) : base(enable TargetFile = targetFile; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - // Hand-written: also accepts a bare unlabeled path token, which the // shape parser would ignore (labeled slots never bind positionally). - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tok = hrParams.Length > 0 ? hrParams[0].Trim() : ""; const string Prefix = "Target file:"; if (tok.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase)) tok = tok.Substring(Prefix.Length).Trim(); - return new DeleteFileStep(tok, enabled); + TargetFile = tok; } public static StepMetadata Metadata { get; } = new() @@ -54,7 +45,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) [ new NamedTextChild("UniversalPathList") { PocoProperty = "TargetFile", HrLabel = "Target file", Required = true, Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/DeletePortalRowStep.cs b/src/SharpFM.Model/Scripting/Steps/DeletePortalRowStep.cs index 825364fd..eddf6873 100644 --- a/src/SharpFM.Model/Scripting/Steps/DeletePortalRowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/DeletePortalRowStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <NoInteract state="True|False"/> child. All round-tripped. /// -public sealed class DeletePortalRowStep : ScriptStep, IStepFactory +public sealed class DeletePortalRowStep : ScriptStep, IStepFactory { public const int XmlId = 104; public const string XmlName = "Delete Portal Row"; @@ -35,16 +33,6 @@ public DeletePortalRowStep(bool withdialog = false, bool enabled = true) WithDialog = withdialog; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -56,7 +44,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("NoInteract") { PocoProperty = "NoInteract", HrLabel = "With dialog", DisplayInverted = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/DeleteRecordRequestStep.cs b/src/SharpFM.Model/Scripting/Steps/DeleteRecordRequestStep.cs index 16d2cfc8..b2606335 100644 --- a/src/SharpFM.Model/Scripting/Steps/DeleteRecordRequestStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/DeleteRecordRequestStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <NoInteract state="True|False"/> child. All round-tripped. /// -public sealed class DeleteRecordRequestStep : ScriptStep, IStepFactory +public sealed class DeleteRecordRequestStep : ScriptStep, IStepFactory { public const int XmlId = 9; public const string XmlName = "Delete Record/Request"; @@ -35,16 +33,6 @@ public DeleteRecordRequestStep(bool withdialog = false, bool enabled = true) WithDialog = withdialog; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -56,7 +44,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("NoInteract") { PocoProperty = "NoInteract", HrLabel = "With dialog", DisplayInverted = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/DialPhoneStep.cs b/src/SharpFM.Model/Scripting/Steps/DialPhoneStep.cs index a3c84c94..176ff9d2 100644 --- a/src/SharpFM.Model/Scripting/Steps/DialPhoneStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/DialPhoneStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class DialPhoneStep : ScriptStep, IStepFactory +public sealed class DialPhoneStep : ScriptStep, IStepFactory { public const int XmlId = 65; public const string XmlName = "Dial Phone"; @@ -51,18 +49,13 @@ public DialPhoneStep( Calculation = calculation; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the bare On/Off token maps the wire's "True"/absent // UseDialPreferences value, a translation the display metadata cannot // express without widening the node's wire ValidValues. public override string ToDisplayLine() => "Dial Phone [ " + "With dialog: " + (WithDialog ? "On" : "Off") + " ; " + (UseDialPreferences ? "On" : "Off") + " ; " + (Calculation?.Text ?? "") + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); bool withDialog_v = true; @@ -70,7 +63,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) // Display shape is positional after the dialog flag: [ With dialog ; use-dial-prefs On/Off ; phone calc ]. bool useDialPreferences_v = tokens.Length >= 2 && tokens[1].Equals("On", StringComparison.OrdinalIgnoreCase); Calculation? calculation_v = tokens.Length >= 3 && tokens[2].Length > 0 ? new Calculation(tokens[2]) : null; - return new DialPhoneStep(withDialog_v, useDialPreferences_v, calculation_v, enabled); + WithDialog = withDialog_v; + UseDialPreferences = useDialPreferences_v; + Calculation = calculation_v; } public static StepMetadata Metadata { get; } = new() @@ -88,7 +83,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new EnumValueChild("UseDialPreferences") { PocoProperty = "UseDialPreferencesValue", Optional = true, DisplayValues = ["On", "Off"] }, new BareCalcChild { PocoProperty = "Calculation", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/DuplicateRecordRequestStep.cs b/src/SharpFM.Model/Scripting/Steps/DuplicateRecordRequestStep.cs index 8acf43fc..d27afedf 100644 --- a/src/SharpFM.Model/Scripting/Steps/DuplicateRecordRequestStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/DuplicateRecordRequestStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class DuplicateRecordRequestStep : ScriptStep, IStepFactory +public sealed class DuplicateRecordRequestStep : ScriptStep, IStepFactory { public const int XmlId = 8; public const string XmlName = "Duplicate Record/Request"; @@ -18,23 +16,11 @@ private DuplicateRecordRequestStep() : base(false) { } public DuplicateRecordRequestStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "records", HelpUrl = "https://help.claris.com/en/pro-help/content/duplicate-record-request.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/EditUserDictionaryStep.cs b/src/SharpFM.Model/Scripting/Steps/EditUserDictionaryStep.cs index eef74d82..361d4c2e 100644 --- a/src/SharpFM.Model/Scripting/Steps/EditUserDictionaryStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/EditUserDictionaryStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class EditUserDictionaryStep : ScriptStep, IStepFactory +public sealed class EditUserDictionaryStep : ScriptStep, IStepFactory { public const int XmlId = 109; public const string XmlName = "Edit User Dictionary"; @@ -18,23 +16,11 @@ private EditUserDictionaryStep() : base(false) { } public EditUserDictionaryStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "spelling", HelpUrl = "https://help.claris.com/en/pro-help/content/edit-user-dictionary.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/EnableAccountStep.cs b/src/SharpFM.Model/Scripting/Steps/EnableAccountStep.cs index ddfd983d..27c18f4e 100644 --- a/src/SharpFM.Model/Scripting/Steps/EnableAccountStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/EnableAccountStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class EnableAccountStep : ScriptStep, IStepFactory +public sealed class EnableAccountStep : ScriptStep, IStepFactory { public const int XmlId = 137; public const string XmlName = "Enable Account"; @@ -26,16 +24,6 @@ public EnableAccountStep( AccountOperation = accountOperation; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("AccountName") { PocoProperty = "AccountName", HrLabel = "Account Name", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new EnumValueChild("AccountOperation") { PocoProperty = "AccountOperation", DefaultValue = "Activate", DisplayValues = ["Activate", "Deactivate"], Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/EnableTouchKeyboardStep.cs b/src/SharpFM.Model/Scripting/Steps/EnableTouchKeyboardStep.cs index f5e55d45..dc7515d1 100644 --- a/src/SharpFM.Model/Scripting/Steps/EnableTouchKeyboardStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/EnableTouchKeyboardStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class EnableTouchKeyboardStep : ScriptStep, IStepFactory +public sealed class EnableTouchKeyboardStep : ScriptStep, IStepFactory { public const int XmlId = 174; public const string XmlName = "Enable Touch Keyboard"; @@ -29,16 +27,6 @@ public EnableTouchKeyboardStep(string showHide = "Show", bool enabled = true) ShowHide = showHide; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -50,7 +38,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("ShowHide") { PocoProperty = "ShowHide", DefaultValue = "Show", ValidValues = ["On", "Off", "Toggle"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/EnterBrowseModeStep.cs b/src/SharpFM.Model/Scripting/Steps/EnterBrowseModeStep.cs index 664d763b..dfa31c32 100644 --- a/src/SharpFM.Model/Scripting/Steps/EnterBrowseModeStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/EnterBrowseModeStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <Pause state="True|False"/> child. All round-tripped. /// -public sealed class EnterBrowseModeStep : ScriptStep, IStepFactory +public sealed class EnterBrowseModeStep : ScriptStep, IStepFactory { public const int XmlId = 55; public const string XmlName = "Enter Browse Mode"; @@ -27,16 +25,6 @@ public EnterBrowseModeStep(bool pause = false, bool enabled = true) Pause = pause; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -48,7 +36,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("Pause") { PocoProperty = "Pause", HrLabel = "Pause" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/EnterFindModeStep.cs b/src/SharpFM.Model/Scripting/Steps/EnterFindModeStep.cs index 049b9965..6f52e904 100644 --- a/src/SharpFM.Model/Scripting/Steps/EnterFindModeStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/EnterFindModeStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class EnterFindModeStep : ScriptStep, IStepFactory +public sealed class EnterFindModeStep : ScriptStep, IStepFactory { public const int XmlId = 22; public const string XmlName = "Enter Find Mode"; @@ -29,17 +27,10 @@ public EnterFindModeStep( Query = query; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - // Hand-written: bare display text defaults Pause/Restore to On (FileMaker's // new-step defaults), which the shape parser's false-initialized POCO // cannot reproduce. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool pause = true, restore = true; foreach (var tok in hrParams) @@ -50,7 +41,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (t.StartsWith("Restore:", System.StringComparison.OrdinalIgnoreCase)) restore = t.Substring(8).Trim().Equals("On", System.StringComparison.OrdinalIgnoreCase); } - return new EnterFindModeStep(pause, restore, null, enabled); + Pause = pause; + RestoreStoredRequests = restore; + Query = null; } public static StepMetadata Metadata { get; } = new() @@ -70,7 +63,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new HrOnly("Restore") { Boolean = true }, new HrOnly("Query"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/EnterPreviewModeStep.cs b/src/SharpFM.Model/Scripting/Steps/EnterPreviewModeStep.cs index 91aca9a7..4535431d 100644 --- a/src/SharpFM.Model/Scripting/Steps/EnterPreviewModeStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/EnterPreviewModeStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <Pause state="True|False"/> child. All round-tripped. /// -public sealed class EnterPreviewModeStep : ScriptStep, IStepFactory +public sealed class EnterPreviewModeStep : ScriptStep, IStepFactory { public const int XmlId = 41; public const string XmlName = "Enter Preview Mode"; @@ -27,16 +25,6 @@ public EnterPreviewModeStep(bool pause = false, bool enabled = true) Pause = pause; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -48,7 +36,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("Pause") { PocoProperty = "Pause", HrLabel = "Pause" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ExecuteFileMakerDataApiStep.cs b/src/SharpFM.Model/Scripting/Steps/ExecuteFileMakerDataApiStep.cs index 0b14eeb7..7d44fa40 100644 --- a/src/SharpFM.Model/Scripting/Steps/ExecuteFileMakerDataApiStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ExecuteFileMakerDataApiStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ExecuteFileMakerDataApiStep : ScriptStep, IStepFactory +public sealed class ExecuteFileMakerDataApiStep : ScriptStep, IStepFactory { public const int XmlId = 203; public const string XmlName = "Execute FileMaker Data API"; @@ -30,8 +28,6 @@ public ExecuteFileMakerDataApiStep( Query = query; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: FileMaker shows Target before the query calculation, the // reverse of the canonical XML order the shape must keep. public override string ToDisplayLine() @@ -43,10 +39,7 @@ public override string ToDisplayLine() return $"Execute FileMaker Data API [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool select = true; FieldRef? target = null; @@ -65,7 +58,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) querySeen = true; } } - return new ExecuteFileMakerDataApiStep(select, target, query, enabled); + Select = select; + Target = target; + Query = query; } public static StepMetadata Metadata { get; } = new() @@ -82,7 +77,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BareCalcChild { PocoProperty = "Query", Optional = true, Display = DisplayMode.Native }, new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Target", Optional = true, VariableTextMarker = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ExecuteSqlStep.cs b/src/SharpFM.Model/Scripting/Steps/ExecuteSqlStep.cs index 482506c4..48a8186c 100644 --- a/src/SharpFM.Model/Scripting/Steps/ExecuteSqlStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ExecuteSqlStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ExecuteSqlStep : ScriptStep, IStepFactory +public sealed class ExecuteSqlStep : ScriptStep, IStepFactory { public const int XmlId = 117; public const string XmlName = "Execute SQL"; @@ -34,8 +32,6 @@ public ExecuteSqlStep(bool withDialog = true, SqlProfile? profile = null, bool e Profile = profile; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the SQL Text / Calculated SQL Text token comes from the // hidden Profile value type, which the shape-driven renderer cannot surface. public override string ToDisplayLine() @@ -47,10 +43,7 @@ public override string ToDisplayLine() return $"Execute SQL [ {dialog} ; SQL Text: {Profile.Query ?? ""} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Display is lossy for Execute SQL — ODBC connection fields aren't // expressible in display. Best-effort: capture dialog and SQL text. @@ -82,7 +75,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) isCalc ? null : sql, isCalc ? new Calculation(sql) : null) : null; - return new ExecuteSqlStep(withDialog, profile, enabled); + WithDialog = withDialog; + Profile = profile; } public static StepMetadata Metadata { get; } = new() @@ -99,7 +93,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new ValueTypeChild("Profile") { PocoProperty = "Profile", Optional = true, Display = DisplayMode.Hidden }, new HrOnly("Profile"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ExitApplicationStep.cs b/src/SharpFM.Model/Scripting/Steps/ExitApplicationStep.cs index 57ecd64d..d8495dba 100644 --- a/src/SharpFM.Model/Scripting/Steps/ExitApplicationStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ExitApplicationStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class ExitApplicationStep : ScriptStep, IStepFactory +public sealed class ExitApplicationStep : ScriptStep, IStepFactory { public const int XmlId = 44; public const string XmlName = "Exit Application"; @@ -18,23 +16,11 @@ private ExitApplicationStep() : base(false) { } public ExitApplicationStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "miscellaneous", HelpUrl = "https://help.claris.com/en/pro-help/content/exit-application.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ExitScriptStep.cs b/src/SharpFM.Model/Scripting/Steps/ExitScriptStep.cs index 22d00fe3..fadede4a 100644 --- a/src/SharpFM.Model/Scripting/Steps/ExitScriptStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ExitScriptStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ExitScriptStep : ScriptStep, IStepFactory +public sealed class ExitScriptStep : ScriptStep, IStepFactory { public const int XmlId = 103; public const string XmlName = "Exit Script"; @@ -23,16 +21,6 @@ public ExitScriptStep( Calculation = calculation ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -44,7 +32,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BareCalcChild { PocoProperty = "Calculation", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ExportFieldContentsStep.cs b/src/SharpFM.Model/Scripting/Steps/ExportFieldContentsStep.cs index 33dd1b21..b6262c9c 100644 --- a/src/SharpFM.Model/Scripting/Steps/ExportFieldContentsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ExportFieldContentsStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ExportFieldContentsStep : ScriptStep, IStepFactory +public sealed class ExportFieldContentsStep : ScriptStep, IStepFactory { public const int XmlId = 132; public const string XmlName = "Export Field Contents"; @@ -36,8 +34,6 @@ public ExportFieldContentsStep( CreateDirectories = createDirectories; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: Field renders before Path (reverse of canonical XML order) // and AutoOpen/CreateEmail are conditional bare tokens a BoolStateChild // cannot produce. @@ -52,10 +48,7 @@ public override string ToDisplayLine() return $"Export Field Contents [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { FieldRef? field = null; string path = ""; @@ -79,7 +72,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) positional++; } } - return new ExportFieldContentsStep(field, path, autoOpen, createEmail, createDirs, enabled); + Field = field; + Path = path; + AutoOpen = autoOpen; + CreateEmail = createEmail; + CreateDirectories = createDirs; } public static StepMetadata Metadata { get; } = new() @@ -98,7 +95,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedTextChild("UniversalPathList") { PocoProperty = "Path", Optional = true, Display = DisplayMode.Native }, new FieldChild("Field") { PocoProperty = "Field", Optional = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ExportRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/ExportRecordsStep.cs index 5822c358..ec239570 100644 --- a/src/SharpFM.Model/Scripting/Steps/ExportRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ExportRecordsStep.cs @@ -2,7 +2,6 @@ using System.Linq; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +13,7 @@ namespace SharpFM.Model.Scripting.Steps; /// fields to export; SummaryFields is an optional list of summary fields /// that drives grouping. /// -public sealed class ExportRecordsStep : ScriptStep, IStepFactory +public sealed class ExportRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 36; public const string XmlName = "Export Records"; @@ -117,16 +116,6 @@ public ExportRecordsStep( SummaryFields = summaryFields ?? new List(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -150,7 +139,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new HrOnly("ExportEntries"), new HrOnly("SummaryFields"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ExtendFoundSetStep.cs b/src/SharpFM.Model/Scripting/Steps/ExtendFoundSetStep.cs index 349fd1c7..f57a3882 100644 --- a/src/SharpFM.Model/Scripting/Steps/ExtendFoundSetStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ExtendFoundSetStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ExtendFoundSetStep : ScriptStep, IStepFactory +public sealed class ExtendFoundSetStep : ScriptStep, IStepFactory { public const int XmlId = 127; public const string XmlName = "Extend Found Set"; @@ -23,16 +21,6 @@ public ExtendFoundSetStep(bool restoreStoredRequests = true, FindRequestList? qu Query = query; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -45,7 +33,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Restore") { PocoProperty = "RestoreStoredRequests", HrLabel = "Restore" }, new ValueTypeChild("Query") { PocoProperty = "Query", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/FindMatchingRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/FindMatchingRecordsStep.cs index 5e2ee9ec..bbab7675 100644 --- a/src/SharpFM.Model/Scripting/Steps/FindMatchingRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/FindMatchingRecordsStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class FindMatchingRecordsStep : ScriptStep, IStepFactory +public sealed class FindMatchingRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 155; public const string XmlName = "Find Matching Records"; @@ -23,16 +21,6 @@ public FindMatchingRecordsStep(string mode = "FindMatchingReplace", FieldRef? fi Field = field; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => }, new FieldChild("Field") { PocoProperty = "Field", Optional = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/FineTuneModelStep.cs b/src/SharpFM.Model/Scripting/Steps/FineTuneModelStep.cs index a0356a60..c014be68 100644 --- a/src/SharpFM.Model/Scripting/Steps/FineTuneModelStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/FineTuneModelStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class FineTuneModelStep : ScriptStep, IStepFactory +public sealed class FineTuneModelStep : ScriptStep, IStepFactory { public const int XmlId = 213; public const string XmlName = "Fine-Tune Model"; @@ -24,22 +22,12 @@ public FineTuneModelStep(StepChildBag? children = null, bool enabled = true) Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/FlushCacheToDiskStep.cs b/src/SharpFM.Model/Scripting/Steps/FlushCacheToDiskStep.cs index fe37d0c4..f26a535f 100644 --- a/src/SharpFM.Model/Scripting/Steps/FlushCacheToDiskStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/FlushCacheToDiskStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class FlushCacheToDiskStep : ScriptStep, IStepFactory +public sealed class FlushCacheToDiskStep : ScriptStep, IStepFactory { public const int XmlId = 102; public const string XmlName = "Flush Cache to Disk"; @@ -18,23 +16,11 @@ private FlushCacheToDiskStep() : base(false) { } public FlushCacheToDiskStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "miscellaneous", HelpUrl = "https://help.claris.com/en/pro-help/content/flush-cache-to-disk.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/FreezeWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/FreezeWindowStep.cs index 3373f630..76ac116d 100644 --- a/src/SharpFM.Model/Scripting/Steps/FreezeWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/FreezeWindowStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class FreezeWindowStep : ScriptStep, IStepFactory +public sealed class FreezeWindowStep : ScriptStep, IStepFactory { public const int XmlId = 79; public const string XmlName = "Freeze Window"; @@ -18,23 +16,11 @@ private FreezeWindowStep() : base(false) { } public FreezeWindowStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "windows", HelpUrl = "https://help.claris.com/en/pro-help/content/freeze-window.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GenerateResponseFromModelStep.cs b/src/SharpFM.Model/Scripting/Steps/GenerateResponseFromModelStep.cs index bc12c342..f4c02097 100644 --- a/src/SharpFM.Model/Scripting/Steps/GenerateResponseFromModelStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GenerateResponseFromModelStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GenerateResponseFromModelStep : ScriptStep, IStepFactory +public sealed class GenerateResponseFromModelStep : ScriptStep, IStepFactory { public const int XmlId = 220; public const string XmlName = "Generate Response from Model"; @@ -24,22 +22,12 @@ public GenerateResponseFromModelStep(StepChildBag? children = null, bool enabled Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GetDataFilePositionStep.cs b/src/SharpFM.Model/Scripting/Steps/GetDataFilePositionStep.cs index 699cc6c0..f7dd75f9 100644 --- a/src/SharpFM.Model/Scripting/Steps/GetDataFilePositionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GetDataFilePositionStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GetDataFilePositionStep : ScriptStep, IStepFactory +public sealed class GetDataFilePositionStep : ScriptStep, IStepFactory { public const int XmlId = 194; public const string XmlName = "Get Data File Position"; @@ -23,16 +21,6 @@ public GetDataFilePositionStep(Calculation? fileId = null, FieldRef? target = nu Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -45,7 +33,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BareCalcChild { PocoProperty = "FileId", HrLabel = "File ID", Required = true, Optional = true, DisplayEmptyAs = "" }, new FieldChild() { PocoProperty = "Target", HrLabel = "Target", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GetFileExistsStep.cs b/src/SharpFM.Model/Scripting/Steps/GetFileExistsStep.cs index 715857ba..4e5e2924 100644 --- a/src/SharpFM.Model/Scripting/Steps/GetFileExistsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GetFileExistsStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GetFileExistsStep : ScriptStep, IStepFactory +public sealed class GetFileExistsStep : ScriptStep, IStepFactory { public const int XmlId = 188; public const string XmlName = "Get File Exists"; @@ -23,16 +21,6 @@ public GetFileExistsStep(string path = "", FieldRef? target = null, bool enabled Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -45,7 +33,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedTextChild("UniversalPathList") { PocoProperty = "Path", Required = true, Optional = true, DisplayEmptyAs = "" }, new FieldChild() { PocoProperty = "Target", HrLabel = "Target", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GetFileSizeStep.cs b/src/SharpFM.Model/Scripting/Steps/GetFileSizeStep.cs index cdb8dd86..21eb3273 100644 --- a/src/SharpFM.Model/Scripting/Steps/GetFileSizeStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GetFileSizeStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GetFileSizeStep : ScriptStep, IStepFactory +public sealed class GetFileSizeStep : ScriptStep, IStepFactory { public const int XmlId = 189; public const string XmlName = "Get File Size"; @@ -23,16 +21,6 @@ public GetFileSizeStep(string path = "", FieldRef? target = null, bool enabled = Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -45,7 +33,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedTextChild("UniversalPathList") { PocoProperty = "Path", Required = true, Optional = true, DisplayEmptyAs = "" }, new FieldChild() { PocoProperty = "Target", HrLabel = "Target", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GetFolderPathStep.cs b/src/SharpFM.Model/Scripting/Steps/GetFolderPathStep.cs index 5b544179..d37fa6d5 100644 --- a/src/SharpFM.Model/Scripting/Steps/GetFolderPathStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GetFolderPathStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GetFolderPathStep : ScriptStep, IStepFactory +public sealed class GetFolderPathStep : ScriptStep, IStepFactory { public const int XmlId = 181; public const string XmlName = "Get Folder Path"; @@ -35,16 +33,6 @@ public GetFolderPathStep( Calculation3 = calculation3; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -61,7 +49,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("DefaultLocation") { PocoProperty = "Calculation2", Optional = true, DisplayEmptyAs = "" }, new NamedCalcChild("Repetition") { PocoProperty = "Calculation3", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToFieldStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToFieldStep.cs index 679a9e82..b7e8527f 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToFieldStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToFieldStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GoToFieldStep : ScriptStep, IStepFactory +public sealed class GoToFieldStep : ScriptStep, IStepFactory { public const int XmlId = 17; public const string XmlName = "Go to Field"; @@ -26,16 +24,6 @@ public GoToFieldStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "SelectPerform", HrLabel = "Select/perform", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToLayoutStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToLayoutStep.cs index 2f67724f..dbb7d0ee 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToLayoutStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToLayoutStep.cs @@ -3,7 +3,6 @@ using System.Text.RegularExpressions; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -24,7 +23,7 @@ namespace SharpFM.Model.Scripting.Steps; /// schema access. /// /// -public sealed class GoToLayoutStep : ScriptStep, IStepFactory +public sealed class GoToLayoutStep : ScriptStep, IStepFactory { public const int XmlId = 6; public const string XmlName = "Go to Layout"; @@ -32,6 +31,11 @@ public sealed class GoToLayoutStep : ScriptStep, IStepFactory public LayoutTarget Target { get; set; } public Animation? Animation { get; set; } + private GoToLayoutStep() : base(false) + { + Target = new LayoutTarget.Original(); + } + public GoToLayoutStep(bool enabled, LayoutTarget target, Animation? animation = null) : base(enabled) { @@ -41,13 +45,12 @@ public GoToLayoutStep(bool enabled, LayoutTarget target, Animation? animation = // --- XML parse --- - // Hand-written rather than StepXmlParser: the reader is deliberately more - // tolerant than the canonical shape — it accepts legacy wire-value aliases - // and degrades a SelectedLayout with no named reference to Original - // instead of materializing an empty target. - public static new ScriptStep FromXml(XElement step) + // Hand-written: the reader is deliberately more tolerant than the + // canonical shape — it accepts legacy wire-value aliases and degrades a + // SelectedLayout with no named reference to Original instead of + // materializing an empty target. + protected internal override void PopulateFromXml(XElement step) { - var enabled = step.Attribute("enable")?.Value != "False"; var destWire = step.Element("LayoutDestination")?.Attribute("value")?.Value ?? "SelectedLayout"; var layoutEl = step.Element("Layout"); @@ -73,7 +76,8 @@ public GoToLayoutStep(bool enabled, LayoutTarget target, Animation? animation = var animationEl = step.Element("Animation"); var animation = animationEl is not null ? Values.Animation.FromXml(animationEl) : null; - return new GoToLayoutStep(enabled, target, animation); + Target = target; + Animation = animation; } private static Calculation ReadCalculationFromLayout(XElement? layoutEl) @@ -82,10 +86,6 @@ private static Calculation ReadCalculationFromLayout(XElement? layoutEl) return calcEl is not null ? Calculation.FromXml(calcEl) : new Calculation(""); } - // --- XML emit --- - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // --- Display text render --- // Hand-written: quoted "layout name" / original-layout variant grammar @@ -131,7 +131,7 @@ public override string ToDisplayLine() "^\"(?.*)\"\\s*\\(#(?\\d+)\\)$", RegexOptions.Compiled); - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { LayoutTarget target = new LayoutTarget.Original(); Animation? animation = null; @@ -181,7 +181,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) } } - return new GoToLayoutStep(enabled, target, animation); + Target = target; + Animation = animation; } public static StepMetadata Metadata { get; } = new() @@ -220,7 +221,5 @@ [new EnumValueChild("LayoutDestination") { PocoProperty = "WireValue" }]) new HrOnly("Layout"), new ValueTypeChild("Animation") { Display = DisplayMode.Augmented }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToListOfRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToListOfRecordsStep.cs index 6b4fa97b..c80266b7 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToListOfRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToListOfRecordsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// IDs (list of values, JSON array, or array of {recordId} objects), /// a layout destination enum, and window geometry for the new-window mode. /// -public sealed class GoToListOfRecordsStep : ScriptStep, IStepFactory +public sealed class GoToListOfRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 228; public const string XmlName = "Go to List of Records"; @@ -37,8 +35,6 @@ public GoToListOfRecordsStep( WindowStyles = windowStyles ?? NewWindowStyles.Default(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: shows RowList/Layout in the reverse of canonical XML order // and "New window" as a conditional bare token a BoolStateChild cannot render. public override string ToDisplayLine() @@ -52,12 +48,9 @@ public override string ToDisplayLine() return $"Go to List of Records [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - // Hand-written: display is lossy (RowList is the only parseable field) and // an unlabeled shape parse would mis-bind the labeled Records/Layout tokens. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { Calculation rowList = new(""); foreach (var tok in hrParams) @@ -66,7 +59,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) if (t.StartsWith("Records:", System.StringComparison.OrdinalIgnoreCase)) rowList = new Calculation(t.Substring(8).Trim()); } - return new GoToListOfRecordsStep(false, "CurrentLayout", rowList, null, enabled); + ShowInNewWindow = false; + LayoutDestination = "CurrentLayout"; + RowList = rowList; + WindowStyles = NewWindowStyles.Default(); } public static StepMetadata Metadata { get; } = new() @@ -84,7 +80,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("RowList") { PocoProperty = "RowList", Optional = true, Display = DisplayMode.Native }, new ValueTypeChild("NewWndStyles") { PocoProperty = "WindowStyles", Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToNextFieldStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToNextFieldStep.cs index f89de3d6..2a58960e 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToNextFieldStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToNextFieldStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class GoToNextFieldStep : ScriptStep, IStepFactory +public sealed class GoToNextFieldStep : ScriptStep, IStepFactory { public const int XmlId = 4; public const string XmlName = "Go to Next Field"; @@ -18,23 +16,11 @@ private GoToNextFieldStep() : base(false) { } public GoToNextFieldStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "navigation", HelpUrl = "https://help.claris.com/en/pro-help/content/go-to-next-field.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToObjectStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToObjectStep.cs index 854964ef..cda9612e 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToObjectStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToObjectStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GoToObjectStep : ScriptStep, IStepFactory +public sealed class GoToObjectStep : ScriptStep, IStepFactory { public const int XmlId = 145; public const string XmlName = "Go to Object"; @@ -29,17 +27,12 @@ public GoToObjectStep( Calculation2 = calculation2 ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: quoted "object name" token form the shape renderer // cannot produce. public override string ToDisplayLine() => "Go to Object [ " + Calculation.Text + " ; " + Calculation2.Text + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Positional display grammar: [ object-name ; repetition ]. Trailing // empty tokens are dropped by the param splitter. @@ -50,7 +43,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Calculation? calculation2_v = tokens.Length > 1 && tokens[1].Length > 0 ? new Calculation(tokens[1]) : null; - return new GoToObjectStep(calculation_v, calculation2_v, enabled); + Calculation = calculation_v ?? new Calculation(""); + Calculation2 = calculation2_v ?? new Calculation(""); } public static StepMetadata Metadata { get; } = new() @@ -66,7 +60,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("ObjectName") { PocoProperty = "Calculation", Optional = true, Display = DisplayMode.Native }, new NamedCalcChild("Repetition") { PocoProperty = "Calculation2", Optional = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToPortalRowStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToPortalRowStep.cs index d466fd48..bfb0e929 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToPortalRowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToPortalRowStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class GoToPortalRowStep : ScriptStep, IStepFactory +public sealed class GoToPortalRowStep : ScriptStep, IStepFactory { public const int XmlId = 99; public const string XmlName = "Go to Portal Row"; @@ -59,8 +57,6 @@ public GoToPortalRowStep( Calculation = calculation; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: per-mode conditional token grammar (First/Last/Previous/ // Next/ByCalculation) the shape renderer cannot produce. public override string ToDisplayLine() @@ -72,10 +68,7 @@ public override string ToDisplayLine() return $"Go to Portal Row [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { string location = "Next"; bool selectAll = false, exit = false; @@ -94,7 +87,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) locSeen = true; } } - return new GoToPortalRowStep(true, selectAll, location, exit, calc, enabled); + WithDialog = true; + SelectAll = selectAll; + Location = location; + ExitAfterLast = exit; + Calculation = calc; } public static StepMetadata Metadata { get; } = new() @@ -111,7 +108,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BoolStateChild("Exit") { PocoProperty = "ExitWire", Optional = true, HrLabel = "Exit after last" }, new BareCalcChild { PocoProperty = "CalculationWire", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToPreviousFieldStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToPreviousFieldStep.cs index 1c3a41c3..9b46108f 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToPreviousFieldStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToPreviousFieldStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class GoToPreviousFieldStep : ScriptStep, IStepFactory +public sealed class GoToPreviousFieldStep : ScriptStep, IStepFactory { public const int XmlId = 5; public const string XmlName = "Go to Previous Field"; @@ -18,23 +16,11 @@ private GoToPreviousFieldStep() : base(false) { } public GoToPreviousFieldStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "navigation", HelpUrl = "https://help.claris.com/en/pro-help/content/go-to-previous-field.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/GoToRecordStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToRecordStep.cs index 5b68dc94..eaedd336 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToRecordStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToRecordStep.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -20,7 +19,7 @@ namespace SharpFM.Model.Scripting.Steps; /// (inverted from NoInteract state) and the target calculation. /// /// -public sealed class GoToRecordStep : ScriptStep, IStepFactory +public sealed class GoToRecordStep : ScriptStep, IStepFactory { public const int XmlId = 16; public const string XmlName = "Go to Record/Request/Page"; @@ -31,14 +30,19 @@ public sealed class GoToRecordStep : ScriptStep, IStepFactory public bool NoInteract { get; set; } // Emit-only wire projections for the shape renderer: get-only, so the - // shape parser skips them (FromXml stays hand-written for the typed enum). - // Null means "element not emitted for this location". + // shape parser skips them (PopulateFromXml stays hand-written for the + // typed enum). Null means "element not emitted for this location". public string LocationWire => LocationWireValue(Location); public bool? ExitWire => Location is RowPageLocationKind.Next or RowPageLocationKind.Previous ? ExitAfterLast : null; public Calculation? LocationCalcWire => Location == RowPageLocationKind.ByCalculation ? LocationCalc : null; + private GoToRecordStep() : base(false) + { + Location = RowPageLocationKind.First; + } + public GoToRecordStep( bool enabled, RowPageLocationKind location, @@ -53,10 +57,8 @@ public GoToRecordStep( NoInteract = noInteract; } - public static new ScriptStep FromXml(XElement step) + protected internal override void PopulateFromXml(XElement step) { - var enabled = step.Attribute("enable")?.Value != "False"; - var locationWire = step.Element("RowPageLocation")?.Attribute("value")?.Value ?? "First"; var location = ParseLocation(locationWire); @@ -70,11 +72,12 @@ public GoToRecordStep( var exitAfterLast = step.Element("Exit")?.Attribute("state")?.Value == "True"; var noInteract = step.Element("NoInteract")?.Attribute("state")?.Value == "True"; - return new GoToRecordStep(enabled, location, locationCalc, exitAfterLast, noInteract); + Location = location; + LocationCalc = locationCalc; + ExitAfterLast = exitAfterLast; + NoInteract = noInteract; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: per-mode conditional token grammar (First/Last/Previous/ // Next/ByCalculation) the shape renderer cannot produce. public override string ToDisplayLine() @@ -106,7 +109,7 @@ public override string ToDisplayLine() return $"Go to Record/Request/Page [ {string.Join(" ; ", parts)} ]"; } - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var location = RowPageLocationKind.First; Calculation? locationCalc = null; @@ -142,7 +145,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) location = RowPageLocationKind.Previous; } - return new GoToRecordStep(enabled, location, locationCalc, exitAfterLast, noInteract); + Location = location; + LocationCalc = locationCalc; + ExitAfterLast = exitAfterLast; + NoInteract = noInteract; } public static StepMetadata Metadata { get; } = new() @@ -161,8 +167,6 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new EnumValueChild("RowPageLocation") { PocoProperty = "LocationWire", ValidValues = ["First", "Last", "Previous", "Next", "ByCalculation"], DefaultValue = "Next" }, new BareCalcChild { PocoProperty = "LocationCalcWire", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; private static RowPageLocationKind ParseLocation(string wire) => wire switch diff --git a/src/SharpFM.Model/Scripting/Steps/GoToRelatedRecordStep.cs b/src/SharpFM.Model/Scripting/Steps/GoToRelatedRecordStep.cs index 20c38261..a2780d32 100644 --- a/src/SharpFM.Model/Scripting/Steps/GoToRelatedRecordStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/GoToRelatedRecordStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +12,7 @@ namespace SharpFM.Model.Scripting.Steps; /// Table reference, and an optional Layout. The skill documents no /// <Animation> element for this step, so SharpFM no longer emits one. /// -public sealed class GoToRelatedRecordStep : ScriptStep, IStepFactory +public sealed class GoToRelatedRecordStep : ScriptStep, IStepFactory { public const int XmlId = 74; public const string XmlName = "Go to Related Record"; @@ -61,8 +59,6 @@ public GoToRelatedRecordStep( Layout = layout; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: quoted "From table:"/"Using layout:" grammar the shape // renderer cannot produce. public override string ToDisplayLine() @@ -77,10 +73,7 @@ public override string ToDisplayLine() return $"Go to Related Record [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Display form is lossy — NewWndStyles attrs and LayoutDestination calc // variants can't all round-trip. @@ -101,7 +94,14 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (t.Equals("New window", StringComparison.OrdinalIgnoreCase)) newWindow = true; } - return new GoToRelatedRecordStep(showOnly, matchAll, newWindow, true, "SelectedLayout", null, table, layout, enabled); + ShowOnlyRelated = showOnly; + MatchAllRecords = matchAll; + ShowInNewWindow = newWindow; + RestoreWindowGeometry = true; + LayoutDestination = "SelectedLayout"; + WindowStyles = NewWindowStyles.Default(); + Table = table ?? new NamedRef(0, ""); + Layout = layout; } private static string Unquote(string s) @@ -133,7 +133,5 @@ private static string Unquote(string s) new NamedRefChild("Layout") { PocoProperty = "Layout", Optional = true, Display = DisplayMode.Native }, new HrOnly("NewWndStyles"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/HaltScriptStep.cs b/src/SharpFM.Model/Scripting/Steps/HaltScriptStep.cs index 4d115ee8..36651fd7 100644 --- a/src/SharpFM.Model/Scripting/Steps/HaltScriptStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/HaltScriptStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class HaltScriptStep : ScriptStep, IStepFactory +public sealed class HaltScriptStep : ScriptStep, IStepFactory { public const int XmlId = 90; public const string XmlName = "Halt Script"; @@ -18,23 +16,11 @@ private HaltScriptStep() : base(false) { } public HaltScriptStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "control", HelpUrl = "https://help.claris.com/en/pro-help/content/halt-script.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ImportRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/ImportRecordsStep.cs index 7dd61ad7..3dc03052 100644 --- a/src/SharpFM.Model/Scripting/Steps/ImportRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ImportRecordsStep.cs @@ -2,7 +2,6 @@ using System.Linq; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +13,7 @@ namespace SharpFM.Model.Scripting.Steps; /// mapping is typed via ImportTargetField (map: Import / DoNotImport / /// Match). /// -public sealed class ImportRecordsStep : ScriptStep, IStepFactory +public sealed class ImportRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 35; public const string XmlName = "Import Records"; @@ -108,16 +107,6 @@ public ImportRecordsStep( TargetFields = targetFields ?? new List(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -138,7 +127,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new HrOnly("Table"), new HrOnly("TargetFields"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertAudioVideoStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertAudioVideoStep.cs index 70c259de..233a815c 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertAudioVideoStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertAudioVideoStep.cs @@ -1,8 +1,6 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// that carries BOTH the file path as text content AND a "type" /// attribute marking the payload as embedded or a reference. /// -public sealed class InsertAudioVideoStep : ScriptStep, IStepFactory +public sealed class InsertAudioVideoStep : ScriptStep, IStepFactory { public const int XmlId = 159; public const string XmlName = "Insert Audio/Video"; @@ -33,17 +31,12 @@ public InsertAudioVideoStep( Reference = reference; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the single wire element splits into two display tokens // (path text + type attribute), which the shape renderer cannot produce. public override string ToDisplayLine() => $"Insert Audio/Video [ {Path} ; Reference: {Reference} ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); string reference = "Embedded"; @@ -57,7 +50,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) } var path = tokens.FirstOrDefault(t => !t.StartsWith("Reference:", StringComparison.OrdinalIgnoreCase)) ?? ""; - return new InsertAudioVideoStep(path, reference, enabled); + Path = path; + Reference = reference; } public static StepMetadata Metadata { get; } = new() @@ -79,7 +73,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) ValidValues = ["Embedded", "Reference"], }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertCalculatedResultStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertCalculatedResultStep.cs index 6e155e5f..3deb9222 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertCalculatedResultStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertCalculatedResultStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -15,7 +13,7 @@ namespace SharpFM.Model.Scripting.Steps; /// via the FieldRef's IsVariable flag and emitting the <Text/> sibling /// accordingly. /// -public sealed class InsertCalculatedResultStep : ScriptStep, IStepFactory +public sealed class InsertCalculatedResultStep : ScriptStep, IStepFactory { public const int XmlId = 77; public const string XmlName = "Insert Calculated Result"; @@ -38,8 +36,6 @@ public InsertCalculatedResultStep( Calculation = calculation; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: bare "Select" presence token from a BoolStateChild, which // always renders labeled On/Off. public override string ToDisplayLine() @@ -49,10 +45,7 @@ public override string ToDisplayLine() return $"Insert Calculated Result [ {selectPart}{targetPart}{Calculation?.Text ?? ""} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool selectAll = false; FieldRef? target = null; @@ -71,7 +64,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) calcSeen = true; } } - return new InsertCalculatedResultStep(selectAll, target, calc, enabled); + SelectAll = selectAll; + Target = target; + Calculation = calc; } public static StepMetadata Metadata { get; } = new() @@ -89,7 +84,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BareCalcChild { PocoProperty = "Calculation", Optional = true, Display = DisplayMode.Native }, new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Target", Optional = true, VariableTextMarker = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertCurrentDateStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertCurrentDateStep.cs index 25e20fa8..1f30a76e 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertCurrentDateStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertCurrentDateStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InsertCurrentDateStep : ScriptStep, IStepFactory +public sealed class InsertCurrentDateStep : ScriptStep, IStepFactory { public const int XmlId = 13; public const string XmlName = "Insert Current Date"; @@ -26,16 +24,6 @@ public InsertCurrentDateStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertCurrentTimeStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertCurrentTimeStep.cs index e55d6e79..484adca9 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertCurrentTimeStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertCurrentTimeStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InsertCurrentTimeStep : ScriptStep, IStepFactory +public sealed class InsertCurrentTimeStep : ScriptStep, IStepFactory { public const int XmlId = 14; public const string XmlName = "Insert Current Time"; @@ -26,16 +24,6 @@ public InsertCurrentTimeStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertCurrentUserNameStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertCurrentUserNameStep.cs index 37637937..0832be14 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertCurrentUserNameStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertCurrentUserNameStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InsertCurrentUserNameStep : ScriptStep, IStepFactory +public sealed class InsertCurrentUserNameStep : ScriptStep, IStepFactory { public const int XmlId = 60; public const string XmlName = "Insert Current User Name"; @@ -26,16 +24,6 @@ public InsertCurrentUserNameStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingInFoundSetStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingInFoundSetStep.cs index 05253534..cedc7ac9 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingInFoundSetStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingInFoundSetStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +12,7 @@ namespace SharpFM.Model.Scripting.Steps; /// the presence-flag options (Overwrite / ContinueOnError / ShowSummary) and the /// optional parameters calc. Emitted as an empty wrapper when unconfigured. /// -public sealed class InsertEmbeddingInFoundSetStep : ScriptStep, IStepFactory +public sealed class InsertEmbeddingInFoundSetStep : ScriptStep, IStepFactory { public const int XmlId = 216; public const string XmlName = "Insert Embedding in Found Set"; @@ -52,8 +50,6 @@ public InsertEmbeddingInFoundSetStep( Parameters = parameters; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: FileMaker's token order (account/model first, target // mid-line) diverges from the canonical XML order the shape must keep. public override string ToDisplayLine() @@ -72,12 +68,6 @@ public override string ToDisplayLine() return $"Insert Embedding in Found Set [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -100,7 +90,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("Parameters") { PocoProperty = "Parameters", HrLabel = "Parameters", Optional = true, Display = DisplayMode.Augmented }, ]), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingStep.cs index 4aae6a2b..c9b9b745 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertEmbeddingStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// account/model/input calculations; the wrapper is emitted empty when the step /// is unconfigured. /// -public sealed class InsertEmbeddingStep : ScriptStep, IStepFactory +public sealed class InsertEmbeddingStep : ScriptStep, IStepFactory { public const int XmlId = 215; public const string XmlName = "Insert Embedding"; @@ -39,8 +37,6 @@ public InsertEmbeddingStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: FileMaker shows the Target last, but the shape must keep // the canonical XML order (Field before the LLMEmbedding wrapper). public override string ToDisplayLine() @@ -55,12 +51,6 @@ public override string ToDisplayLine() return $"Insert Embedding [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -78,7 +68,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("InputText") { PocoProperty = "InputText", HrLabel = "Input", Optional = true, Display = DisplayMode.Augmented }, ]), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertFileStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertFileStep.cs index 6a18e924..520b7f67 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertFileStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InsertFileStep : ScriptStep, IStepFactory +public sealed class InsertFileStep : ScriptStep, IStepFactory { public const int XmlId = 131; public const string XmlName = "Insert File"; @@ -33,8 +31,6 @@ public InsertFileStep( DialogOptions = dialogOptions; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the storage/compression/display-content tokens live inside // the DialogOptions value type, which the shape-driven renderer cannot // surface; token order also differs from shape order (Path renders last). @@ -65,9 +61,6 @@ public override string ToDisplayLine() return parts.Count == 0 ? "Insert File" : $"Insert File [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when dialog state the display line /// cannot carry is present: a missing DialogOptions block, a custom @@ -78,7 +71,7 @@ public override string ToDisplayLine() public override bool IsFullyEditable => DialogOptions is { Enable: false, Title: null, FilterListXml: null }; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { string path = ""; FieldRef? target = null; @@ -100,7 +93,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) path = t; } var dialogOptions = new InsertFileDialogOptions(asFile, false, null, storage, compress, null); - return new InsertFileStep(path, "Embedded", target, dialogOptions, enabled); + Path = path; + PathType = "Embedded"; + Target = target; + DialogOptions = dialogOptions; } public static StepMetadata Metadata { get; } = new() @@ -115,7 +111,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new FieldChild { PocoProperty = "Target", Optional = true, VariableTextMarker = true, HrLabel = "Target" }, new ValueTypeChild("DialogOptions"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertFromDeviceStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertFromDeviceStep.cs index 04e622ce..f00f318b 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertFromDeviceStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertFromDeviceStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// Photo Library, Music Library, Barcode, Signature) — preserved /// verbatim via for round-trip fidelity. /// -public sealed class InsertFromDeviceStep : ScriptStep, IStepFactory +public sealed class InsertFromDeviceStep : ScriptStep, IStepFactory { public const int XmlId = 161; public const string XmlName = "Insert from Device"; @@ -40,13 +38,6 @@ public InsertFromDeviceStep( DeviceOptions = deviceOptions ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when a device-specific options /// subtree is present — the display line shows only the source and @@ -54,9 +45,6 @@ public InsertFromDeviceStep( /// public override bool IsFullyEditable => DeviceOptions.Children.Count == 0; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -76,7 +64,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => ]), new HrOnly("DeviceOptions"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertFromIndexStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertFromIndexStep.cs index 071228ce..e43751dc 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertFromIndexStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertFromIndexStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InsertFromIndexStep : ScriptStep, IStepFactory +public sealed class InsertFromIndexStep : ScriptStep, IStepFactory { public const int XmlId = 11; public const string XmlName = "Insert from Index"; @@ -26,16 +24,6 @@ public InsertFromIndexStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertFromLastVisitedStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertFromLastVisitedStep.cs index 1476a256..25248825 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertFromLastVisitedStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertFromLastVisitedStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InsertFromLastVisitedStep : ScriptStep, IStepFactory +public sealed class InsertFromLastVisitedStep : ScriptStep, IStepFactory { public const int XmlId = 12; public const string XmlName = "Insert from Last Visited"; @@ -26,16 +24,6 @@ public InsertFromLastVisitedStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SelectAll") { PocoProperty = "Select", HrLabel = "Select", ValidValues = ["On", "Off"], DefaultValue = "True" }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertFromUrlStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertFromUrlStep.cs index 8ab80037..60318935 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertFromUrlStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertFromUrlStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InsertFromUrlStep : ScriptStep, IStepFactory +public sealed class InsertFromUrlStep : ScriptStep, IStepFactory { public const int XmlId = 160; public const string XmlName = "Insert from URL"; @@ -54,8 +52,6 @@ public InsertFromUrlStep( CurlOptions = curlOptions; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: bare "Select" presence token and conditional per-flag // grammar the shape renderer cannot produce. public override string ToDisplayLine() @@ -71,10 +67,7 @@ public override string ToDisplayLine() return $"Insert from URL [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool selectAll = false; bool withDialog = true; @@ -105,7 +98,13 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) urlSeen = true; } } - return new InsertFromUrlStep(selectAll, withDialog, verify, dontEncode, target, url, curl, enabled); + SelectAll = selectAll; + WithDialog = withDialog; + VerifySslCertificates = verify; + DontEncodeUrl = dontEncode; + Target = target; + Url = url; + CurlOptions = curl; } public static StepMetadata Metadata { get; } = new() @@ -125,7 +124,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new FlagChild("Text") { PocoProperty = "TargetIsVariable", Display = DisplayMode.Hidden }, new FieldChild { PocoProperty = "Target", Optional = true, HrLabel = "Target" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertPdfStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertPdfStep.cs index 0efd89af..ee61fd6f 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertPdfStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertPdfStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// prefix conventions. When Path is empty, the user is prompted to pick /// a file. Only works against an interactive container. /// -public sealed class InsertPdfStep : ScriptStep, IStepFactory +public sealed class InsertPdfStep : ScriptStep, IStepFactory { public const int XmlId = 158; public const string XmlName = "Insert PDF"; @@ -29,22 +27,18 @@ public InsertPdfStep(string path = "", string storageType = "Embedded", bool ena StorageType = storageType; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the single wire element splits into two display tokens // (path text + type attribute) via HrOnly slots the renderer cannot drive. public override string ToDisplayLine() => string.IsNullOrEmpty(Path) ? XmlName : $"Insert PDF [ {Path} ; {StorageType} ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { string path = "", type = "Embedded"; if (hrParams.Length >= 1) path = hrParams[0].Trim(); if (hrParams.Length >= 2) type = hrParams[1].Trim(); - return new InsertPdfStep(path, type, enabled); + Path = path; + StorageType = type; } public static StepMetadata Metadata { get; } = new() @@ -70,7 +64,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new HrOnly("UniversalPathList"), new HrOnly("StorageType") { DisplayValues = ["Embedded", "Reference"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertPictureStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertPictureStep.cs index ee8f93f2..11510134 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertPictureStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertPictureStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -10,7 +8,7 @@ namespace SharpFM.Model.Scripting.Steps; /// Same shape as Insert PDF — a UniversalPathList with Embedded/Reference /// storage type. /// -public sealed class InsertPictureStep : ScriptStep, IStepFactory +public sealed class InsertPictureStep : ScriptStep, IStepFactory { public const int XmlId = 56; public const string XmlName = "Insert Picture"; @@ -27,22 +25,18 @@ public InsertPictureStep(string path = "", string storageType = "Embedded", bool StorageType = storageType; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the single wire element splits into two display tokens // (path text + type attribute) via HrOnly slots the renderer cannot drive. public override string ToDisplayLine() => string.IsNullOrEmpty(Path) ? XmlName : $"Insert Picture [ {Path} ; {StorageType} ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { string path = "", type = "Embedded"; if (hrParams.Length >= 1) path = hrParams[0].Trim(); if (hrParams.Length >= 2) type = hrParams[1].Trim(); - return new InsertPictureStep(path, type, enabled); + Path = path; + StorageType = type; } public static StepMetadata Metadata { get; } = new() @@ -65,7 +59,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new HrOnly("UniversalPathList"), new HrOnly("StorageType") { DisplayValues = ["Embedded", "Reference"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InsertTextStep.cs b/src/SharpFM.Model/Scripting/Steps/InsertTextStep.cs index a7da5f06..5fec7150 100644 --- a/src/SharpFM.Model/Scripting/Steps/InsertTextStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InsertTextStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// Text content and the Field target are omitted from the unconfigured /// canonical form, so each is Optional. /// -public sealed class InsertTextStep : ScriptStep, IStepFactory +public sealed class InsertTextStep : ScriptStep, IStepFactory { public const int XmlId = 61; public const string XmlName = "Insert Text"; @@ -32,8 +30,6 @@ public InsertTextStep(bool selectAll = true, FieldRef? target = null, string tex Text = text; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: bare "Select" presence token and quoted text literal the // shape renderer cannot produce. public override string ToDisplayLine() @@ -43,10 +39,7 @@ public override string ToDisplayLine() return $"Insert Text [ {selectPart}{targetPart}\"{Text}\" ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool selectAll = false; FieldRef? target = null; @@ -67,7 +60,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) textSeen = true; } } - return new InsertTextStep(selectAll, target, text, enabled); + SelectAll = selectAll; + Target = target; + Text = text; } public static StepMetadata Metadata { get; } = new() @@ -84,7 +79,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedTextChild("Text") { PocoProperty = "Text", Optional = true }, new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Target", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InstallMenuSetStep.cs b/src/SharpFM.Model/Scripting/Steps/InstallMenuSetStep.cs index 23b9fa36..a601ac3a 100644 --- a/src/SharpFM.Model/Scripting/Steps/InstallMenuSetStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InstallMenuSetStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InstallMenuSetStep : ScriptStep, IStepFactory +public sealed class InstallMenuSetStep : ScriptStep, IStepFactory { public const int XmlId = 142; public const string XmlName = "Install Menu Set"; @@ -24,16 +22,11 @@ public InstallMenuSetStep(NamedRef? menuSet = null, bool useAsFileDefault = fals UseAsFileDefault = useAsFileDefault; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: quoted menu-set name token the shape renderer cannot produce. public override string ToDisplayLine() => $"Install Menu Set [ \"{MenuSet.Name}\" ; Use as file default: {(UseAsFileDefault ? "On" : "Off")} ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { NamedRef menu = new(0, ""); bool useDefault = false; @@ -56,7 +49,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) menuSeen = true; } } - return new InstallMenuSetStep(menu, useDefault, enabled); + MenuSet = menu; + UseAsFileDefault = useDefault; } public static StepMetadata Metadata { get; } = new() @@ -71,7 +65,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BoolStateChild("UseAsFileDefault") { PocoProperty = "UseAsFileDefault", HrLabel = "Use as file default", Display = DisplayMode.Augmented }, new NamedRefChild("CustomMenuSet") { PocoProperty = "MenuSet", Required = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InstallOnTimerScriptStep.cs b/src/SharpFM.Model/Scripting/Steps/InstallOnTimerScriptStep.cs index 12532f4a..3ea48547 100644 --- a/src/SharpFM.Model/Scripting/Steps/InstallOnTimerScriptStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InstallOnTimerScriptStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// calculation wrapped in an <Interval> element. Omitting /// both cancels any running timer on the current window. /// -public sealed class InstallOnTimerScriptStep : ScriptStep, IStepFactory +public sealed class InstallOnTimerScriptStep : ScriptStep, IStepFactory { public const int XmlId = 148; public const string XmlName = "Install OnTimer Script"; @@ -29,8 +27,6 @@ public InstallOnTimerScriptStep(NamedRef? script = null, Calculation? interval = Interval = interval; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: quoted "script name" and placeholder grammar // the shape renderer cannot produce. public override string ToDisplayLine() @@ -41,10 +37,7 @@ public override string ToDisplayLine() : $"Install OnTimer Script [ {script} ; Interval: {Interval.Text} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { NamedRef? script = null; Calculation? interval = null; @@ -65,7 +58,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) scriptSeen = true; } } - return new InstallOnTimerScriptStep(script, interval, enabled); + Script = script; + Interval = interval; } public static StepMetadata Metadata { get; } = new() @@ -82,7 +76,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("Interval") { PocoProperty = "Interval", HrLabel = "Interval", Optional = true, Display = DisplayMode.Augmented }, new NamedRefChild("Script") { PocoProperty = "Script", Optional = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/InstallPlugInFileStep.cs b/src/SharpFM.Model/Scripting/Steps/InstallPlugInFileStep.cs index 47d4465e..b49d10ff 100644 --- a/src/SharpFM.Model/Scripting/Steps/InstallPlugInFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/InstallPlugInFileStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class InstallPlugInFileStep : ScriptStep, IStepFactory +public sealed class InstallPlugInFileStep : ScriptStep, IStepFactory { public const int XmlId = 157; public const string XmlName = "Install Plug-In File"; @@ -24,16 +22,6 @@ public InstallPlugInFileStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -45,7 +33,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new FieldChild("Field") { PocoProperty = "Target", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ModifyLastFindStep.cs b/src/SharpFM.Model/Scripting/Steps/ModifyLastFindStep.cs index d28423ff..827b60b5 100644 --- a/src/SharpFM.Model/Scripting/Steps/ModifyLastFindStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ModifyLastFindStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class ModifyLastFindStep : ScriptStep, IStepFactory +public sealed class ModifyLastFindStep : ScriptStep, IStepFactory { public const int XmlId = 24; public const string XmlName = "Modify Last Find"; @@ -18,23 +16,11 @@ private ModifyLastFindStep() : base(false) { } public ModifyLastFindStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "found sets", HelpUrl = "https://help.claris.com/en/pro-help/content/modify-last-find.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/MoveResizeWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/MoveResizeWindowStep.cs index 6e084ee2..84b2990e 100644 --- a/src/SharpFM.Model/Scripting/Steps/MoveResizeWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/MoveResizeWindowStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class MoveResizeWindowStep : ScriptStep, IStepFactory +public sealed class MoveResizeWindowStep : ScriptStep, IStepFactory { public const int XmlId = 119; public const string XmlName = "Move/Resize Window"; @@ -44,16 +42,6 @@ public MoveResizeWindowStep( Left = left ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -74,7 +62,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("DistanceFromTop") { PocoProperty = "Top", HrLabel = "Top", Optional = true, Display = DisplayMode.Augmented, DisplayEmptyAs = "" }, new NamedCalcChild("DistanceFromLeft") { PocoProperty = "Left", HrLabel = "Left", Optional = true, Display = DisplayMode.Augmented, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/NewFileStep.cs b/src/SharpFM.Model/Scripting/Steps/NewFileStep.cs index b211d3e2..e2a6c3b7 100644 --- a/src/SharpFM.Model/Scripting/Steps/NewFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/NewFileStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class NewFileStep : ScriptStep, IStepFactory +public sealed class NewFileStep : ScriptStep, IStepFactory { public const int XmlId = 82; public const string XmlName = "New File"; @@ -18,23 +16,11 @@ private NewFileStep() : base(false) { } public NewFileStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "files", HelpUrl = "https://help.claris.com/en/pro-help/content/new-file.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/NewRecordRequestStep.cs b/src/SharpFM.Model/Scripting/Steps/NewRecordRequestStep.cs index 7edabcaa..be90601d 100644 --- a/src/SharpFM.Model/Scripting/Steps/NewRecordRequestStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/NewRecordRequestStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class NewRecordRequestStep : ScriptStep, IStepFactory +public sealed class NewRecordRequestStep : ScriptStep, IStepFactory { public const int XmlId = 7; public const string XmlName = "New Record/Request"; @@ -18,23 +16,11 @@ private NewRecordRequestStep() : base(false) { } public NewRecordRequestStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "records", HelpUrl = "https://help.claris.com/en/pro-help/content/new-record-request.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/NewWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/NewWindowStep.cs index eb594cdf..86e6b2b9 100644 --- a/src/SharpFM.Model/Scripting/Steps/NewWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/NewWindowStep.cs @@ -1,8 +1,6 @@ using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -16,7 +14,7 @@ namespace SharpFM.Model.Scripting.Steps; /// value type), then the optional target /// Layout. Unconfigured windows omit every optional child. /// -public sealed class NewWindowStep : ScriptStep, IStepFactory +public sealed class NewWindowStep : ScriptStep, IStepFactory { public const int XmlId = 122; public const string XmlName = "New Window"; @@ -34,13 +32,6 @@ private NewWindowStep() : base(false) { } public NewWindowStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when state the display line cannot /// carry is present: a target layout, window dimensions, a non-default @@ -54,15 +45,14 @@ public NewWindowStep(bool enabled = true) : base(enabled) { } && DistanceFromTop is null && DistanceFromLeft is null && Styles == NewWindowStyles.Default(); - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + // Hand-written: reconstructs the unconfigured LayoutDestination + // "CurrentLayout" wire form, which the shape parser cannot synthesize + // for a display-hidden slot; anything beyond a window name is sealed state. + protected internal override void PopulateFromDisplay(string[] hrParams) { - // Hand-written: reconstructs the unconfigured LayoutDestination - // "CurrentLayout" wire form, which the shape parser cannot synthesize - // for a display-hidden slot; anything beyond a window name is sealed state. - var step = new NewWindowStep(enabled) { LayoutDestination = "CurrentLayout" }; + LayoutDestination = "CurrentLayout"; var name = hrParams.Select(h => h.Trim()).FirstOrDefault(t => t.Length > 0); - if (!string.IsNullOrEmpty(name)) step.Name = new Calculation(name); - return step; + Name = !string.IsNullOrEmpty(name) ? new Calculation(name) : null; } public static StepMetadata Metadata { get; } = new() @@ -84,7 +74,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new ValueTypeChild("NewWndStyles") { PocoProperty = "Styles", Display = DisplayMode.Hidden }, new NamedRefChild("Layout") { PocoProperty = "Layout", Optional = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OmitMultipleRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/OmitMultipleRecordsStep.cs index 0e931540..583c552b 100644 --- a/src/SharpFM.Model/Scripting/Steps/OmitMultipleRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OmitMultipleRecordsStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class OmitMultipleRecordsStep : ScriptStep, IStepFactory +public sealed class OmitMultipleRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 26; public const string XmlName = "Omit Multiple Records"; @@ -37,16 +35,6 @@ public OmitMultipleRecordsStep( Calculation = calculation; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -61,7 +49,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("NoInteract") { PocoProperty = "NoInteract", HrLabel = "With dialog", DisplayInverted = true }, new BareCalcChild { PocoProperty = "Calculation", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OmitRecordStep.cs b/src/SharpFM.Model/Scripting/Steps/OmitRecordStep.cs index 99e52771..a7dc21ba 100644 --- a/src/SharpFM.Model/Scripting/Steps/OmitRecordStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OmitRecordStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OmitRecordStep : ScriptStep, IStepFactory +public sealed class OmitRecordStep : ScriptStep, IStepFactory { public const int XmlId = 25; public const string XmlName = "Omit Record"; @@ -18,23 +16,11 @@ private OmitRecordStep() : base(false) { } public OmitRecordStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "found sets", HelpUrl = "https://help.claris.com/en/pro-help/content/omit-record.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenDataFileStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenDataFileStep.cs index 8f3b3a58..5fa72562 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenDataFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenDataFileStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class OpenDataFileStep : ScriptStep, IStepFactory +public sealed class OpenDataFileStep : ScriptStep, IStepFactory { public const int XmlId = 191; public const string XmlName = "Open Data File"; @@ -24,16 +22,6 @@ public OpenDataFileStep(string path = "", FieldRef? target = null, bool enabled Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -46,7 +34,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedTextChild("UniversalPathList") { PocoProperty = "Path", Required = true, Optional = true, DisplayEmptyAs = "" }, new FieldChild() { PocoProperty = "Target", HrLabel = "Target", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenEditSavedFindsStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenEditSavedFindsStep.cs index 77df315d..9bf97010 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenEditSavedFindsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenEditSavedFindsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenEditSavedFindsStep : ScriptStep, IStepFactory +public sealed class OpenEditSavedFindsStep : ScriptStep, IStepFactory { public const int XmlId = 149; public const string XmlName = "Open Edit Saved Finds"; @@ -18,23 +16,11 @@ private OpenEditSavedFindsStep() : base(false) { } public OpenEditSavedFindsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-edit-saved-finds.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenFavoritesStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenFavoritesStep.cs index 58649a73..08aeb49b 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenFavoritesStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenFavoritesStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenFavoritesStep : ScriptStep, IStepFactory +public sealed class OpenFavoritesStep : ScriptStep, IStepFactory { public const int XmlId = 183; public const string XmlName = "Open Favorites"; @@ -18,22 +16,10 @@ private OpenFavoritesStep() : base(false) { } public OpenFavoritesStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenFileOptionsStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenFileOptionsStep.cs index 27785832..ecee233f 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenFileOptionsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenFileOptionsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenFileOptionsStep : ScriptStep, IStepFactory +public sealed class OpenFileOptionsStep : ScriptStep, IStepFactory { public const int XmlId = 114; public const string XmlName = "Open File Options"; @@ -18,23 +16,11 @@ private OpenFileOptionsStep() : base(false) { } public OpenFileOptionsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-file-options.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenFileStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenFileStep.cs index 81bfcdf0..2dc87921 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenFileStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class OpenFileStep : ScriptStep, IStepFactory +public sealed class OpenFileStep : ScriptStep, IStepFactory { public const int XmlId = 33; public const string XmlName = "Open File"; @@ -24,8 +22,6 @@ public OpenFileStep(bool openHidden = false, FileReference? file = null, bool en File = file; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - public override string ToDisplayLine() { var hidden = "Open hidden: " + (OpenHidden ? "On" : "Off"); @@ -34,10 +30,7 @@ public override string ToDisplayLine() : $"Open File [ {hidden} ; {File.ToDisplayString()} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool hidden = false; FileReference? file = null; @@ -53,7 +46,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) file = FileReference.FromDisplayToken(t); } } - return new OpenFileStep(hidden, file, enabled); + OpenHidden = hidden; + File = file; } public static StepMetadata Metadata { get; } = new() @@ -79,7 +73,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Server = "Not supported.", }, }, - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenFindReplaceStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenFindReplaceStep.cs index cf804aa6..151bae64 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenFindReplaceStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenFindReplaceStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenFindReplaceStep : ScriptStep, IStepFactory +public sealed class OpenFindReplaceStep : ScriptStep, IStepFactory { public const int XmlId = 129; public const string XmlName = "Open Find/Replace"; @@ -18,23 +16,11 @@ private OpenFindReplaceStep() : base(false) { } public OpenFindReplaceStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-find-replace.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenHelpStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenHelpStep.cs index 5685375a..1c86375c 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenHelpStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenHelpStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenHelpStep : ScriptStep, IStepFactory +public sealed class OpenHelpStep : ScriptStep, IStepFactory { public const int XmlId = 32; public const string XmlName = "Open Help"; @@ -18,23 +16,11 @@ private OpenHelpStep() : base(false) { } public OpenHelpStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-help.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenHostsStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenHostsStep.cs index 0aa4f604..ffa0e9a2 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenHostsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenHostsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenHostsStep : ScriptStep, IStepFactory +public sealed class OpenHostsStep : ScriptStep, IStepFactory { public const int XmlId = 118; public const string XmlName = "Open Hosts"; @@ -18,23 +16,11 @@ private OpenHostsStep() : base(false) { } public OpenHostsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-hosts.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenManageContainersStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenManageContainersStep.cs index af5f95fb..657dd11f 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenManageContainersStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenManageContainersStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenManageContainersStep : ScriptStep, IStepFactory +public sealed class OpenManageContainersStep : ScriptStep, IStepFactory { public const int XmlId = 156; public const string XmlName = "Open Manage Containers"; @@ -18,23 +16,11 @@ private OpenManageContainersStep() : base(false) { } public OpenManageContainersStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-manage-containers.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenManageDataSourcesStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenManageDataSourcesStep.cs index b8d3cb6b..279ef579 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenManageDataSourcesStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenManageDataSourcesStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenManageDataSourcesStep : ScriptStep, IStepFactory +public sealed class OpenManageDataSourcesStep : ScriptStep, IStepFactory { public const int XmlId = 140; public const string XmlName = "Open Manage Data Sources"; @@ -18,23 +16,11 @@ private OpenManageDataSourcesStep() : base(false) { } public OpenManageDataSourcesStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-manage-data-sources.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenManageDatabaseStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenManageDatabaseStep.cs index 2fa9610d..4ec862c5 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenManageDatabaseStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenManageDatabaseStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenManageDatabaseStep : ScriptStep, IStepFactory +public sealed class OpenManageDatabaseStep : ScriptStep, IStepFactory { public const int XmlId = 38; public const string XmlName = "Open Manage Database"; @@ -18,23 +16,11 @@ private OpenManageDatabaseStep() : base(false) { } public OpenManageDatabaseStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-manage-database.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenManageLayoutsStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenManageLayoutsStep.cs index bc384ebc..efab4759 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenManageLayoutsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenManageLayoutsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenManageLayoutsStep : ScriptStep, IStepFactory +public sealed class OpenManageLayoutsStep : ScriptStep, IStepFactory { public const int XmlId = 151; public const string XmlName = "Open Manage Layouts"; @@ -18,23 +16,11 @@ private OpenManageLayoutsStep() : base(false) { } public OpenManageLayoutsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-manage-layouts.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenManageThemesStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenManageThemesStep.cs index 3d48d57e..99d800e6 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenManageThemesStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenManageThemesStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenManageThemesStep : ScriptStep, IStepFactory +public sealed class OpenManageThemesStep : ScriptStep, IStepFactory { public const int XmlId = 165; public const string XmlName = "Open Manage Themes"; @@ -18,23 +16,11 @@ private OpenManageThemesStep() : base(false) { } public OpenManageThemesStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-manage-themes.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenManageValueListsStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenManageValueListsStep.cs index 5d7bbd22..b991d32e 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenManageValueListsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenManageValueListsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenManageValueListsStep : ScriptStep, IStepFactory +public sealed class OpenManageValueListsStep : ScriptStep, IStepFactory { public const int XmlId = 112; public const string XmlName = "Open Manage Value Lists"; @@ -18,23 +16,11 @@ private OpenManageValueListsStep() : base(false) { } public OpenManageValueListsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-manage-value-lists.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenPdfStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenPdfStep.cs index 5b2a6637..2f89ec44 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenPdfStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenPdfStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <UniversalPathList>, and the <OpenPDFFile> /// wrapper carries the save type plus an optional open-password calculation. /// -public sealed class OpenPdfStep : ScriptStep, IStepFactory +public sealed class OpenPdfStep : ScriptStep, IStepFactory { public const int XmlId = 246; public const string XmlName = "Open PDF"; @@ -38,13 +36,6 @@ public OpenPdfStep( OpenPassword = openPassword; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when state the display line cannot /// carry is present: an open-password calculation or a non-default save @@ -54,7 +45,7 @@ public OpenPdfStep( // Hand-written: derives the SpecifyFile toggle from the path's presence, // a coupling the shape parser cannot express for a display-hidden slot. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { string path = ""; foreach (var tok in hrParams) @@ -62,7 +53,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) var t = tok.Trim(); if (!string.IsNullOrWhiteSpace(t)) { path = t; break; } } - return new OpenPdfStep(!string.IsNullOrEmpty(path), path, "File", null, enabled); + SpecifyFile = !string.IsNullOrEmpty(path); + Path = path; + SaveType = "File"; + OpenPassword = null; } public static StepMetadata Metadata { get; } = new() @@ -89,7 +83,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) // slot, mirroring the legacy OpenPDFFile param. new HrOnly("OpenPDFFile"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenRecordRequestStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenRecordRequestStep.cs index b3c7445c..78d1b538 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenRecordRequestStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenRecordRequestStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenRecordRequestStep : ScriptStep, IStepFactory +public sealed class OpenRecordRequestStep : ScriptStep, IStepFactory { public const int XmlId = 133; public const string XmlName = "Open Record/Request"; @@ -18,23 +16,11 @@ private OpenRecordRequestStep() : base(false) { } public OpenRecordRequestStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "records", HelpUrl = "https://help.claris.com/en/pro-help/content/open-record-request.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenScriptWorkspaceStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenScriptWorkspaceStep.cs index f45b5c6b..58646d79 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenScriptWorkspaceStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenScriptWorkspaceStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenScriptWorkspaceStep : ScriptStep, IStepFactory +public sealed class OpenScriptWorkspaceStep : ScriptStep, IStepFactory { public const int XmlId = 88; public const string XmlName = "Open Script Workspace"; @@ -18,23 +16,11 @@ private OpenScriptWorkspaceStep() : base(false) { } public OpenScriptWorkspaceStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-script-workspace.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenSettingsStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenSettingsStep.cs index 653b1da4..2f65a6b4 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenSettingsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenSettingsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenSettingsStep : ScriptStep, IStepFactory +public sealed class OpenSettingsStep : ScriptStep, IStepFactory { public const int XmlId = 105; public const string XmlName = "Open Settings"; @@ -18,23 +16,11 @@ private OpenSettingsStep() : base(false) { } public OpenSettingsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-preferences.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenSharingStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenSharingStep.cs index ef10c253..75818f8a 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenSharingStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenSharingStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenSharingStep : ScriptStep, IStepFactory +public sealed class OpenSharingStep : ScriptStep, IStepFactory { public const int XmlId = 113; public const string XmlName = "Open Sharing"; @@ -18,23 +16,11 @@ private OpenSharingStep() : base(false) { } public OpenSharingStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/open-sharing.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenTransactionStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenTransactionStep.cs index 3e2c7252..260e3344 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenTransactionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenTransactionStep.cs @@ -1,8 +1,6 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -20,7 +18,7 @@ namespace SharpFM.Model.Scripting.Steps; /// worth round-tripping. See docs/advanced-filemaker-scripting-syntax.md. /// /// -public sealed class OpenTransactionStep : ScriptStep, IStepFactory +public sealed class OpenTransactionStep : ScriptStep, IStepFactory { public const int XmlId = 205; public const string XmlName = "Open Transaction"; @@ -46,16 +44,6 @@ public OpenTransactionStep( RestoreState = restoreState; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -71,7 +59,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("SkipAutoEntry") { PocoProperty = "SkipAutoEnterOptions", HrLabel = "Skip auto-enter options", Display = DisplayMode.Native }, new BoolStateChild("Restore") { PocoProperty = "RestoreState", Display = DisplayMode.Hidden }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenURLStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenURLStep.cs index d1437f14..ad2c9ed2 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenURLStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenURLStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class OpenURLStep : ScriptStep, IStepFactory +public sealed class OpenURLStep : ScriptStep, IStepFactory { public const int XmlId = 111; public const string XmlName = "Open URL"; @@ -35,16 +33,6 @@ public OpenURLStep( Calculation = calculation ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -59,7 +47,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Option") { PocoProperty = "InExternalBrowser", HrLabel = "In external browser", Display = DisplayMode.Augmented }, new BareCalcChild { PocoProperty = "Calculation", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/OpenUploadToHostStep.cs b/src/SharpFM.Model/Scripting/Steps/OpenUploadToHostStep.cs index 09b84c73..247d78a9 100644 --- a/src/SharpFM.Model/Scripting/Steps/OpenUploadToHostStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/OpenUploadToHostStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class OpenUploadToHostStep : ScriptStep, IStepFactory +public sealed class OpenUploadToHostStep : ScriptStep, IStepFactory { public const int XmlId = 172; public const string XmlName = "Open Upload to Host"; @@ -18,23 +16,11 @@ private OpenUploadToHostStep() : base(false) { } public OpenUploadToHostStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "open menu item", HelpUrl = "https://help.claris.com/en/pro-help/content/upload-to-server.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PasteStep.cs b/src/SharpFM.Model/Scripting/Steps/PasteStep.cs index a38a73de..2cd4c974 100644 --- a/src/SharpFM.Model/Scripting/Steps/PasteStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PasteStep.cs @@ -1,14 +1,12 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PasteStep : ScriptStep, IStepFactory +public sealed class PasteStep : ScriptStep, IStepFactory { public const int XmlId = 48; public const string XmlName = "Paste"; @@ -34,16 +32,6 @@ public PasteStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -61,7 +49,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("LinkAvail") { PocoProperty = "LinkIfAvailable", HrLabel = "Link if available", ValidValues = ["On", "Off"], DefaultValue = "False", Display = DisplayMode.Augmented }, new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Table::Field", Optional = true, Display = DisplayMode.Augmented, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PauseResumeScriptStep.cs b/src/SharpFM.Model/Scripting/Steps/PauseResumeScriptStep.cs index 31a6e9d3..6b29910c 100644 --- a/src/SharpFM.Model/Scripting/Steps/PauseResumeScriptStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PauseResumeScriptStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PauseResumeScriptStep : ScriptStep, IStepFactory +public sealed class PauseResumeScriptStep : ScriptStep, IStepFactory { public const int XmlId = 62; public const string XmlName = "Pause/Resume Script"; @@ -29,16 +27,6 @@ public PauseResumeScriptStep( DurationSeconds = durationSeconds; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new EnumValueChild("PauseTime") { PocoProperty = "PauseTime", DefaultValue = "ForDuration", ValidValues = ["Indefinitely", "ForDuration"], DisplayValues = ["Indefinitely", "Duration (seconds)"] }, new BareCalcChild { PocoProperty = "DurationSeconds", HrLabel = "Duration (seconds)", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformAppleScriptStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformAppleScriptStep.cs index 09825b78..17f727ca 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformAppleScriptStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformAppleScriptStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PerformAppleScriptStep : ScriptStep, IStepFactory +public sealed class PerformAppleScriptStep : ScriptStep, IStepFactory { public const int XmlId = 67; public const string XmlName = "Perform AppleScript"; @@ -32,16 +30,6 @@ public PerformAppleScriptStep( Text = text; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -57,7 +45,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BareCalcChild { PocoProperty = "Calculation", Optional = true, DisplayEmptyAs = "" }, new NamedTextChild("Text") { PocoProperty = "Text", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformFindByNaturalLanguageStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformFindByNaturalLanguageStep.cs index 5b66cd7f..64f98067 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformFindByNaturalLanguageStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformFindByNaturalLanguageStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PerformFindByNaturalLanguageStep : ScriptStep, IStepFactory +public sealed class PerformFindByNaturalLanguageStep : ScriptStep, IStepFactory { public const int XmlId = 221; public const string XmlName = "Perform Find by Natural Language"; @@ -24,22 +22,12 @@ public PerformFindByNaturalLanguageStep(StepChildBag? children = null, bool enab Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformFindReplaceStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformFindReplaceStep.cs index b2b7a63a..aa154613 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformFindReplaceStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformFindReplaceStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// record with the full set of operation attributes, plus a find calc and /// an optional replace calc wrapped in FindCalc / ReplaceCalc elements. /// -public sealed class PerformFindReplaceStep : ScriptStep, IStepFactory +public sealed class PerformFindReplaceStep : ScriptStep, IStepFactory { public const int XmlId = 128; public const string XmlName = "Perform Find/Replace"; @@ -42,8 +40,6 @@ public PerformFindReplaceStep( ReplaceText = replaceText; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the operation type lives inside a ValueTypeChild and the // replace calc is a conditional positional token — variant grammar the // shape renderer cannot express. @@ -67,9 +63,6 @@ public override string ToDisplayLine() return $"Perform Find/Replace [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when operation state the display /// line cannot carry is present: match flags, a non-forward direction, @@ -79,7 +72,7 @@ public override string ToDisplayLine() public override bool IsFullyEditable => Operation is { MatchWholeWords: false, MatchCase: false, Direction: "Forward", WithinOptions: "All", AcrossOptions: "All" }; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Display grammar: [ With dialog: On/Off ; find ; replace? ; operation ]. // The last positional token is the operation type; earlier positional @@ -113,7 +106,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Calculation? replace = positional.Count > 1 ? new(positional[1]) : null; // Canonical unconfigured operation flags; configured flags are sealed state. var operation = new FindReplaceOperation(opType, "Forward", false, false, "All", "All"); - return new PerformFindReplaceStep(withDialog, operation, find, replace, enabled); + WithDialog = withDialog; + Operation = operation; + FindText = find; + ReplaceText = replace; } public static StepMetadata Metadata { get; } = new() @@ -131,7 +127,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("FindCalc") { PocoProperty = "FindText", Optional = true, Display = DisplayMode.Native }, new NamedCalcChild("ReplaceCalc") { PocoProperty = "ReplaceText", Optional = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformFindStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformFindStep.cs index 39736906..1a6ec62e 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformFindStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformFindStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PerformFindStep : ScriptStep, IStepFactory +public sealed class PerformFindStep : ScriptStep, IStepFactory { public const int XmlId = 28; public const string XmlName = "Perform Find"; @@ -30,16 +28,6 @@ public PerformFindStep(bool restoreStoredRequests = true, FindRequestList? query Query = query; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -55,7 +43,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new HrOnly("Restore") { Boolean = true }, new HrOnly("Query"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformJavaScriptInWebViewerStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformJavaScriptInWebViewerStep.cs index 879acfba..8fe5e804 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformJavaScriptInWebViewerStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformJavaScriptInWebViewerStep.cs @@ -1,8 +1,6 @@ using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +12,7 @@ namespace SharpFM.Model.Scripting.Steps; /// list. Parameters are wrapped in <P><Calculation/></P> /// children under a <Parameters Count="N"> element. /// -public sealed class PerformJavaScriptInWebViewerStep : ScriptStep, IStepFactory +public sealed class PerformJavaScriptInWebViewerStep : ScriptStep, IStepFactory { public const int XmlId = 175; public const string XmlName = "Perform JavaScript in Web Viewer"; @@ -37,8 +35,6 @@ public PerformJavaScriptInWebViewerStep( Parameters = parameters ?? new List(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the unconfigured form renders empty brackets and the // parameter list joins as one comma-separated token — forms the shape // display engine cannot express. @@ -52,10 +48,7 @@ public override string ToDisplayLine() return $"Perform JavaScript in Web Viewer [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { Calculation? obj = null; Calculation? fn = null; @@ -74,7 +67,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) parameters.Add(new Calculation(p.Trim())); } } - return new PerformJavaScriptInWebViewerStep(obj, fn, parameters, enabled); + ObjectName = obj; + FunctionName = fn; + Parameters = parameters; } public static StepMetadata Metadata { get; } = new() @@ -92,7 +87,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("FunctionName") { PocoProperty = "FunctionName", HrLabel = "Function Name", Optional = true, Display = DisplayMode.Augmented }, new ParametersList() { PocoProperty = "Parameters", HrLabel = "Parameters", Optional = true, Display = DisplayMode.Augmented }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformQuickFindStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformQuickFindStep.cs index 1d55319b..6bd56816 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformQuickFindStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformQuickFindStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PerformQuickFindStep : ScriptStep, IStepFactory +public sealed class PerformQuickFindStep : ScriptStep, IStepFactory { public const int XmlId = 150; public const string XmlName = "Perform Quick Find"; @@ -26,16 +24,6 @@ public PerformQuickFindStep( Calculation = calculation ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -47,7 +35,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BareCalcChild { PocoProperty = "Calculation", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformRagActionStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformRagActionStep.cs index a5989c77..14f589c0 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformRagActionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformRagActionStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PerformRagActionStep : ScriptStep, IStepFactory +public sealed class PerformRagActionStep : ScriptStep, IStepFactory { public const int XmlId = 219; public const string XmlName = "Perform RAG Action"; @@ -24,22 +22,12 @@ public PerformRagActionStep(StepChildBag? children = null, bool enabled = true) Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerStep.cs index 163a2927..c03dbf60 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerStep.cs @@ -1,6 +1,5 @@ using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// (<Calculated><Calculation/></Calculated>). /// Discriminated via . /// -public sealed class PerformScriptOnServerStep : ScriptStep, IStepFactory +public sealed class PerformScriptOnServerStep : ScriptStep, IStepFactory { public const int XmlId = 164; public const string XmlName = "Perform Script on Server"; @@ -29,6 +28,12 @@ public sealed class PerformScriptOnServerStep : ScriptStep, IStepFactory public NamedRef? ScriptWire => Target is PerformScriptTarget.ByReference byRef ? byRef.Script : null; + private PerformScriptOnServerStep() : base(false) + { + WaitForCompletion = true; + Target = new PerformScriptTarget.ByReference(new NamedRef(0, "")); + } + public PerformScriptOnServerStep( bool waitForCompletion = true, PerformScriptTarget? target = null, @@ -41,8 +46,6 @@ public PerformScriptOnServerStep( Parameter = parameter; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the script target is a variant with a bare quoted-name token order the shape renderer cannot express. public override string ToDisplayLine() { @@ -65,12 +68,11 @@ public override string ToDisplayLine() return $"Perform Script on Server [ {string.Join(" ; ", parts)} ]"; } - // Hand-written rather than StepXmlParser: the Target union is spread - // across two emit-only projection slots, and the degenerate no-reference - // form defaults to an empty by-ref. - public static new ScriptStep FromXml(XElement step) + // Hand-written: the Target union is spread across two emit-only + // projection slots, and the degenerate no-reference form defaults to an + // empty by-ref. + protected internal override void PopulateFromXml(XElement step) { - var enabled = step.Attribute("enable")?.Value != "False"; var wait = step.Element("WaitForCompletion")?.Attribute("state")?.Value == "True"; var calcEl = step.Element("Calculated")?.Element("Calculation"); var scriptEl = step.Element("Script"); @@ -82,10 +84,12 @@ public override string ToDisplayLine() // Parameter is the top-level (not inside Calculated) var paramEl = step.Element("Calculation"); var parameter = paramEl is not null ? Calculation.FromXml(paramEl) : null; - return new PerformScriptOnServerStep(wait, target, parameter, enabled); + WaitForCompletion = wait; + Target = target; + Parameter = parameter; } - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool wait = true; PerformScriptTarget target = new PerformScriptTarget.ByReference(new NamedRef(0, "")); @@ -108,7 +112,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (t.StartsWith("\"") && t.EndsWith("\"") && t.Length >= 2) target = new PerformScriptTarget.ByReference(new NamedRef(0, t.Substring(1, t.Length - 2))); } - return new PerformScriptOnServerStep(wait, target, parameter, enabled); + WaitForCompletion = wait; + Target = target; + Parameter = parameter; } public static StepMetadata Metadata { get; } = new() @@ -128,7 +134,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BareCalcChild { PocoProperty = "Parameter", Optional = true, HrLabel = "Parameter" }, new NamedRefChild("Script") { PocoProperty = "ScriptWire", Optional = true, HrLabel = "Script" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerWithCallbackStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerWithCallbackStep.cs index f35d22c8..cfa5e286 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerWithCallbackStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformScriptOnServerWithCallbackStep.cs @@ -1,6 +1,5 @@ using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// optional CallbackScript block carrying the callback's script ref and /// parameter. /// -public sealed class PerformScriptOnServerWithCallbackStep : ScriptStep, IStepFactory +public sealed class PerformScriptOnServerWithCallbackStep : ScriptStep, IStepFactory { public const int XmlId = 210; public const string XmlName = "Perform Script on Server with Callback"; @@ -36,6 +35,12 @@ Target is PerformScriptTarget.ByReference byRef ? byRef.Script : null; + private PerformScriptOnServerWithCallbackStep() : base(false) + { + State = "Continue"; + Target = new PerformScriptTarget.ByReference(new NamedRef(0, "")); + } + public PerformScriptOnServerWithCallbackStep( string state = "Continue", PerformScriptTarget? target = null, @@ -52,8 +57,6 @@ public PerformScriptOnServerWithCallbackStep( CallbackParameter = callbackParameter; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the script target renders as a bare quoted-name variant token the shape renderer cannot express. public override string ToDisplayLine() { @@ -72,12 +75,11 @@ public override string ToDisplayLine() return $"Perform Script on Server with Callback [ {string.Join(" ; ", parts)} ]"; } - // Hand-written rather than StepXmlParser: the Target union is spread - // across two emit-only projection slots, and the degenerate no-reference - // form defaults to an empty by-ref. - public static new ScriptStep FromXml(XElement step) + // Hand-written: the Target union is spread across two emit-only + // projection slots, and the degenerate no-reference form defaults to an + // empty by-ref. + protected internal override void PopulateFromXml(XElement step) { - var enabled = step.Attribute("enable")?.Value != "False"; var state = step.Element("CallbackScriptState")?.Attribute("value")?.Value ?? "Continue"; var calcEl = step.Element("Calculated")?.Element("Calculation"); var scriptEl = step.Element("Script"); @@ -91,12 +93,18 @@ public override string ToDisplayLine() var cbEl = step.Element("CallbackScript"); var cbScript = cbEl?.Element("ScriptName") is { } sn ? NamedRef.FromXml(sn) : null; var cbParam = cbEl?.Element("ScriptParameter")?.Element("Calculation") is { } cp ? Calculation.FromXml(cp) : null; - return new PerformScriptOnServerWithCallbackStep(state, target, parameter, cbScript, cbParam, enabled); + State = state; + Target = target; + Parameter = parameter; + CallbackScript = cbScript; + CallbackParameter = cbParam; } - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + // Display is lossy for the callback details. Best-effort parse of state + // + target; Parameter/CallbackScript/CallbackParameter are cleared since + // the display form carries no round-trippable representation for them. + protected internal override void PopulateFromDisplay(string[] hrParams) { - // Display is lossy for the callback details. Best-effort parse of state + target. string state = "Continue"; PerformScriptTarget target = new PerformScriptTarget.ByReference(new NamedRef(0, "")); foreach (var tok in hrParams) @@ -105,7 +113,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) if (t.StartsWith("State:", System.StringComparison.OrdinalIgnoreCase)) state = t.Substring(6).Trim(); } - return new PerformScriptOnServerWithCallbackStep(state, target, null, null, null, enabled); + State = state; + Target = target; + Parameter = null; + CallbackScript = null; + CallbackParameter = null; } public static StepMetadata Metadata { get; } = new() @@ -131,7 +143,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("ScriptParameter") { PocoProperty = "CallbackParameter", Optional = true }, ]), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformScriptStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformScriptStep.cs index 097ee46b..135adf47 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformScriptStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformScriptStep.cs @@ -3,7 +3,6 @@ using System.Text.RegularExpressions; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -15,7 +14,7 @@ namespace SharpFM.Model.Scripting.Steps; /// (ByReference / ByCalculation) and an optional parameter Calculation. /// Display uses the (#id) lossless-id convention for static refs. /// -public sealed class PerformScriptStep : ScriptStep, IStepFactory +public sealed class PerformScriptStep : ScriptStep, IStepFactory { public const int XmlId = 1; public const string XmlName = "Perform Script"; @@ -31,6 +30,11 @@ public sealed class PerformScriptStep : ScriptStep, IStepFactory public Calculation? ParameterAfterCalculated => Target is PerformScriptTarget.ByCalculation ? Parameter : null; + private PerformScriptStep() : base(false) + { + Target = new PerformScriptTarget.ByReference(new NamedRef(0, "")); + } + public PerformScriptStep(bool enabled, PerformScriptTarget target, Calculation? parameter = null) : base(enabled) { @@ -38,13 +42,11 @@ public PerformScriptStep(bool enabled, PerformScriptTarget target, Calculation? Parameter = parameter; } - // Hand-written rather than StepXmlParser: tolerates the degenerate - // no-reference form and binds the step-level Parameter regardless of - // which side of the variant it appeared on. - public static new ScriptStep FromXml(XElement step) + // Hand-written: tolerates the degenerate no-reference form and binds + // the step-level Parameter regardless of which side of the variant it + // appeared on. + protected internal override void PopulateFromXml(XElement step) { - var enabled = step.Attribute("enable")?.Value != "False"; - var calculatedEl = step.Element("Calculated"); var scriptEl = step.Element("Script"); var paramCalcEl = step.Element("Calculation"); @@ -68,11 +70,10 @@ public PerformScriptStep(bool enabled, PerformScriptTarget target, Calculation? var parameter = paramCalcEl is not null ? Calculation.FromXml(paramCalcEl) : null; - return new PerformScriptStep(enabled, target, parameter); + Target = target; + Parameter = parameter; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the script target is a variant (by-name renders the quoted name, by-calculation the expression) the shape renderer cannot express. public override string ToDisplayLine() { @@ -103,7 +104,7 @@ public override string ToDisplayLine() "^\"(?.*)\"\\s*\\(#(?\\d+)\\)$", RegexOptions.Compiled); - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { PerformScriptTarget target = new PerformScriptTarget.ByReference(new NamedRef(0, "")); Calculation? parameter = null; @@ -140,7 +141,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) } } - return new PerformScriptStep(enabled, target, parameter); + Target = target; + Parameter = parameter; } public static StepMetadata Metadata { get; } = new() @@ -162,7 +164,5 @@ [new NamedCalcChild("Calculated") { PocoProperty = "NameCalc" }]) ]) { PocoProperty = "Target", Required = true }, new BareCalcChild { PocoProperty = "ParameterAfterCalculated", Optional = true, Display = DisplayMode.Hidden }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformSemanticFindStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformSemanticFindStep.cs index 050eb9ee..702390f5 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformSemanticFindStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformSemanticFindStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PerformSemanticFindStep : ScriptStep, IStepFactory +public sealed class PerformSemanticFindStep : ScriptStep, IStepFactory { public const int XmlId = 218; public const string XmlName = "Perform Semantic Find"; @@ -24,22 +22,12 @@ public PerformSemanticFindStep(StepChildBag? children = null, bool enabled = tru Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PerformSqlQueryByNaturalLanguageStep.cs b/src/SharpFM.Model/Scripting/Steps/PerformSqlQueryByNaturalLanguageStep.cs index df9f109f..f193eb6a 100644 --- a/src/SharpFM.Model/Scripting/Steps/PerformSqlQueryByNaturalLanguageStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PerformSqlQueryByNaturalLanguageStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PerformSqlQueryByNaturalLanguageStep : ScriptStep, IStepFactory +public sealed class PerformSqlQueryByNaturalLanguageStep : ScriptStep, IStepFactory { public const int XmlId = 214; public const string XmlName = "Perform SQL Query by Natural Language"; @@ -24,22 +22,12 @@ public PerformSqlQueryByNaturalLanguageStep(StepChildBag? children = null, bool Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - /// /// Display edits are anchor-preserved when a configured child subtree is /// present — the display line carries only the step name. /// public override bool IsFullyEditable => Children.Children.Count == 0; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -49,7 +37,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new Passthrough { PocoProperty = "Children" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PrintSetupStep.cs b/src/SharpFM.Model/Scripting/Steps/PrintSetupStep.cs index ea6205ca..dde8ce5b 100644 --- a/src/SharpFM.Model/Scripting/Steps/PrintSetupStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PrintSetupStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PrintSetupStep : ScriptStep, IStepFactory +public sealed class PrintSetupStep : ScriptStep, IStepFactory { public const int XmlId = 42; public const string XmlName = "Print Setup"; @@ -32,16 +30,6 @@ public PrintSetupStep( Format = format; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -58,7 +46,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new HrOnly("Restore") { Boolean = true }, new HrOnly("PageFormat"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/PrintStep.cs b/src/SharpFM.Model/Scripting/Steps/PrintStep.cs index 39ea1769..38f53522 100644 --- a/src/SharpFM.Model/Scripting/Steps/PrintStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/PrintStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class PrintStep : ScriptStep, IStepFactory +public sealed class PrintStep : ScriptStep, IStepFactory { public const int XmlId = 43; public const string XmlName = "Print"; @@ -32,16 +30,6 @@ public PrintStep( Settings = settings; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -58,7 +46,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new HrOnly("Restore") { Boolean = true }, new HrOnly("PrintSettings"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ReLoginStep.cs b/src/SharpFM.Model/Scripting/Steps/ReLoginStep.cs index d1d08572..7ab4bed0 100644 --- a/src/SharpFM.Model/Scripting/Steps/ReLoginStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ReLoginStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ReLoginStep : ScriptStep, IStepFactory +public sealed class ReLoginStep : ScriptStep, IStepFactory { public const int XmlId = 138; public const string XmlName = "Re-Login"; @@ -35,16 +33,6 @@ public ReLoginStep( Password = password ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -59,7 +47,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("AccountName") { PocoProperty = "AccountName", HrLabel = "Account Name", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new NamedCalcChild("Password") { PocoProperty = "Password", HrLabel = "Password", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ReadFromDataFileStep.cs b/src/SharpFM.Model/Scripting/Steps/ReadFromDataFileStep.cs index edc4e4f3..95474c1d 100644 --- a/src/SharpFM.Model/Scripting/Steps/ReadFromDataFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ReadFromDataFileStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ReadFromDataFileStep : ScriptStep, IStepFactory +public sealed class ReadFromDataFileStep : ScriptStep, IStepFactory { public const int XmlId = 193; public const string XmlName = "Read from Data File"; @@ -33,8 +31,6 @@ public ReadFromDataFileStep( DataSourceType = dataSourceType; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the amount label is per-mode conditional ("Amount" for // UTF-16, "Amount (bytes)" otherwise) — a form the shape renderer's static // HrLabel cannot express. @@ -55,10 +51,7 @@ public override string ToDisplayLine() return $"Read from Data File [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { Calculation fileId = new(""); Calculation? count = null; @@ -86,7 +79,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) }; } } - return new ReadFromDataFileStep(fileId, count, target, type, enabled); + FileId = fileId; + Count = count; + Target = target; + DataSourceType = type; } public static StepMetadata Metadata { get; } = new() @@ -105,7 +101,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new FieldChild("Field") { PocoProperty = "Target", HrLabel = "Target", Optional = true, VariableTextMarker = true, Display = DisplayMode.Native }, new NamedCalcChild("Count") { PocoProperty = "Count", HrLabel = "Amount (bytes)", Optional = true, Display = DisplayMode.Augmented }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RecoverFileStep.cs b/src/SharpFM.Model/Scripting/Steps/RecoverFileStep.cs index 8116160f..a7a5afe3 100644 --- a/src/SharpFM.Model/Scripting/Steps/RecoverFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RecoverFileStep.cs @@ -1,14 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; -public sealed class RecoverFileStep : ScriptStep, IStepFactory +public sealed class RecoverFileStep : ScriptStep, IStepFactory { public const int XmlId = 95; public const string XmlName = "Recover File"; @@ -31,16 +29,6 @@ public RecoverFileStep( UniversalPathList = universalPathList; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -54,7 +42,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("NoInteract") { PocoProperty = "NoInteractState", HrLabel = "With dialog", Display = DisplayMode.Augmented, DisplayInverted = true }, new NamedTextChild("UniversalPathList") { PocoProperty = "UniversalPathList", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RefreshObjectStep.cs b/src/SharpFM.Model/Scripting/Steps/RefreshObjectStep.cs index ac800df2..00671f41 100644 --- a/src/SharpFM.Model/Scripting/Steps/RefreshObjectStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RefreshObjectStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class RefreshObjectStep : ScriptStep, IStepFactory +public sealed class RefreshObjectStep : ScriptStep, IStepFactory { public const int XmlId = 167; public const string XmlName = "Refresh Object"; @@ -29,16 +27,6 @@ public RefreshObjectStep( Repetition = repetition ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("ObjectName") { PocoProperty = "ObjectName", HrLabel = "Object Name", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new NamedCalcChild("Repetition") { PocoProperty = "Repetition", HrLabel = "Repetition", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RefreshPortalStep.cs b/src/SharpFM.Model/Scripting/Steps/RefreshPortalStep.cs index e1b94943..15e26968 100644 --- a/src/SharpFM.Model/Scripting/Steps/RefreshPortalStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RefreshPortalStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class RefreshPortalStep : ScriptStep, IStepFactory +public sealed class RefreshPortalStep : ScriptStep, IStepFactory { public const int XmlId = 180; public const string XmlName = "Refresh Portal"; @@ -26,16 +24,6 @@ public RefreshPortalStep( ObjectName = objectName; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -47,7 +35,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new NamedCalcChild("ObjectName") { PocoProperty = "ObjectName", HrLabel = "Object Name", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RefreshWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/RefreshWindowStep.cs index e2eb29fb..589ed7bc 100644 --- a/src/SharpFM.Model/Scripting/Steps/RefreshWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RefreshWindowStep.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,10 +9,10 @@ namespace SharpFM.Model.Scripting.Steps; /// /// Zero-loss audit for RefreshWindowStep: the step's XML state is the three /// <Step> attributes plus one child element per metadata param. -/// Display form uses labeled segments joined by ' ; '; FromDisplayParams -/// scans tokens by label so segment order is free. +/// Display form uses labeled segments joined by ' ; '; the shape-driven +/// display parser scans tokens by label so segment order is free. /// -public sealed class RefreshWindowStep : ScriptStep, IStepFactory +public sealed class RefreshWindowStep : ScriptStep, IStepFactory { public const int XmlId = 80; public const string XmlName = "Refresh Window"; @@ -34,16 +32,6 @@ public RefreshWindowStep( FlushCachedExternalData = flushCachedExternalData; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -56,7 +44,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Option") { PocoProperty = "FlushCachedJoinResults", HrLabel = "Flush cached join results", Display = DisplayMode.Augmented }, new BoolStateChild("FlushSQLData") { PocoProperty = "FlushCachedExternalData", HrLabel = "Flush cached external data", Display = DisplayMode.Augmented }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RelookupFieldContentsStep.cs b/src/SharpFM.Model/Scripting/Steps/RelookupFieldContentsStep.cs index fb57a095..f04f6764 100644 --- a/src/SharpFM.Model/Scripting/Steps/RelookupFieldContentsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RelookupFieldContentsStep.cs @@ -1,14 +1,12 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class RelookupFieldContentsStep : ScriptStep, IStepFactory +public sealed class RelookupFieldContentsStep : ScriptStep, IStepFactory { public const int XmlId = 40; public const string XmlName = "Relookup Field Contents"; @@ -36,16 +34,6 @@ public RelookupFieldContentsStep( Target = target; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -60,7 +48,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("NoInteract") { PocoProperty = "NoInteract", HrLabel = "With dialog", DisplayInverted = true }, new FieldChild("Field") { PocoProperty = "Target", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RenameFileStep.cs b/src/SharpFM.Model/Scripting/Steps/RenameFileStep.cs index 282e5277..cf64bfdd 100644 --- a/src/SharpFM.Model/Scripting/Steps/RenameFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RenameFileStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class RenameFileStep : ScriptStep, IStepFactory +public sealed class RenameFileStep : ScriptStep, IStepFactory { public const int XmlId = 199; public const string XmlName = "Rename File"; @@ -29,16 +27,6 @@ public RenameFileStep( NewName = newName; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -51,7 +39,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedTextChild("UniversalPathList") { PocoProperty = "SourceFile", HrLabel = "Source file", Optional = true, DisplayEmptyAs = "" }, new BareCalcChild { PocoProperty = "NewName", HrLabel = "New name", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ReplaceFieldContentsStep.cs b/src/SharpFM.Model/Scripting/Steps/ReplaceFieldContentsStep.cs index 04fd656a..f309e4d4 100644 --- a/src/SharpFM.Model/Scripting/Steps/ReplaceFieldContentsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ReplaceFieldContentsStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +12,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <SerialNumbers/> block) and an optional target <Field>. /// (Earlier revisions dropped <Restore>; the skill round-trips it.) /// -public sealed class ReplaceFieldContentsStep : ScriptStep, IStepFactory +public sealed class ReplaceFieldContentsStep : ScriptStep, IStepFactory { public const int XmlId = 91; public const string XmlName = "Replace Field Contents"; @@ -55,8 +53,6 @@ public ReplaceFieldContentsStep( SerialOptions = serialOptions; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the mode token is per-mode conditional (Calculation mode // shows the calc text, not the enum value) and the skip-auto-enter marker // reads SerialOptions content — grammar the shape renderer cannot express. @@ -79,10 +75,7 @@ public override string ToDisplayLine() return $"Replace Field Contents [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool withDialog = true; FieldRef? field = null; @@ -116,7 +109,11 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) calc = new Calculation(t); } } - return new ReplaceFieldContentsStep(withDialog, field, mode, calc, null, enabled); + WithDialog = withDialog; + Field = field; + Mode = mode; + Calculation = calc; + SerialOptions = null; } public static StepMetadata Metadata { get; } = new() @@ -138,7 +135,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new HrOnly("SerialNumbers"), new FieldChild("Field") { Optional = true, HrLabel = "Field" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ResetAccountPasswordStep.cs b/src/SharpFM.Model/Scripting/Steps/ResetAccountPasswordStep.cs index a33fc4ef..5741f17f 100644 --- a/src/SharpFM.Model/Scripting/Steps/ResetAccountPasswordStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ResetAccountPasswordStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class ResetAccountPasswordStep : ScriptStep, IStepFactory +public sealed class ResetAccountPasswordStep : ScriptStep, IStepFactory { public const int XmlId = 136; public const string XmlName = "Reset Account Password"; @@ -35,16 +33,6 @@ public ResetAccountPasswordStep( ExpirePassword = expirePassword; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -61,7 +49,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => // when "False" (the POCO default matches the absent-element fallback). new EnumValueChild("ChgPwdOnNextLogin") { PocoProperty = "ExpirePasswordValue", HrLabel = "Expire password", ValidValues = ["True", "False"], DisplayValues = ["On", "Off"], Display = DisplayMode.Augmented }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RevertRecordRequestStep.cs b/src/SharpFM.Model/Scripting/Steps/RevertRecordRequestStep.cs index 1b407a8a..ab6dc7eb 100644 --- a/src/SharpFM.Model/Scripting/Steps/RevertRecordRequestStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RevertRecordRequestStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <NoInteract state="True|False"/> child. All round-tripped. /// -public sealed class RevertRecordRequestStep : ScriptStep, IStepFactory +public sealed class RevertRecordRequestStep : ScriptStep, IStepFactory { public const int XmlId = 51; public const string XmlName = "Revert Record/Request"; @@ -30,16 +28,6 @@ public RevertRecordRequestStep(bool withdialog = true, bool enabled = true) WithDialog = withdialog; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -51,7 +39,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("NoInteract") { PocoProperty = "NoInteractState", HrLabel = "With dialog", Display = DisplayMode.Augmented, DisplayInverted = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/RevertTransactionStep.cs b/src/SharpFM.Model/Scripting/Steps/RevertTransactionStep.cs index 398f8f23..548db6f4 100644 --- a/src/SharpFM.Model/Scripting/Steps/RevertTransactionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/RevertTransactionStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class RevertTransactionStep : ScriptStep, IStepFactory +public sealed class RevertTransactionStep : ScriptStep, IStepFactory { public const int XmlId = 207; public const string XmlName = "Revert Transaction"; @@ -35,16 +33,6 @@ public RevertTransactionStep( ErrorMessage = errorMessage; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -60,7 +48,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("ErrorCode") { PocoProperty = "ErrorCode", HrLabel = "Error Code", Optional = true, Display = DisplayMode.Augmented, DisplayEmptyAs = "" }, new NamedCalcChild("ErrorMessage") { PocoProperty = "ErrorMessage", HrLabel = "Error Message", Optional = true, Display = DisplayMode.Augmented, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SaveACopyAsAddOnPackageStep.cs b/src/SharpFM.Model/Scripting/Steps/SaveACopyAsAddOnPackageStep.cs index d0030bc0..d26f1446 100644 --- a/src/SharpFM.Model/Scripting/Steps/SaveACopyAsAddOnPackageStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SaveACopyAsAddOnPackageStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SaveACopyAsAddOnPackageStep : ScriptStep, IStepFactory +public sealed class SaveACopyAsAddOnPackageStep : ScriptStep, IStepFactory { public const int XmlId = 96; public const string XmlName = "Save a Copy as Add-on Package"; @@ -29,16 +27,6 @@ public SaveACopyAsAddOnPackageStep( WindowName = windowName ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("LinkAvail") { PocoProperty = "ReplaceUUIDs", HrLabel = "Replace UUIDs", Display = DisplayMode.Native }, new BareCalcChild { PocoProperty = "WindowName", HrLabel = "Window name", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SaveACopyAsStep.cs b/src/SharpFM.Model/Scripting/Steps/SaveACopyAsStep.cs index 20c46c37..e6725e9b 100644 --- a/src/SharpFM.Model/Scripting/Steps/SaveACopyAsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SaveACopyAsStep.cs @@ -1,14 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; -public sealed class SaveACopyAsStep : ScriptStep, IStepFactory +public sealed class SaveACopyAsStep : ScriptStep, IStepFactory { public const int XmlId = 37; public const string XmlName = "Save a Copy as"; @@ -37,16 +35,6 @@ public SaveACopyAsStep( OutputPath = outputPath; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -65,7 +53,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new EnumValueChild("SaveAsType") { PocoProperty = "CopyType", HrLabel = "Copy type", DefaultValue = "Copy", ValidValues = ["Copy", "CompactedCopy", "Clone", "SelfContainedCopy"], DisplayValues = ["copy of current file", "compacted copy (smaller)", "clone (no records)", "self-contained copy (single file)"], Display = DisplayMode.Native }, new NamedTextChild("UniversalPathList") { PocoProperty = "OutputPath", HrLabel = "Output path", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SaveACopyAsXMLStep.cs b/src/SharpFM.Model/Scripting/Steps/SaveACopyAsXMLStep.cs index 4fa15693..721d665b 100644 --- a/src/SharpFM.Model/Scripting/Steps/SaveACopyAsXMLStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SaveACopyAsXMLStep.cs @@ -1,8 +1,6 @@ using System; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -18,7 +16,7 @@ namespace SharpFM.Model.Scripting.Steps; /// The FM 26 flags are nullable so an absent flag stays distinct from "present /// and False". /// -public sealed class SaveACopyAsXMLStep : ScriptStep, IStepFactory +public sealed class SaveACopyAsXMLStep : ScriptStep, IStepFactory { public const int XmlId = 3; public const string XmlName = "Save a Copy as XML"; @@ -52,16 +50,6 @@ public SaveACopyAsXMLStep( JsonOptions = jsonOptions; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -83,7 +71,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => ]), ]) { PocoProperty = "JsonOptions", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsExcelStep.cs b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsExcelStep.cs index 3a470fa9..03bd43f4 100644 --- a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsExcelStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsExcelStep.cs @@ -2,7 +2,6 @@ using System.Linq; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +13,7 @@ namespace SharpFM.Model.Scripting.Steps; /// doc-metadata calcs (WorkSheet, Title, Subject, Author) wrap /// Calculation children and are optional. /// -public sealed class SaveRecordsAsExcelStep : ScriptStep, IStepFactory +public sealed class SaveRecordsAsExcelStep : ScriptStep, IStepFactory { public const int XmlId = 143; public const string XmlName = "Save Records as Excel"; @@ -102,15 +101,10 @@ public SaveRecordsAsExcelStep( UseFieldNames = useFieldNames; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the display line hides the option flags and shows only the dialog toggle and conditional file token — sealed state the shape renderer would surface. public override string ToDisplayLine() => $"Save Records as Excel [ With dialog: {(WithDialog ? "On" : "Off")} ; {Path} ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when state the display line cannot /// carry is present: restore/auto-open/email/directory flags off their @@ -124,7 +118,7 @@ public override string ToDisplayLine() => && WorkSheet is null && Title is null && Subject is null && Author is null && SaveType == "BrowsedRecords" && !UseFieldNames; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Display grammar: [ With dialog: On/Off ; path ]. Everything else // takes its canonical unconfigured value. @@ -138,7 +132,22 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (!string.IsNullOrWhiteSpace(t)) path = t; } - return new SaveRecordsAsExcelStep(withDialog, restoreStoredOptions: false, path: path, enabled: enabled); + WithDialog = withDialog; + CreateDirectories = true; + RestoreStoredOptions = false; + AutoOpen = false; + CreateEmail = false; + FieldDelimiter = "\t"; + IsPredefined = "-1"; + FieldNameRow = "-1"; + DataType = "XLXE"; + Path = path; + WorkSheet = null; + Title = null; + Subject = null; + Author = null; + SaveType = "BrowsedRecords"; + UseFieldNames = false; } public static StepMetadata Metadata { get; } = new() @@ -167,7 +176,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new EnumValueChild("SaveType") { ValidValues = ["BrowsedRecords", "CurrentRecord"], DefaultValue = "BrowsedRecords" }, new BoolStateChild("UseFieldNames"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsJsonlStep.cs b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsJsonlStep.cs index bc030670..9df3acce 100644 --- a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsJsonlStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsJsonlStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -14,7 +12,7 @@ namespace SharpFM.Model.Scripting.Steps; /// /// We preserve whichever children are present. /// -public sealed class SaveRecordsAsJsonlStep : ScriptStep, IStepFactory +public sealed class SaveRecordsAsJsonlStep : ScriptStep, IStepFactory { public const int XmlId = 225; public const string XmlName = "Save Records as JSONL"; @@ -57,15 +55,10 @@ public SaveRecordsAsJsonlStep( Table = table; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the display line shows only the conditional file and format tokens, hiding the option flags the shape renderer would surface. public override string ToDisplayLine() => $"Save Records as JSONL [ {Path} ; Format: {(FineTuneFormat ? "Fine-Tune" : "Completion")} ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when state the display line cannot /// carry is present: prompt calcs, completion/source fields, a table @@ -77,7 +70,7 @@ public override string ToDisplayLine() => && SystemPrompt is null && UserPrompt is null && AssistantPrompt is null && CompletionField is null && SourceField is null && Table is null; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Display grammar: [ path ; Format: Fine-Tune/Completion ]. string path = ""; @@ -90,7 +83,18 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (!string.IsNullOrWhiteSpace(t)) path = t; } - return new SaveRecordsAsJsonlStep(fineTuneFormat: fineTuneFormat, path: path, enabled: enabled); + OptionEnableTable = false; + CreateDirectories = false; + FineTuneFormat = fineTuneFormat; + AutoOpen = false; + CreateEmail = false; + Path = path; + SystemPrompt = null; + UserPrompt = null; + AssistantPrompt = null; + CompletionField = null; + SourceField = null; + Table = null; } public static StepMetadata Metadata { get; } = new() @@ -124,7 +128,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new HrOnly("SaveAsJSONL"), new NamedRefChild("Table") { PocoProperty = "Table", Optional = true, Display = DisplayMode.Hidden }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsPdfStep.cs b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsPdfStep.cs index 751de67a..decb0d27 100644 --- a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsPdfStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsPdfStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SaveRecordsAsPdfStep : ScriptStep, IStepFactory +public sealed class SaveRecordsAsPdfStep : ScriptStep, IStepFactory { public const int XmlId = 144; public const string XmlName = "Save Records as PDF"; @@ -50,8 +48,6 @@ public SaveRecordsAsPdfStep( Options = options; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: conditional file and Append tokens plus hidden option flags are grammar the shape renderer cannot express. public override string ToDisplayLine() { @@ -66,9 +62,6 @@ public override string ToDisplayLine() return $"Save Records as PDF [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// The canonical PDFOptions block FileMaker writes for an unconfigured /// step: all-pages document numbered from 1 with a 1–1 page range, and @@ -92,7 +85,7 @@ public override string ToDisplayLine() !RestoreStoredOptions && StoredLabel is null && CreateDirectories && DefaultOptions().Equals(Options); - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool withDialog = false, append = false, autoOpen = false, createEmail = false; string path = ""; @@ -107,7 +100,15 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (t.Equals("Create email", System.StringComparison.OrdinalIgnoreCase)) createEmail = true; else if (!pathSeen && !string.IsNullOrWhiteSpace(t)) { path = t; pathSeen = true; } } - return new SaveRecordsAsPdfStep(withDialog, append, true, false, autoOpen, createEmail, path, null, DefaultOptions(), enabled); + WithDialog = withDialog; + Append = append; + CreateDirectories = true; + RestoreStoredOptions = false; + AutoOpen = autoOpen; + CreateEmail = createEmail; + Path = path; + StoredLabel = null; + Options = DefaultOptions(); } public static StepMetadata Metadata { get; } = new() @@ -130,7 +131,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BareCalcChild { PocoProperty = "StoredLabel", Optional = true }, new ValueTypeChild("PDFOptions") { PocoProperty = "Options", Optional = true, Display = DisplayMode.Hidden }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsSnapshotLinkStep.cs b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsSnapshotLinkStep.cs index 08325f07..ca671444 100644 --- a/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsSnapshotLinkStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SaveRecordsAsSnapshotLinkStep.cs @@ -1,14 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; -public sealed class SaveRecordsAsSnapshotLinkStep : ScriptStep, IStepFactory +public sealed class SaveRecordsAsSnapshotLinkStep : ScriptStep, IStepFactory { public const int XmlId = 152; public const string XmlName = "Save Records as Snapshot Link"; @@ -34,16 +32,6 @@ public SaveRecordsAsSnapshotLinkStep( OutputPath = outputPath; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -59,7 +47,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new EnumValueChild("SaveType") { PocoProperty = "Records", HrLabel = "Records", DefaultValue = "BrowsedRecords", ValidValues = ["BrowsedRecords", "CurrentRecord"], DisplayValues = ["Records being browsed", "Current record"], Display = DisplayMode.Native }, new NamedTextChild("UniversalPathList") { PocoProperty = "OutputPath", HrLabel = "Output path", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ScrollWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/ScrollWindowStep.cs index 0ce67c86..bfd437ec 100644 --- a/src/SharpFM.Model/Scripting/Steps/ScrollWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ScrollWindowStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class ScrollWindowStep : ScriptStep, IStepFactory +public sealed class ScrollWindowStep : ScriptStep, IStepFactory { public const int XmlId = 81; public const string XmlName = "Scroll Window"; @@ -29,16 +27,6 @@ public ScrollWindowStep(string direction = "Home", bool enabled = true) Direction = direction; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -58,7 +46,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => Display = DisplayMode.Native, }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SelectAllStep.cs b/src/SharpFM.Model/Scripting/Steps/SelectAllStep.cs index bf114522..03d097af 100644 --- a/src/SharpFM.Model/Scripting/Steps/SelectAllStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SelectAllStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class SelectAllStep : ScriptStep, IStepFactory +public sealed class SelectAllStep : ScriptStep, IStepFactory { public const int XmlId = 50; public const string XmlName = "Select All"; @@ -18,23 +16,11 @@ private SelectAllStep() : base(false) { } public SelectAllStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "editing", HelpUrl = "https://help.claris.com/en/pro-help/content/select-all.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SelectDictionariesStep.cs b/src/SharpFM.Model/Scripting/Steps/SelectDictionariesStep.cs index e8051b41..3165fb7c 100644 --- a/src/SharpFM.Model/Scripting/Steps/SelectDictionariesStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SelectDictionariesStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class SelectDictionariesStep : ScriptStep, IStepFactory +public sealed class SelectDictionariesStep : ScriptStep, IStepFactory { public const int XmlId = 108; public const string XmlName = "Select Dictionaries"; @@ -18,23 +16,11 @@ private SelectDictionariesStep() : base(false) { } public SelectDictionariesStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "spelling", HelpUrl = "https://help.claris.com/en/pro-help/content/select-dictionaries.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SelectWindowStep.cs b/src/SharpFM.Model/Scripting/Steps/SelectWindowStep.cs index 8e53c8d0..48313035 100644 --- a/src/SharpFM.Model/Scripting/Steps/SelectWindowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SelectWindowStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SelectWindowStep : ScriptStep, IStepFactory +public sealed class SelectWindowStep : ScriptStep, IStepFactory { public const int XmlId = 123; public const string XmlName = "Select Window"; @@ -32,16 +30,6 @@ public SelectWindowStep( Name = name ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -56,7 +44,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new EnumValueChild("Window") { PocoProperty = "Window", HrLabel = "Window", DefaultValue = "ByName", ValidValues = ["ByName", "Current"], DisplayValues = ["Name: ", "Current Window"], Display = DisplayMode.Native }, new NamedCalcChild("Name") { PocoProperty = "Name", HrLabel = "Name", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SendDDEExecuteStep.cs b/src/SharpFM.Model/Scripting/Steps/SendDDEExecuteStep.cs index 9359cc96..d1083702 100644 --- a/src/SharpFM.Model/Scripting/Steps/SendDDEExecuteStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SendDDEExecuteStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class SendDDEExecuteStep : ScriptStep, IStepFactory +public sealed class SendDDEExecuteStep : ScriptStep, IStepFactory { public const int XmlId = 64; public const string XmlName = "Send DDE Execute"; @@ -32,16 +30,6 @@ public SendDDEExecuteStep(string contentType = "File", bool enabled = true) ContentType = contentType; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("ContentType") { PocoProperty = "ContentType", DefaultValue = "File", ValidValues = ["File"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SendEventStep.cs b/src/SharpFM.Model/Scripting/Steps/SendEventStep.cs index 20a3bd0f..e70ace22 100644 --- a/src/SharpFM.Model/Scripting/Steps/SendEventStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SendEventStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -16,7 +14,7 @@ namespace SharpFM.Model.Scripting.Steps; /// Calculation — the script text is computed from <Calculation>. /// /// -public sealed class SendEventStep : ScriptStep, IStepFactory +public sealed class SendEventStep : ScriptStep, IStepFactory { public const int XmlId = 57; public const string XmlName = "Send Event"; @@ -51,8 +49,6 @@ public SendEventStep( Event = evt ?? SendEventTarget.Default(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: fixed empty-slot tokens plus the synthetic placeholder — grammar the shape renderer cannot express. public override string ToDisplayLine() { @@ -66,10 +62,7 @@ public override string ToDisplayLine() return $"Send Event [ {Event.TargetName} ; {Event.Class} ; {Event.Id} ; {content} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { // Display shape is positional: [ targetName ; class ; id ; content ]. // The event's behaviour flags and target type are not displayable — @@ -99,7 +92,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) contentType = "Text"; var evt = new SendEventTarget(false, false, false, "", targetName, id, cls); - return new SendEventStep(contentType, calculation, text, evt, enabled); + ContentType = contentType; + Calculation = calculation; + Text = text; + Event = evt; } public static StepMetadata Metadata { get; } = new() @@ -118,7 +114,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new ValueTypeChild("Event") { PocoProperty = "Event", Display = DisplayMode.Hidden }, new HrOnly("Event"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SendMailStep.cs b/src/SharpFM.Model/Scripting/Steps/SendMailStep.cs index 1b49271e..8795103b 100644 --- a/src/SharpFM.Model/Scripting/Steps/SendMailStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SendMailStep.cs @@ -3,7 +3,6 @@ using System.Linq; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -25,7 +24,7 @@ namespace SharpFM.Model.Scripting.Steps; /// setting a new calc. /// /// -public sealed class SendMailStep : ScriptStep, IStepFactory +public sealed class SendMailStep : ScriptStep, IStepFactory { public const int XmlId = 63; public const string XmlName = "Send Mail"; @@ -62,8 +61,6 @@ public SendMailStep(bool withDialog = true, StepChildBag? children = null, bool Children = children ?? new StepChildBag(); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the To/Subject annotations are conditional tokens read // from the passthrough child bag, which the shape renderer cannot surface. public override string ToDisplayLine() @@ -75,12 +72,6 @@ public override string ToDisplayLine() return $"Send Mail [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - // --- Hot-field accessors (read through the bag) --- public Calculation? To => ReadCalcChild("To"); @@ -114,7 +105,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new HrOnly("Subject") { HrLabel = "Subject" }, new HrOnly("Message") { HrLabel = "Message" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetAICallLoggingStep.cs b/src/SharpFM.Model/Scripting/Steps/SetAICallLoggingStep.cs index 29584f25..49bb9e14 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetAICallLoggingStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetAICallLoggingStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <LLMDebugLog> parent element. Each flag is a /// "flagElement" — presence = On, absence = Off. /// -public sealed class SetAICallLoggingStep : ScriptStep, IStepFactory +public sealed class SetAICallLoggingStep : ScriptStep, IStepFactory { public const int XmlId = 217; public const string XmlName = "Set AI Call Logging"; @@ -39,8 +37,6 @@ public SetAICallLoggingStep( TruncateMessages = truncateMessages; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: Verbose/Truncate are wire flag elements (presence = On) // but display as always-present "Label: On/Off" tokens — a form the shape // renderer's bare-label FlagChild convention cannot express. @@ -53,10 +49,7 @@ public override string ToDisplayLine() return $"Set AI Call Logging [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool logging = false; Calculation? fileName = null; @@ -78,7 +71,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) loggingSeen = true; } } - return new SetAICallLoggingStep(logging, fileName, verbose, truncate, enabled); + Logging = logging; + FileName = fileName; + Verbose = verbose; + TruncateMessages = truncate; } public static StepMetadata Metadata { get; } = new() @@ -98,7 +94,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new FlagChild("TruncateEmbeddingVectorsMode") { PocoProperty = "TruncateMessages", HrLabel = "Truncate Messages" }, ]), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetDataFilePositionStep.cs b/src/SharpFM.Model/Scripting/Steps/SetDataFilePositionStep.cs index cb42ed0d..a7ec12ec 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetDataFilePositionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetDataFilePositionStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetDataFilePositionStep : ScriptStep, IStepFactory +public sealed class SetDataFilePositionStep : ScriptStep, IStepFactory { public const int XmlId = 195; public const string XmlName = "Set Data File Position"; @@ -29,16 +27,6 @@ public SetDataFilePositionStep( NewPosition = newPosition; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BareCalcChild { PocoProperty = "FileID", HrLabel = "File ID", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new NamedCalcChild("position") { PocoProperty = "NewPosition", HrLabel = "New position", Optional = true, Display = DisplayMode.Augmented, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetDictionaryStep.cs b/src/SharpFM.Model/Scripting/Steps/SetDictionaryStep.cs index 2bb28a12..5e082b1e 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetDictionaryStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetDictionaryStep.cs @@ -1,14 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetDictionaryStep : ScriptStep, IStepFactory +public sealed class SetDictionaryStep : ScriptStep, IStepFactory { public const int XmlId = 209; public const string XmlName = "Set Dictionary"; @@ -28,16 +26,6 @@ public SetDictionaryStep( UserDictionary = userDictionary; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -50,7 +38,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new EnumValueChild("MainDictionary") { PocoProperty = "SpellingLanguage", HrLabel = "Spelling Language", DefaultValue = "US English" }, new NamedTextChild("UniversalPathList") { PocoProperty = "UserDictionary", HrLabel = "User Dictionary", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetErrorCaptureStep.cs b/src/SharpFM.Model/Scripting/Steps/SetErrorCaptureStep.cs index c545114f..f6127ba1 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetErrorCaptureStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetErrorCaptureStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -16,7 +14,7 @@ namespace SharpFM.Model.Scripting.Steps; /// Set Error Capture [ On|Off ]; our display mirrors that. No /// advanced-syntax extensions are required. /// -public sealed class SetErrorCaptureStep : ScriptStep, IStepFactory +public sealed class SetErrorCaptureStep : ScriptStep, IStepFactory { public const int XmlId = 86; public const string XmlName = "Set Error Capture"; @@ -35,16 +33,6 @@ public SetErrorCaptureStep(bool captureErrors = false, bool enabled = true) CaptureErrors = captureErrors; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -62,7 +50,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => + "dialog boxes. \"False\" (Off) reenables the alert messages.", }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetErrorLoggingStep.cs b/src/SharpFM.Model/Scripting/Steps/SetErrorLoggingStep.cs index 90b850d6..8104c13a 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetErrorLoggingStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetErrorLoggingStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetErrorLoggingStep : ScriptStep, IStepFactory +public sealed class SetErrorLoggingStep : ScriptStep, IStepFactory { public const int XmlId = 200; public const string XmlName = "Set Error Logging"; @@ -29,16 +27,6 @@ public SetErrorLoggingStep( CustomDebugInfo = customDebugInfo ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Option") { PocoProperty = "Logging", HrLabel = "Logging", Display = DisplayMode.Native }, new BareCalcChild { PocoProperty = "CustomDebugInfo", HrLabel = "Custom debug info", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetFieldByNameStep.cs b/src/SharpFM.Model/Scripting/Steps/SetFieldByNameStep.cs index b1304b5e..093fc016 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetFieldByNameStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetFieldByNameStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetFieldByNameStep : ScriptStep, IStepFactory +public sealed class SetFieldByNameStep : ScriptStep, IStepFactory { public const int XmlId = 147; public const string XmlName = "Set Field By Name"; @@ -29,16 +27,6 @@ public SetFieldByNameStep( CalculatedResult = calculatedResult ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -51,7 +39,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("TargetName") { PocoProperty = "TargetFieldName", HrLabel = "Target field name", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new NamedCalcChild("Result") { PocoProperty = "CalculatedResult", HrLabel = "Calculated result", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetFieldStep.cs b/src/SharpFM.Model/Scripting/Steps/SetFieldStep.cs index db9a4868..75405ada 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetFieldStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetFieldStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// display as [ Field ; Calculation ]; this step honors both. An /// unconfigured Set Field carries neither child, so both are Optional. /// -public sealed class SetFieldStep : ScriptStep, IStepFactory +public sealed class SetFieldStep : ScriptStep, IStepFactory { public const int XmlId = 76; public const string XmlName = "Set Field"; @@ -29,16 +27,11 @@ public SetFieldStep(bool enabled, FieldRef? target, Calculation? expression) Expression = expression; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the display shows bare field-then-calculation tokens, the reverse of the canonical XML order; bare tokens cannot be reordered via Native/Augmented. public override string ToDisplayLine() => $"Set Field [ {Target?.ToDisplayString() ?? ""} ; {Expression?.Text ?? ""} ]"; - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { FieldRef? target = null; Calculation? expression = null; @@ -49,7 +42,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) if (hrParams.Length >= 2 && hrParams[1].Trim().Length > 0) expression = new Calculation(hrParams[1].Trim()); - return new SetFieldStep(enabled, target, expression); + Target = target; + Expression = expression; } public static StepMetadata Metadata { get; } = new() @@ -65,7 +59,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BareCalcChild { PocoProperty = "Expression", Optional = true }, new FieldChild("Field") { PocoProperty = "Target", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetLayoutObjectAnimationStep.cs b/src/SharpFM.Model/Scripting/Steps/SetLayoutObjectAnimationStep.cs index eac1ff09..d34f63fd 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetLayoutObjectAnimationStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetLayoutObjectAnimationStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <Set state="True|False"/> child. All round-tripped. /// -public sealed class SetLayoutObjectAnimationStep : ScriptStep, IStepFactory +public sealed class SetLayoutObjectAnimationStep : ScriptStep, IStepFactory { public const int XmlId = 168; public const string XmlName = "Set Layout Object Animation"; @@ -27,16 +25,6 @@ public SetLayoutObjectAnimationStep(bool animation = true, bool enabled = true) Animation = animation; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -47,7 +35,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("Set") { PocoProperty = "Animation", HrLabel = "Animation" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetMultiUserStep.cs b/src/SharpFM.Model/Scripting/Steps/SetMultiUserStep.cs index da9e1bb1..7d7c7af1 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetMultiUserStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetMultiUserStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class SetMultiUserStep : ScriptStep, IStepFactory +public sealed class SetMultiUserStep : ScriptStep, IStepFactory { public const int XmlId = 84; public const string XmlName = "Set Multi-User"; @@ -32,16 +30,6 @@ public SetMultiUserStep(string networkAccess = "True", bool enabled = true) NetworkAccess = networkAccess; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("MultiUser") { PocoProperty = "NetworkAccess", HrLabel = "Network access", DefaultValue = "True", ValidValues = ["True", "OnHidden", "False"], DisplayValues = ["On", "On (Hidden)", "Off"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetNextSerialValueStep.cs b/src/SharpFM.Model/Scripting/Steps/SetNextSerialValueStep.cs index 57aa7ef4..c7bcbe06 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetNextSerialValueStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetNextSerialValueStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetNextSerialValueStep : ScriptStep, IStepFactory +public sealed class SetNextSerialValueStep : ScriptStep, IStepFactory { public const int XmlId = 116; public const string XmlName = "Set Next Serial Value"; @@ -25,16 +23,6 @@ public SetNextSerialValueStep(FieldRef? field = null, Calculation? nextValue = n NextValue = nextValue ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -48,7 +36,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new FieldChild("Field") { PocoProperty = "Field", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new BareCalcChild { PocoProperty = "NextValue", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetRevertTransactionOnErrorStep.cs b/src/SharpFM.Model/Scripting/Steps/SetRevertTransactionOnErrorStep.cs index d9668cb7..c8718fd6 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetRevertTransactionOnErrorStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetRevertTransactionOnErrorStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <Set state="True|False"/> child. All round-tripped. /// -public sealed class SetRevertTransactionOnErrorStep : ScriptStep, IStepFactory +public sealed class SetRevertTransactionOnErrorStep : ScriptStep, IStepFactory { public const int XmlId = 223; public const string XmlName = "Set Revert Transaction on Error"; @@ -27,16 +25,6 @@ public SetRevertTransactionOnErrorStep(bool revertonerror = false, bool enabled RevertOnError = revertonerror; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -47,7 +35,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("Set") { PocoProperty = "RevertOnError", HrLabel = "Revert on error" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetSelectionStep.cs b/src/SharpFM.Model/Scripting/Steps/SetSelectionStep.cs index 1d75ecbe..42b82d90 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetSelectionStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetSelectionStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// The two position calcs are wrapped in <StartPosition> and /// <EndPosition> elements containing a <Calculation>. /// -public sealed class SetSelectionStep : ScriptStep, IStepFactory +public sealed class SetSelectionStep : ScriptStep, IStepFactory { public const int XmlId = 130; public const string XmlName = "Set Selection"; @@ -31,16 +29,6 @@ public SetSelectionStep(FieldRef? field = null, Calculation? startPosition = nul EndPosition = endPosition ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -55,7 +43,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("StartPosition") { PocoProperty = "StartPosition", HrLabel = "Start Position", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new NamedCalcChild("EndPosition") { PocoProperty = "EndPosition", HrLabel = "End Position", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetSessionIdentifierStep.cs b/src/SharpFM.Model/Scripting/Steps/SetSessionIdentifierStep.cs index 6ea93141..d12c6753 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetSessionIdentifierStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetSessionIdentifierStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetSessionIdentifierStep : ScriptStep, IStepFactory +public sealed class SetSessionIdentifierStep : ScriptStep, IStepFactory { public const int XmlId = 208; public const string XmlName = "Set Session Identifier"; @@ -26,16 +24,6 @@ public SetSessionIdentifierStep( SessionIdentifier = sessionIdentifier; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -47,7 +35,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BareCalcChild { PocoProperty = "SessionIdentifier", HrLabel = "Session identifier", Optional = true, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetUseSystemFormatsStep.cs b/src/SharpFM.Model/Scripting/Steps/SetUseSystemFormatsStep.cs index ea6400bd..078833ef 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetUseSystemFormatsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetUseSystemFormatsStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,7 +9,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name) plus a single /// <Set state="True|False"/> child. All round-tripped. /// -public sealed class SetUseSystemFormatsStep : ScriptStep, IStepFactory +public sealed class SetUseSystemFormatsStep : ScriptStep, IStepFactory { public const int XmlId = 94; public const string XmlName = "Set Use System Formats"; @@ -27,16 +25,6 @@ public SetUseSystemFormatsStep(bool usesystemformats = true, bool enabled = true UseSystemFormats = usesystemformats; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -47,7 +35,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new BoolStateChild("Set") { PocoProperty = "UseSystemFormats", HrLabel = "Use system formats" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetVariableStep.cs b/src/SharpFM.Model/Scripting/Steps/SetVariableStep.cs index 3e44440e..5905821c 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetVariableStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetVariableStep.cs @@ -1,8 +1,6 @@ using System; using System.Text.RegularExpressions; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -15,7 +13,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Repetition> is a full Calculation (not an integer) and is /// always emitted in XML even when "1" — the round-trip invariant. /// -public sealed class SetVariableStep : ScriptStep, IStepFactory +public sealed class SetVariableStep : ScriptStep, IStepFactory { public const int XmlId = 141; public const string XmlName = "Set Variable"; @@ -34,11 +32,6 @@ public SetVariableStep(bool enabled, string name, Calculation value, Calculation Repetition = repetition ?? new Calculation("1"); } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the name and repetition merge into one [rep] token the shape renderer cannot express. public override string ToDisplayLine() { @@ -53,7 +46,7 @@ public override string ToDisplayLine() @"^(?\$+[^\[]+)\[(?.*)\]$", RegexOptions.Compiled); - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var name = ""; var value = new Calculation(""); @@ -82,7 +75,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) value = new Calculation(valueToken); } - return new SetVariableStep(enabled, name, value, repetition); + Name = name; + Value = value; + Repetition = repetition; } public static StepMetadata Metadata { get; } = new() @@ -101,10 +96,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("Repetition") { PocoProperty = "Repetition", Display = DisplayMode.Augmented, DefaultValue = "1" }, new NamedTextChild("Name") { PocoProperty = "Name", Required = true, Display = DisplayMode.Native }, ], - // Params is retained alongside Shape only to feed the not-yet-migrated - // legacy consumers (FmScript.SynthesizeHrParams, ScriptValidator). It is - // deleted at the end of phase 6 once those read Shape directly. - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetWebViewerStep.cs b/src/SharpFM.Model/Scripting/Steps/SetWebViewerStep.cs index 9c516dde..f2dee8da 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetWebViewerStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetWebViewerStep.cs @@ -3,13 +3,12 @@ using System.Linq; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetWebViewerStep : ScriptStep, IStepFactory +public sealed class SetWebViewerStep : ScriptStep, IStepFactory { public const int XmlId = 146; public const string XmlName = "Set Web Viewer"; @@ -70,18 +69,13 @@ public SetWebViewerStep( private static string ActionHr(string x) => _ActionToHr.TryGetValue(x, out var h) ? h : x; private static string ActionXml(string h) => _ActionFromHr.TryGetValue(h, out var x) ? x : h; - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written (render and parse): the URL token's wire form lives inside // the UrlWire passthrough slot, which the shape display engine cannot read // or bind. public override string ToDisplayLine() => "Set Web Viewer [ " + "Object Name: " + ObjectName.Text + " ; " + "Action: " + ActionHr(Action) + " ; " + "URL: " + URL.Text + " ]"; - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var tokens = hrParams.Select(h => h.Trim()).ToArray(); Calculation? objectName_v = null; @@ -90,7 +84,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) foreach (var tok in tokens) { if (tok.StartsWith("Action:", StringComparison.OrdinalIgnoreCase)) { var v = tok.Substring(7).Trim(); action_v = ActionXml(v); break; } } Calculation? uRL_v = null; foreach (var tok in tokens) { if (tok.StartsWith("URL:", StringComparison.OrdinalIgnoreCase)) { uRL_v = new Calculation(tok.Substring(4).Trim()); break; } } - return new SetWebViewerStep(objectName_v, action_v, uRL_v, enabled); + ObjectName = objectName_v ?? new Calculation(""); + Action = action_v; + URL = uRL_v ?? new Calculation(""); } public static StepMetadata Metadata { get; } = new() @@ -107,7 +103,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new Passthrough { PocoProperty = "UrlWire" }, new HrOnly("URL") { HrLabel = "URL" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetWindowTitleStep.cs b/src/SharpFM.Model/Scripting/Steps/SetWindowTitleStep.cs index 11b0e896..da4d5590 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetWindowTitleStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetWindowTitleStep.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SetWindowTitleStep : ScriptStep, IStepFactory +public sealed class SetWindowTitleStep : ScriptStep, IStepFactory { public const int XmlId = 124; public const string XmlName = "Set Window Title"; @@ -35,16 +33,6 @@ public SetWindowTitleStep( NewTitle = newTitle ?? new Calculation(""); } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -62,7 +50,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new NamedCalcChild("Name") { PocoProperty = "OfWindow", HrLabel = "Of Window", Optional = true, Display = DisplayMode.Native, DisplayEmptyAs = "" }, new NamedCalcChild("NewName") { PocoProperty = "NewTitle", HrLabel = "New Title", Optional = true, Display = DisplayMode.Augmented, DisplayEmptyAs = "" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SetZoomLevelStep.cs b/src/SharpFM.Model/Scripting/Steps/SetZoomLevelStep.cs index 0cebfc0e..f9b70279 100644 --- a/src/SharpFM.Model/Scripting/Steps/SetZoomLevelStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SetZoomLevelStep.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,10 +10,10 @@ namespace SharpFM.Model.Scripting.Steps; /// /// Zero-loss audit for SetZoomLevelStep: the step's XML state is the three /// <Step> attributes plus one child element per metadata param. -/// Display form uses labeled segments joined by ' ; '; FromDisplayParams -/// scans tokens by label so segment order is free. +/// Display form uses labeled segments joined by ' ; '; the shape-driven +/// display parser scans tokens by label so segment order is free. /// -public sealed class SetZoomLevelStep : ScriptStep, IStepFactory +public sealed class SetZoomLevelStep : ScriptStep, IStepFactory { public const int XmlId = 97; public const string XmlName = "Set Zoom Level"; @@ -45,16 +43,6 @@ public SetZoomLevelStep( ZoomCalculation = zoomCalculation; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -69,7 +57,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new EnumValueChild("Zoom") { PocoProperty = "ZoomLevel", HrLabel = "Zoom level", DefaultValue = "100", ValidValues = ["25", "50", "75", "100", "150", "200", "300", "400", "ZoomIn", "ZoomOut", "ByCalculation"], DisplayValues = ["25%", "50%", "75%", "100%", "150%", "200%", "300%", "400%", "Zoom In", "Zoom Out", "ByCalculation"], Display = DisplayMode.Native }, new BareCalcChild { PocoProperty = "ZoomCalculation", Optional = true, Display = DisplayMode.Hidden }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ShowAllRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/ShowAllRecordsStep.cs index 40fd38de..f0d71af9 100644 --- a/src/SharpFM.Model/Scripting/Steps/ShowAllRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ShowAllRecordsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class ShowAllRecordsStep : ScriptStep, IStepFactory +public sealed class ShowAllRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 23; public const string XmlName = "Show All Records"; @@ -18,23 +16,11 @@ private ShowAllRecordsStep() : base(false) { } public ShowAllRecordsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "found sets", HelpUrl = "https://help.claris.com/en/pro-help/content/show-all-records.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ShowCustomDialogStep.cs b/src/SharpFM.Model/Scripting/Steps/ShowCustomDialogStep.cs index 810c703f..9ad1d03b 100644 --- a/src/SharpFM.Model/Scripting/Steps/ShowCustomDialogStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ShowCustomDialogStep.cs @@ -5,7 +5,6 @@ using System.Text.RegularExpressions; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -27,7 +26,7 @@ namespace SharpFM.Model.Scripting.Steps; /// for hand-crafted fixtures that deviate from FM Pro's shape. /// /// -public sealed class ShowCustomDialogStep : ScriptStep, IStepFactory +public sealed class ShowCustomDialogStep : ScriptStep, IStepFactory { public const int XmlId = 87; public const string XmlName = "Show Custom Dialog"; @@ -96,11 +95,6 @@ public ShowCustomDialogStep( InputFields = inputFields; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: the buttons render as a nested quoted list with commit markers — grammar the shape renderer cannot express. public override string ToDisplayLine() { @@ -116,7 +110,7 @@ public override string ToDisplayLine() // Suppress the Buttons block when it exactly matches FM Pro's // default 3-slot shape (OK/commit + two empty/nocommit). This is // lossless because the default shape round-trips identically - // through FromDisplayParams's default construction below. + // through PopulateFromDisplay's default construction below. if (!IsDefaultButtonShape(Buttons)) parts.Add($"Buttons: [ {string.Join(" ; ", Buttons.Select(FormatButtonSlot))} ]"); @@ -166,7 +160,7 @@ private static string FormatInputSlot(ShowCustomDialogInputField input) return $"{labelText} {password} {target}"; } - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { var title = new Calculation(""); var message = new Calculation(""); @@ -200,7 +194,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) if (!buttonsSeen) buttons = DefaultButtons(); - return new ShowCustomDialogStep(enabled, title, message, buttons, inputs); + Title = title; + Message = message; + Buttons = buttons; + InputFields = inputs; } private static List ParseButtonBlock(string block) @@ -393,7 +390,5 @@ private static (string CalcText, string Keyword) SplitTrailingKeyword(string slo new HrOnly("Buttons"), new HrOnly("InputFields"), ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ShowHideMenubarStep.cs b/src/SharpFM.Model/Scripting/Steps/ShowHideMenubarStep.cs index dc02d3e0..1014303b 100644 --- a/src/SharpFM.Model/Scripting/Steps/ShowHideMenubarStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ShowHideMenubarStep.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,10 +9,10 @@ namespace SharpFM.Model.Scripting.Steps; /// /// Zero-loss audit for ShowHideMenubarStep: the step's XML state is the three /// <Step> attributes plus one child element per metadata param. -/// Display form uses labeled segments joined by ' ; '; FromDisplayParams -/// scans tokens by label so segment order is free. +/// Display form uses labeled segments joined by ' ; '; the shape-driven +/// display parser scans tokens by label so segment order is free. /// -public sealed class ShowHideMenubarStep : ScriptStep, IStepFactory +public sealed class ShowHideMenubarStep : ScriptStep, IStepFactory { public const int XmlId = 166; public const string XmlName = "Show/Hide Menubar"; @@ -37,16 +35,6 @@ public ShowHideMenubarStep( Action = action; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -58,7 +46,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Lock") { PocoProperty = "Lock", HrLabel = "Lock" }, new EnumValueChild("ShowHide") { PocoProperty = "Action", HrLabel = "Action", ValidValues = ["Show", "Hide", "Toggle"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ShowHideTextRulerStep.cs b/src/SharpFM.Model/Scripting/Steps/ShowHideTextRulerStep.cs index b76fbc0e..28787fcd 100644 --- a/src/SharpFM.Model/Scripting/Steps/ShowHideTextRulerStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ShowHideTextRulerStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class ShowHideTextRulerStep : ScriptStep, IStepFactory +public sealed class ShowHideTextRulerStep : ScriptStep, IStepFactory { public const int XmlId = 92; public const string XmlName = "Show/Hide Text Ruler"; @@ -32,16 +30,6 @@ public ShowHideTextRulerStep(string action = "Show", bool enabled = true) Action = action; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("ShowHide") { PocoProperty = "Action", HrLabel = "Action", DefaultValue = "Show", ValidValues = ["Show", "Hide", "Toggle"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ShowHideToolbarsStep.cs b/src/SharpFM.Model/Scripting/Steps/ShowHideToolbarsStep.cs index 1c48d1b7..0380a44b 100644 --- a/src/SharpFM.Model/Scripting/Steps/ShowHideToolbarsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ShowHideToolbarsStep.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -11,10 +9,10 @@ namespace SharpFM.Model.Scripting.Steps; /// /// Zero-loss audit for ShowHideToolbarsStep: the step's XML state is the three /// <Step> attributes plus one child element per metadata param. -/// Display form uses labeled segments joined by ' ; '; FromDisplayParams -/// scans tokens by label so segment order is free. +/// Display form uses labeled segments joined by ' ; '; the shape-driven +/// display parser scans tokens by label so segment order is free. /// -public sealed class ShowHideToolbarsStep : ScriptStep, IStepFactory +public sealed class ShowHideToolbarsStep : ScriptStep, IStepFactory { public const int XmlId = 29; public const string XmlName = "Show/Hide Toolbars"; @@ -40,16 +38,6 @@ public ShowHideToolbarsStep( Action = action; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -62,7 +50,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new BoolStateChild("Lock") { HrLabel = "Lock" }, new EnumValueChild("ShowHide") { PocoProperty = "Action", HrLabel = "Action", ValidValues = ["Show", "Hide", "Toggle"], DefaultValue = "Hide" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ShowOmittedOnlyStep.cs b/src/SharpFM.Model/Scripting/Steps/ShowOmittedOnlyStep.cs index 1338a35c..237c9787 100644 --- a/src/SharpFM.Model/Scripting/Steps/ShowOmittedOnlyStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ShowOmittedOnlyStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class ShowOmittedOnlyStep : ScriptStep, IStepFactory +public sealed class ShowOmittedOnlyStep : ScriptStep, IStepFactory { public const int XmlId = 27; public const string XmlName = "Show Omitted Only"; @@ -18,23 +16,11 @@ private ShowOmittedOnlyStep() : base(false) { } public ShowOmittedOnlyStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "found sets", HelpUrl = "https://help.claris.com/en/pro-help/content/show-omitted-only.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SortRecordsByFieldStep.cs b/src/SharpFM.Model/Scripting/Steps/SortRecordsByFieldStep.cs index 481a0dc6..c5ecf87a 100644 --- a/src/SharpFM.Model/Scripting/Steps/SortRecordsByFieldStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SortRecordsByFieldStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SortRecordsByFieldStep : ScriptStep, IStepFactory +public sealed class SortRecordsByFieldStep : ScriptStep, IStepFactory { public const int XmlId = 154; public const string XmlName = "Sort Records by Field"; @@ -27,16 +25,6 @@ public SortRecordsByFieldStep(string sortOrder = "SortAscending", FieldRef? fiel Field = field; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -48,7 +36,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new EnumValueChild("SortRecordsByField") { PocoProperty = "SortOrder", DefaultValue = "SortAscending", ValidValues = ["SortAscending", "SortDescending", "SortValueList"], DisplayValues = ["Ascending", "Descending", "Associated value list"] }, new FieldChild("Field") { PocoProperty = "Field", Optional = true }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SortRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/SortRecordsStep.cs index d203962a..5c4b822a 100644 --- a/src/SharpFM.Model/Scripting/Steps/SortRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SortRecordsStep.cs @@ -1,12 +1,10 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class SortRecordsStep : ScriptStep, IStepFactory +public sealed class SortRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 39; public const string XmlName = "Sort Records"; @@ -39,16 +37,6 @@ public SortRecordsStep( Sort = sort; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -64,7 +52,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => new HrOnly("Restore") { Boolean = true }, new ValueTypeChild("SortList") { PocoProperty = "Sort" }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SpeakStep.cs b/src/SharpFM.Model/Scripting/Steps/SpeakStep.cs index 65151942..12ac17e4 100644 --- a/src/SharpFM.Model/Scripting/Steps/SpeakStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SpeakStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -12,7 +10,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Calculation> followed by the <SpeechOptions> /// element; the text calc is omitted when the step is unconfigured. /// -public sealed class SpeakStep : ScriptStep, IStepFactory +public sealed class SpeakStep : ScriptStep, IStepFactory { public const int XmlId = 66; public const string XmlName = "Speak"; @@ -44,20 +42,14 @@ public SpeakStep(Calculation? text = null, SpeechOptions? options = null, bool e Options = options; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - // Hand-written: reconstructs the DefaultOptions SpeechOptions block the // wire form always carries, which the shape parser cannot synthesize. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { Calculation? text = null; if (hrParams.Length >= 1 && hrParams[0].Trim().Length > 0) text = new Calculation(hrParams[0].Trim()); - return new SpeakStep(text, DefaultOptions, enabled); + Text = text; + Options = DefaultOptions; } public static StepMetadata Metadata { get; } = new() @@ -82,7 +74,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Go = "Not supported.", }, }, - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/SpellingOptionsStep.cs b/src/SharpFM.Model/Scripting/Steps/SpellingOptionsStep.cs index 5915a71f..693a43e1 100644 --- a/src/SharpFM.Model/Scripting/Steps/SpellingOptionsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/SpellingOptionsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class SpellingOptionsStep : ScriptStep, IStepFactory +public sealed class SpellingOptionsStep : ScriptStep, IStepFactory { public const int XmlId = 107; public const string XmlName = "Spelling Options"; @@ -18,23 +16,11 @@ private SpellingOptionsStep() : base(false) { } public SpellingOptionsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "spelling", HelpUrl = "https://help.claris.com/en/pro-help/content/spelling-options.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/TriggerClarisConnectFlowStep.cs b/src/SharpFM.Model/Scripting/Steps/TriggerClarisConnectFlowStep.cs index 690ee14b..48cc303d 100644 --- a/src/SharpFM.Model/Scripting/Steps/TriggerClarisConnectFlowStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/TriggerClarisConnectFlowStep.cs @@ -1,7 +1,5 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -16,7 +14,7 @@ namespace SharpFM.Model.Scripting.Steps; /// The canonical step id is 211 (vendored FileMaker XML skill, control reference). /// /// -public sealed class TriggerClarisConnectFlowStep : ScriptStep, IStepFactory +public sealed class TriggerClarisConnectFlowStep : ScriptStep, IStepFactory { public const int XmlId = 211; public const string XmlName = "Trigger Claris Connect Flow"; @@ -64,13 +62,6 @@ public TriggerClarisConnectFlowStep( TargetVariable = targetVariable; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - /// /// Display edits are anchor-preserved when state the display line cannot /// carry is present: a target variable, or the encode/select/SSL flags @@ -82,7 +73,7 @@ public TriggerClarisConnectFlowStep( // Hand-written: reconstructs the unconfigured SelectAll=true wire default, // which the shape parser cannot synthesize for a display-hidden slot. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool withDialog = true; string flowUrl = ""; @@ -97,7 +88,13 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (t.StartsWith("cURL options:", StringComparison.OrdinalIgnoreCase)) curl = new Calculation(t.Substring(13).Trim()); } - return new TriggerClarisConnectFlowStep(withDialog, false, true, false, flowUrl, curl, "", enabled); + WithDialog = withDialog; + DontEncodeUrl = false; + SelectAll = true; + VerifySslCertificates = false; + FlowUrl = flowUrl; + CurlOptions = curl; + TargetVariable = ""; } public static StepMetadata Metadata { get; } = new() @@ -117,7 +114,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new NamedCalcChild("CURLOptions") { PocoProperty = "CurlOptions", Optional = true, HrLabel = "cURL options" }, new NamedTextChild("Text") { PocoProperty = "TargetVariable", HrLabel = "Target variable", Display = DisplayMode.Hidden }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/TruncateTableStep.cs b/src/SharpFM.Model/Scripting/Steps/TruncateTableStep.cs index 3ac541da..8226731e 100644 --- a/src/SharpFM.Model/Scripting/Steps/TruncateTableStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/TruncateTableStep.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; @@ -13,7 +12,7 @@ namespace SharpFM.Model.Scripting.Steps; /// named reference. The BaseTable can also have an optional comment /// attribute in FM Pro output which we preserve. /// -public sealed class TruncateTableStep : ScriptStep, IStepFactory +public sealed class TruncateTableStep : ScriptStep, IStepFactory { public const int XmlId = 182; public const string XmlName = "Truncate Table"; @@ -25,6 +24,12 @@ public sealed class TruncateTableStep : ScriptStep, IStepFactory /// <NoInteract> XML state — the inverse of . Bound by the shape. public bool NoInteract { get => !WithDialog; set => WithDialog = !value; } + private TruncateTableStep() : base(false) + { + WithDialog = true; + Table = new NamedRef(-1, ""); + } + public TruncateTableStep(bool withDialog = true, NamedRef? table = null, string? tableComment = null, bool enabled = true) : base(enabled) { @@ -33,6 +38,9 @@ public TruncateTableStep(bool withDialog = true, NamedRef? table = null, string? TableComment = tableComment; } + // Hand-written rather than StepXmlRenderer: preserves the optional + // BaseTable comment attribute (and its element position between id and + // name) that the shape engine does not model. public override XElement ToXml() { var baseTable = new XElement("BaseTable", @@ -49,21 +57,20 @@ public override XElement ToXml() baseTable); } - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) + protected internal override void PopulateFromXml(XElement step) { - var enabled = step.Attribute("enable")?.Value != "False"; var withDialog = step.Element("NoInteract")?.Attribute("state")?.Value != "True"; var tableEl = step.Element("BaseTable"); var table = tableEl is not null ? NamedRef.FromXml(tableEl) : new NamedRef(-1, ""); var comment = tableEl?.Attribute("comment")?.Value; - return new TruncateTableStep(withDialog, table, comment, enabled); + WithDialog = withDialog; + Table = table; + TableComment = comment; } // Hand-written: the current-table placeholder must keep its fixed id -1, // which the shape parser's uniform NamedRef(0, name) binding cannot express. - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { bool withDialog = true; NamedRef? table = null; @@ -82,7 +89,9 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) table = new NamedRef(name == "" ? -1 : 0, name); } } - return new TruncateTableStep(withDialog, table, null, enabled); + WithDialog = withDialog; + Table = table ?? new NamedRef(-1, ""); + TableComment = null; } public static StepMetadata Metadata { get; } = new() @@ -92,8 +101,8 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Category = "records", HelpUrl = "https://help.claris.com/en/pro-help/content/truncate-table.html", // Shape backs the HR/display metadata and canonical-order lint only; - // ToXml/FromXml stay hand-written so the optional BaseTable comment - // attribute is preserved, and the shape renderer/parser never runs. + // ToXml/PopulateFromXml stay hand-written so the optional BaseTable + // comment attribute is preserved, and the shape renderer/parser never runs. Shape = [ new BoolStateChild("NoInteract") { HrLabel = "With dialog", DisplayInverted = true }, @@ -104,7 +113,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) Behavioral = "Deletes all records in specified source table regardless of current found set. Cannot undo.", Gotchas = "Does NOT delete related records even if relationship is set up to do so.", }, - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/UndoRedoStep.cs b/src/SharpFM.Model/Scripting/Steps/UndoRedoStep.cs index 37eed75b..33f5c6ce 100644 --- a/src/SharpFM.Model/Scripting/Steps/UndoRedoStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/UndoRedoStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class UndoRedoStep : ScriptStep, IStepFactory +public sealed class UndoRedoStep : ScriptStep, IStepFactory { public const int XmlId = 45; public const string XmlName = "Undo/Redo"; @@ -32,16 +30,6 @@ public UndoRedoStep(string action = "Undo", bool enabled = true) Action = action; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("UndoRedo") { PocoProperty = "Action", HrLabel = "Action", DefaultValue = "Undo", ValidValues = ["Undo", "Redo", "Toggle"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/UnsortRecordsStep.cs b/src/SharpFM.Model/Scripting/Steps/UnsortRecordsStep.cs index a590da07..ac4608ce 100644 --- a/src/SharpFM.Model/Scripting/Steps/UnsortRecordsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/UnsortRecordsStep.cs @@ -1,6 +1,4 @@ -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Model.Scripting.Steps; @@ -9,7 +7,7 @@ namespace SharpFM.Model.Scripting.Steps; /// <Step> attributes (enable/id/name). All round-tripped exactly. /// No child elements in FM Pro's clipboard output; no hidden state. /// -public sealed class UnsortRecordsStep : ScriptStep, IStepFactory +public sealed class UnsortRecordsStep : ScriptStep, IStepFactory { public const int XmlId = 21; public const string XmlName = "Unsort Records"; @@ -18,23 +16,11 @@ private UnsortRecordsStep() : base(false) { } public UnsortRecordsStep(bool enabled = true) : base(enabled) { } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, Id = XmlId, Category = "found sets", HelpUrl = "https://help.claris.com/en/pro-help/content/unsort-records.html", - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/ViewAsStep.cs b/src/SharpFM.Model/Scripting/Steps/ViewAsStep.cs index ab3e5c9b..f53c5bf2 100644 --- a/src/SharpFM.Model/Scripting/Steps/ViewAsStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/ViewAsStep.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; namespace SharpFM.Model.Scripting.Steps; @@ -13,7 +11,7 @@ namespace SharpFM.Model.Scripting.Steps; /// enum child. XML values and human-readable display values are mapped /// through the static HR tables; round-trip preserves the XML value. /// -public sealed class ViewAsStep : ScriptStep, IStepFactory +public sealed class ViewAsStep : ScriptStep, IStepFactory { public const int XmlId = 30; public const string XmlName = "View As"; @@ -32,16 +30,6 @@ public ViewAsStep(string view = "Cycle", bool enabled = true) View = view; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - - public override string ToDisplayLine() => StepDisplayRenderer.Render(this, Metadata); - - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => - StepDisplayParser.Parse(enabled, hrParams, Metadata); - public static StepMetadata Metadata { get; } = new() { Name = XmlName, @@ -52,7 +40,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) => [ new EnumValueChild("View") { HrLabel = "View", DefaultValue = "Cycle", ValidValues = ["Cycle", "Form", "List", "Table"], DisplayValues = ["Cycle", "View as Form", "View as List", "View as Table"] }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } diff --git a/src/SharpFM.Model/Scripting/Steps/WriteToDataFileStep.cs b/src/SharpFM.Model/Scripting/Steps/WriteToDataFileStep.cs index 7e5e179c..d3226457 100644 --- a/src/SharpFM.Model/Scripting/Steps/WriteToDataFileStep.cs +++ b/src/SharpFM.Model/Scripting/Steps/WriteToDataFileStep.cs @@ -1,13 +1,11 @@ using System; -using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; -using SharpFM.Model.Scripting.Serialization; using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Values; namespace SharpFM.Model.Scripting.Steps; -public sealed class WriteToDataFileStep : ScriptStep, IStepFactory +public sealed class WriteToDataFileStep : ScriptStep, IStepFactory { public const int XmlId = 192; public const string XmlName = "Write to Data File"; @@ -33,8 +31,6 @@ public WriteToDataFileStep( AppendLineFeed = appendLineFeed; } - public override XElement ToXml() => StepXmlRenderer.Render(this, Metadata); - // Hand-written: Append line feed is a wire boolean displayed as a bare presence token, and the token order differs from shape order. public override string ToDisplayLine() { @@ -51,10 +47,7 @@ public override string ToDisplayLine() return $"Write to Data File [ {string.Join(" ; ", parts)} ]"; } - public static new ScriptStep FromXml(XElement step) => - StepXmlParser.Parse(step, Metadata); - - public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) + protected internal override void PopulateFromDisplay(string[] hrParams) { Calculation fileId = new(""); FieldRef? source = null; @@ -79,7 +72,10 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) else if (t.Equals("Append line feed", StringComparison.OrdinalIgnoreCase)) append = true; } - return new WriteToDataFileStep(fileId, source, type, append, enabled); + FileId = fileId; + DataSource = source; + DataSourceType = type; + AppendLineFeed = append; } public static StepMetadata Metadata { get; } = new() @@ -98,7 +94,5 @@ public static ScriptStep FromDisplayParams(bool enabled, string[] hrParams) new BareCalcChild { PocoProperty = "FileId", HrLabel = "File ID", Optional = true, Display = DisplayMode.Native }, new FieldChild("Field") { PocoProperty = "DataSource", HrLabel = "Data source", Optional = true, VariableTextMarker = true, Display = DisplayMode.Native }, ], - FromXml = FromXml, - FromDisplay = FromDisplayParams, }; } From ff9d7b94b3dddbe274708c928f05e8dd1850a3fc Mon Sep 17 00:00:00 2001 From: Nate Bross Date: Sun, 12 Jul 2026 13:38:10 -0500 Subject: [PATCH 4/5] test(scripting): adapt to typed Parse and virtual dispatch - Replace direct Metadata.FromXml!/FromDisplay! calls (unsafe now that they're gone from StepMetadata) with X.Parse(...) and StepDisplayFactory.TryCreate(...) - NoInteractSemanticTests goes through StepXmlFactory.Create instead of a per-metadata delegate lookup - Add trivial PopulateFromXml/PopulateFromDisplay stubs to the plain- ScriptStep test doubles in StepXmlParserTests/StepDisplayRendererTests/ StepXmlRendererTests, which exercise the shape engine directly and never go through virtual dispatch --- .../Serialization/StepDisplayRendererTests.cs | 4 ++++ .../Scripting/Serialization/StepXmlParserTests.cs | 14 ++++++++++++++ .../Serialization/StepXmlRendererTests.cs | 2 ++ .../Scripting/Steps/AVPlayerPlayStepTests.cs | 2 +- .../Scripting/Steps/AVPlayerSetOptionsStepTests.cs | 2 +- .../Steps/AVPlayerSetPlaybackStateStepTests.cs | 7 ++++--- .../Scripting/Steps/AddAccountStepTests.cs | 7 ++++--- .../Scripting/Steps/AdjustWindowStepTests.cs | 7 ++++--- .../Scripting/Steps/AllowFormattingBarStepTests.cs | 8 ++++---- .../Scripting/Steps/AllowUserAbortStepTests.cs | 8 ++++---- .../Scripting/Steps/AppendPdfStepTests.cs | 2 +- .../Scripting/Steps/ArrangeAllWindowsStepTests.cs | 7 ++++--- .../SharpFM.Tests/Scripting/Steps/BeepStepTests.cs | 4 ++-- .../Scripting/Steps/CancelPdfStepTests.cs | 2 +- .../Scripting/Steps/ChangePasswordStepTests.cs | 7 ++++--- .../Scripting/Steps/CheckFoundSetStepTests.cs | 4 ++-- .../Scripting/Steps/CheckRecordStepTests.cs | 4 ++-- .../Scripting/Steps/CheckSelectionStepTests.cs | 2 +- .../Scripting/Steps/ClearStepTests.cs | 2 +- .../Scripting/Steps/CloseDataFileStepTests.cs | 7 ++++--- .../Scripting/Steps/CloseFileStepTests.cs | 6 +++--- .../Scripting/Steps/ClosePdfStepTests.cs | 2 +- .../Scripting/Steps/ClosePopoverStepTests.cs | 4 ++-- .../Scripting/Steps/CloseWindowStepTests.cs | 2 +- .../Steps/CommitRecordsRequestsStepTests.cs | 11 ++++++----- .../Scripting/Steps/CommitTransactionStepTests.cs | 4 ++-- .../Scripting/Steps/ConfigureAIAccountStepTests.cs | 7 ++++--- .../Steps/ConfigureLocalNotificationStepTests.cs | 2 +- .../ConfigureMachineLearningModelStepTests.cs | 2 +- .../Steps/ConfigureNfcReadingStepTests.cs | 2 +- .../Steps/ConfigurePromptTemplateStepTests.cs | 2 +- .../Steps/ConfigureRAGAccountStepTests.cs | 7 ++++--- .../Steps/ConfigureRegionMonitorScriptStepTests.cs | 2 +- .../Steps/ConfigureRegressionModelStepTests.cs | 2 +- .../Scripting/Steps/ConstrainFoundSetStepTests.cs | 4 ++-- .../Scripting/Steps/ConvertFileStepTests.cs | 9 +++++---- .../Steps/CopyAllRecordsRequestsStepTests.cs | 4 ++-- .../Scripting/Steps/CopyRecordRequestStepTests.cs | 4 ++-- .../SharpFM.Tests/Scripting/Steps/CopyStepTests.cs | 2 +- .../Scripting/Steps/CorrectWordStepTests.cs | 4 ++-- .../Scripting/Steps/CreateDataFileStepTests.cs | 7 ++++--- .../Scripting/Steps/CreatePdfStepTests.cs | 2 +- .../SharpFM.Tests/Scripting/Steps/CutStepTests.cs | 2 +- .../Scripting/Steps/DeleteAccountStepTests.cs | 7 ++++--- .../Scripting/Steps/DeleteAllRecordsStepTests.cs | 8 ++++---- .../Scripting/Steps/DeleteFileStepTests.cs | 7 ++++--- .../Scripting/Steps/DeletePortalRowStepTests.cs | 8 ++++---- .../Steps/DeleteRecordRequestStepTests.cs | 8 ++++---- .../Scripting/Steps/DialPhoneStepTests.cs | 2 +- .../Steps/DuplicateRecordRequestStepTests.cs | 4 ++-- .../Scripting/Steps/EditUserDictionaryStepTests.cs | 4 ++-- .../Scripting/Steps/EnableAccountStepTests.cs | 7 ++++--- .../Steps/EnableTouchKeyboardStepTests.cs | 7 ++++--- .../Scripting/Steps/EnterBrowseModeStepTests.cs | 8 ++++---- .../Scripting/Steps/EnterFindModeStepTests.cs | 2 +- .../Scripting/Steps/EnterPreviewModeStepTests.cs | 8 ++++---- .../Steps/ExecuteFileMakerDataApiStepTests.cs | 2 +- .../Scripting/Steps/ExecuteSqlStepTests.cs | 2 +- .../Scripting/Steps/ExitApplicationStepTests.cs | 4 ++-- .../Scripting/Steps/ExitScriptStepTests.cs | 7 ++++--- .../Steps/ExportFieldContentsStepTests.cs | 2 +- .../Scripting/Steps/ExportRecordsStepTests.cs | 4 ++-- .../Scripting/Steps/ExtendFoundSetStepTests.cs | 2 +- .../Steps/FindMatchingRecordsStepTests.cs | 4 ++-- .../Scripting/Steps/FineTuneModelStepTests.cs | 2 +- .../Scripting/Steps/FlushCacheToDiskStepTests.cs | 4 ++-- .../Scripting/Steps/FreezeWindowStepTests.cs | 4 ++-- .../Steps/GenerateResponseFromModelStepTests.cs | 2 +- .../Steps/GetDataFilePositionStepTests.cs | 4 ++-- .../Scripting/Steps/GetFileExistsStepTests.cs | 4 ++-- .../Scripting/Steps/GetFileSizeStepTests.cs | 4 ++-- .../Scripting/Steps/GetFolderPathStepTests.cs | 2 +- .../Scripting/Steps/GoToFieldStepTests.cs | 2 +- .../Scripting/Steps/GoToListOfRecordsStepTests.cs | 2 +- .../Scripting/Steps/GoToNextFieldStepTests.cs | 4 ++-- .../Scripting/Steps/GoToObjectStepTests.cs | 7 ++++--- .../Scripting/Steps/GoToPortalRowStepTests.cs | 2 +- .../Scripting/Steps/GoToPreviousFieldStepTests.cs | 4 ++-- .../Scripting/Steps/GoToRelatedRecordStepTests.cs | 2 +- .../Scripting/Steps/HaltScriptStepTests.cs | 4 ++-- tests/SharpFM.Tests/Scripting/Steps/IfStepTests.cs | 4 ++-- .../Scripting/Steps/ImportRecordsStepTests.cs | 4 ++-- .../Scripting/Steps/InsertAudioVideoStepTests.cs | 9 +++++---- .../Steps/InsertCalculatedResultStepTests.cs | 4 ++-- .../Scripting/Steps/InsertCurrentDateStepTests.cs | 2 +- .../Scripting/Steps/InsertCurrentTimeStepTests.cs | 2 +- .../Steps/InsertCurrentUserNameStepTests.cs | 2 +- .../Steps/InsertEmbeddingInFoundSetStepTests.cs | 4 ++-- .../Scripting/Steps/InsertEmbeddingStepTests.cs | 2 +- .../Scripting/Steps/InsertFileStepTests.cs | 2 +- .../Scripting/Steps/InsertFromDeviceStepTests.cs | 2 +- .../Scripting/Steps/InsertFromIndexStepTests.cs | 2 +- .../Steps/InsertFromLastVisitedStepTests.cs | 2 +- .../Scripting/Steps/InsertFromUrlStepTests.cs | 10 +++++----- .../Scripting/Steps/InsertPdfStepTests.cs | 2 +- .../Scripting/Steps/InsertPictureStepTests.cs | 2 +- .../Scripting/Steps/InsertTextStepTests.cs | 4 ++-- .../Scripting/Steps/InstallMenuSetStepTests.cs | 4 ++-- .../Steps/InstallOnTimerScriptStepTests.cs | 4 ++-- .../Scripting/Steps/InstallPlugInFileStepTests.cs | 2 +- .../Scripting/Steps/ModifyLastFindStepTests.cs | 4 ++-- .../Scripting/Steps/MoveResizeWindowStepTests.cs | 7 ++++--- .../Scripting/Steps/NewFileStepTests.cs | 4 ++-- .../Scripting/Steps/NewRecordRequestStepTests.cs | 4 ++-- .../Scripting/Steps/NewWindowStepTests.cs | 2 +- .../Scripting/Steps/NoInteractSemanticTests.cs | 6 +++--- .../Steps/OmitMultipleRecordsStepTests.cs | 7 ++++--- .../Scripting/Steps/OmitRecordStepTests.cs | 4 ++-- .../Scripting/Steps/OpenDataFileStepTests.cs | 4 ++-- .../Scripting/Steps/OpenEditSavedFindsStepTests.cs | 4 ++-- .../Scripting/Steps/OpenFavoritesStepTests.cs | 4 ++-- .../Scripting/Steps/OpenFileOptionsStepTests.cs | 4 ++-- .../Scripting/Steps/OpenFileStepTests.cs | 6 +++--- .../Scripting/Steps/OpenFindReplaceStepTests.cs | 4 ++-- .../Scripting/Steps/OpenHelpStepTests.cs | 4 ++-- .../Scripting/Steps/OpenHostsStepTests.cs | 4 ++-- .../Steps/OpenManageContainersStepTests.cs | 4 ++-- .../Steps/OpenManageDataSourcesStepTests.cs | 4 ++-- .../Scripting/Steps/OpenManageDatabaseStepTests.cs | 4 ++-- .../Scripting/Steps/OpenManageLayoutsStepTests.cs | 4 ++-- .../Scripting/Steps/OpenManageThemesStepTests.cs | 4 ++-- .../Steps/OpenManageValueListsStepTests.cs | 4 ++-- .../Scripting/Steps/OpenPdfStepTests.cs | 2 +- .../Scripting/Steps/OpenRecordRequestStepTests.cs | 4 ++-- .../Steps/OpenScriptWorkspaceStepTests.cs | 4 ++-- .../Scripting/Steps/OpenSettingsStepTests.cs | 4 ++-- .../Scripting/Steps/OpenSharingStepTests.cs | 4 ++-- .../Scripting/Steps/OpenTransactionStepTests.cs | 9 +++++---- .../Scripting/Steps/OpenURLStepTests.cs | 7 ++++--- .../Scripting/Steps/OpenUploadToHostStepTests.cs | 4 ++-- .../Scripting/Steps/PasteStepTests.cs | 2 +- .../Scripting/Steps/PauseResumeScriptStepTests.cs | 2 +- .../Scripting/Steps/PerformAppleScriptStepTests.cs | 2 +- .../Steps/PerformFindByNaturalLanguageStepTests.cs | 2 +- .../Scripting/Steps/PerformFindReplaceStepTests.cs | 2 +- .../Scripting/Steps/PerformFindStepTests.cs | 4 ++-- .../Steps/PerformJavaScriptInWebViewerStepTests.cs | 4 ++-- .../Scripting/Steps/PerformQuickFindStepTests.cs | 7 ++++--- .../Scripting/Steps/PerformRagActionStepTests.cs | 2 +- .../Steps/PerformScriptOnServerStepTests.cs | 2 +- .../PerformScriptOnServerWithCallbackStepTests.cs | 2 +- .../Steps/PerformSemanticFindStepTests.cs | 2 +- .../PerformSqlQueryByNaturalLanguageStepTests.cs | 2 +- .../Scripting/Steps/PrintSetupStepTests.cs | 2 +- .../Scripting/Steps/PrintStepTests.cs | 2 +- .../Scripting/Steps/ReLoginStepTests.cs | 7 ++++--- .../Scripting/Steps/ReadFromDataFileStepTests.cs | 2 +- .../Scripting/Steps/RecoverFileStepTests.cs | 7 ++++--- .../Scripting/Steps/RefreshObjectStepTests.cs | 7 ++++--- .../Scripting/Steps/RefreshPortalStepTests.cs | 7 ++++--- .../Scripting/Steps/RefreshWindowStepTests.cs | 7 ++++--- .../Steps/RelookupFieldContentsStepTests.cs | 2 +- .../Scripting/Steps/RenameFileStepTests.cs | 7 ++++--- .../Steps/ReplaceFieldContentsStepTests.cs | 6 +++--- .../Steps/ResetAccountPasswordStepTests.cs | 7 ++++--- .../Steps/RevertRecordRequestStepTests.cs | 8 ++++---- .../Scripting/Steps/RevertTransactionStepTests.cs | 2 +- .../Steps/SaveACopyAsAddOnPackageStepTests.cs | 7 ++++--- .../Scripting/Steps/SaveACopyAsStepTests.cs | 7 ++++--- .../Scripting/Steps/SaveACopyAsXMLStepTests.cs | 7 ++++--- .../Scripting/Steps/SaveRecordsAsExcelStepTests.cs | 2 +- .../Scripting/Steps/SaveRecordsAsJsonlStepTests.cs | 2 +- .../Scripting/Steps/SaveRecordsAsPdfStepTests.cs | 2 +- .../Steps/SaveRecordsAsSnapshotLinkStepTests.cs | 7 ++++--- .../Scripting/Steps/ScrollWindowStepTests.cs | 7 ++++--- .../Scripting/Steps/SelectAllStepTests.cs | 4 ++-- .../Scripting/Steps/SelectDictionariesStepTests.cs | 4 ++-- .../Scripting/Steps/SelectWindowStepTests.cs | 7 ++++--- .../Scripting/Steps/SendDDEExecuteStepTests.cs | 7 ++++--- .../Scripting/Steps/SendEventStepTests.cs | 2 +- .../Scripting/Steps/SendMailStepTests.cs | 6 +++--- .../Scripting/Steps/SetAICallLoggingStepTests.cs | 8 ++++---- .../Steps/SetDataFilePositionStepTests.cs | 7 ++++--- .../Scripting/Steps/SetDictionaryStepTests.cs | 7 ++++--- .../Scripting/Steps/SetErrorCaptureStepTests.cs | 9 +++++---- .../Scripting/Steps/SetErrorLoggingStepTests.cs | 7 ++++--- .../Scripting/Steps/SetFieldByNameStepTests.cs | 7 ++++--- .../Steps/SetLayoutObjectAnimationStepTests.cs | 8 ++++---- .../Scripting/Steps/SetMultiUserStepTests.cs | 7 ++++--- .../Scripting/Steps/SetNextSerialValueStepTests.cs | 4 ++-- .../Steps/SetRevertTransactionOnErrorStepTests.cs | 8 ++++---- .../Scripting/Steps/SetSelectionStepTests.cs | 4 ++-- .../Steps/SetSessionIdentifierStepTests.cs | 7 ++++--- .../Steps/SetUseSystemFormatsStepTests.cs | 8 ++++---- .../Scripting/Steps/SetWebViewerStepTests.cs | 7 ++++--- .../Scripting/Steps/SetWindowTitleStepTests.cs | 7 ++++--- .../Scripting/Steps/SetZoomLevelStepTests.cs | 7 ++++--- .../Scripting/Steps/ShowAllRecordsStepTests.cs | 4 ++-- .../Scripting/Steps/ShowHideMenubarStepTests.cs | 7 ++++--- .../Scripting/Steps/ShowHideTextRulerStepTests.cs | 7 ++++--- .../Scripting/Steps/ShowHideToolbarsStepTests.cs | 7 ++++--- .../Scripting/Steps/ShowOmittedOnlyStepTests.cs | 4 ++-- .../Scripting/Steps/SortRecordsByFieldStepTests.cs | 4 ++-- .../Scripting/Steps/SortRecordsStepTests.cs | 4 ++-- .../Scripting/Steps/SpeakStepTests.cs | 6 +++--- .../Scripting/Steps/SpellingOptionsStepTests.cs | 4 ++-- .../Steps/TriggerClarisConnectFlowStepTests.cs | 2 +- .../Scripting/Steps/TruncateTableStepTests.cs | 4 ++-- .../Scripting/Steps/UndoRedoStepTests.cs | 7 ++++--- .../Scripting/Steps/UnsortRecordsStepTests.cs | 4 ++-- .../Scripting/Steps/ViewAsStepTests.cs | 7 ++++--- .../Scripting/Steps/WriteToDataFileStepTests.cs | 2 +- 202 files changed, 497 insertions(+), 425 deletions(-) diff --git a/tests/SharpFM.Tests/Scripting/Serialization/StepDisplayRendererTests.cs b/tests/SharpFM.Tests/Scripting/Serialization/StepDisplayRendererTests.cs index e0b82c7f..5c40be21 100644 --- a/tests/SharpFM.Tests/Scripting/Serialization/StepDisplayRendererTests.cs +++ b/tests/SharpFM.Tests/Scripting/Serialization/StepDisplayRendererTests.cs @@ -18,6 +18,8 @@ private sealed class VarStep : ScriptStep public VarStep() : base(true) { } public override XElement ToXml() => throw new System.NotImplementedException(); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); } // Name native; Value + Repetition augmented (labeled, after the natives); @@ -167,5 +169,7 @@ private sealed class FlagStep : ScriptStep public FlagStep() : base(true) { } public override XElement ToXml() => throw new System.NotImplementedException(); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); } } diff --git a/tests/SharpFM.Tests/Scripting/Serialization/StepXmlParserTests.cs b/tests/SharpFM.Tests/Scripting/Serialization/StepXmlParserTests.cs index 04554412..79c46c1c 100644 --- a/tests/SharpFM.Tests/Scripting/Serialization/StepXmlParserTests.cs +++ b/tests/SharpFM.Tests/Scripting/Serialization/StepXmlParserTests.cs @@ -21,6 +21,8 @@ private sealed class VarLikeStep : ScriptStep public VarLikeStep() : base(true) { } public override XElement ToXml() => StepXmlRenderer.Render(this, Meta); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); public static StepMetadata Meta { get; } = new() { @@ -79,6 +81,8 @@ private sealed class LayoutLikeStep : ScriptStep public LayoutLikeStep() : base(true) { } public override XElement ToXml() => StepXmlRenderer.Render(this, Meta); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); public static StepMetadata Meta { get; } = new() { @@ -182,6 +186,8 @@ private sealed class PerformLikeStep : ScriptStep public PerformLikeStep() : base(true) { } public override XElement ToXml() => StepXmlRenderer.Render(this, Meta); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); public static StepMetadata Meta { get; } = new() { @@ -234,6 +240,8 @@ private sealed class JsLikeStep : ScriptStep public JsLikeStep() : base(true) { } public override XElement ToXml() => StepXmlRenderer.Render(this, Meta); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); public static StepMetadata Meta { get; } = new() { @@ -253,6 +261,8 @@ private sealed class PathLikeStep : ScriptStep public PathLikeStep() : base(true) { } public override XElement ToXml() => StepXmlRenderer.Render(this, Meta); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); public static StepMetadata Meta { get; } = new() { @@ -303,6 +313,8 @@ private sealed class GatedWrapperStep : ScriptStep public GatedWrapperStep() : base(true) { } public override XElement ToXml() => StepXmlRenderer.Render(this, Meta); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); public static StepMetadata Meta { get; } = new() { @@ -340,6 +352,8 @@ private sealed class BagLikeStep : ScriptStep public BagLikeStep() : base(true) { } public override XElement ToXml() => StepXmlRenderer.Render(this, Meta); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); public static StepMetadata Meta { get; } = new() { diff --git a/tests/SharpFM.Tests/Scripting/Serialization/StepXmlRendererTests.cs b/tests/SharpFM.Tests/Scripting/Serialization/StepXmlRendererTests.cs index e0ae7159..41327f78 100644 --- a/tests/SharpFM.Tests/Scripting/Serialization/StepXmlRendererTests.cs +++ b/tests/SharpFM.Tests/Scripting/Serialization/StepXmlRendererTests.cs @@ -41,6 +41,8 @@ private sealed class SampleStep : ScriptStep public SampleStep() : base(true) { } public override XElement ToXml() => throw new System.NotImplementedException(); public override string ToDisplayLine() => ""; + protected internal override void PopulateFromXml(XElement step) => throw new System.NotImplementedException(); + protected internal override void PopulateFromDisplay(string[] hrParams) => throw new System.NotImplementedException(); } private static StepMetadata Meta(params ShapeNode[] shape) => diff --git a/tests/SharpFM.Tests/Scripting/Steps/AVPlayerPlayStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AVPlayerPlayStepTests.cs index 8f8436b9..4f4bfdbf 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AVPlayerPlayStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AVPlayerPlayStepTests.cs @@ -14,7 +14,7 @@ public class AVPlayerPlayStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = AVPlayerPlayStep.Metadata.FromXml!(source); + var step = AVPlayerPlayStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetOptionsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetOptionsStepTests.cs index 86f87c81..2855e550 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetOptionsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetOptionsStepTests.cs @@ -14,7 +14,7 @@ public class AVPlayerSetOptionsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = AVPlayerSetOptionsStep.Metadata.FromXml!(source); + var step = AVPlayerSetOptionsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetPlaybackStateStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetPlaybackStateStepTests.cs index dc3e5d53..80cdbba4 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetPlaybackStateStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AVPlayerSetPlaybackStateStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class AVPlayerSetPlaybackStateStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = AVPlayerSetPlaybackStateStep.Metadata.FromXml!(source); + var step = AVPlayerSetPlaybackStateStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = AVPlayerSetPlaybackStateStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = AVPlayerSetPlaybackStateStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("AVPlayer Set Playback State [ Stopped ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = AVPlayerSetPlaybackStateStep.Metadata.FromDisplay!(true, new[] { "Stopped" }); + var step = StepDisplayFactory.TryCreate(AVPlayerSetPlaybackStateStep.XmlName, true, new[] { "Stopped" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/AddAccountStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AddAccountStepTests.cs index 9df25e68..a6350d7e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AddAccountStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AddAccountStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -16,21 +17,21 @@ public class AddAccountStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = AddAccountStep.Metadata.FromXml!(source); + var step = AddAccountStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = AddAccountStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = AddAccountStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = AddAccountStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(AddAccountStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/AdjustWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AdjustWindowStepTests.cs index de878e7a..61f6cce4 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AdjustWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AdjustWindowStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class AdjustWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = AdjustWindowStep.Metadata.FromXml!(source); + var step = AdjustWindowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = AdjustWindowStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = AdjustWindowStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Adjust Window [ Resize to Fit ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = AdjustWindowStep.Metadata.FromDisplay!(true, new[] { "Resize to Fit" }); + var step = StepDisplayFactory.TryCreate(AdjustWindowStep.XmlName, true, new[] { "Resize to Fit" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/AllowFormattingBarStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AllowFormattingBarStepTests.cs index d24b017b..c5fc25d3 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AllowFormattingBarStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AllowFormattingBarStepTests.cs @@ -16,7 +16,7 @@ public class AllowFormattingBarStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = AllowFormattingBarStep.Metadata.FromXml!(source); + var step = AllowFormattingBarStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = AllowFormattingBarStep.Metadata.FromXml!(source); + var step = AllowFormattingBarStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "On" // (boolean: XML True displays as On). - var stepTrue = ((AllowFormattingBarStep)AllowFormattingBarStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (AllowFormattingBarStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Allow Formatting Bar [ On ]", stepTrue.ToDisplayLine()); - var stepFalse = ((AllowFormattingBarStep)AllowFormattingBarStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (AllowFormattingBarStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Allow Formatting Bar [ Off ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/AllowUserAbortStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AllowUserAbortStepTests.cs index 1a08dbb4..2bc6ad2f 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AllowUserAbortStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AllowUserAbortStepTests.cs @@ -16,7 +16,7 @@ public class AllowUserAbortStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = AllowUserAbortStep.Metadata.FromXml!(source); + var step = AllowUserAbortStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = AllowUserAbortStep.Metadata.FromXml!(source); + var step = AllowUserAbortStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "On" // (boolean: XML True displays as On). - var stepTrue = ((AllowUserAbortStep)AllowUserAbortStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (AllowUserAbortStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Allow User Abort [ On ]", stepTrue.ToDisplayLine()); - var stepFalse = ((AllowUserAbortStep)AllowUserAbortStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (AllowUserAbortStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Allow User Abort [ Off ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/AppendPdfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/AppendPdfStepTests.cs index 3714e89e..ecd269b0 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/AppendPdfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/AppendPdfStepTests.cs @@ -19,7 +19,7 @@ public class AppendPdfStepTests public void RoundTrip_CanonicalXml_IsPreserved(string canonicalXml) { var source = XElement.Parse(canonicalXml); - var step = AppendPdfStep.Metadata.FromXml!(source); + var step = AppendPdfStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ArrangeAllWindowsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ArrangeAllWindowsStepTests.cs index 94278621..499e03bb 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ArrangeAllWindowsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ArrangeAllWindowsStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class ArrangeAllWindowsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ArrangeAllWindowsStep.Metadata.FromXml!(source); + var step = ArrangeAllWindowsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = ArrangeAllWindowsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ArrangeAllWindowsStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Arrange All Windows [ Tile Horizontally ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = ArrangeAllWindowsStep.Metadata.FromDisplay!(true, new[] { "Tile Horizontally" }); + var step = StepDisplayFactory.TryCreate(ArrangeAllWindowsStep.XmlName, true, new[] { "Tile Horizontally" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/BeepStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/BeepStepTests.cs index 0b72794c..b6b95822 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/BeepStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/BeepStepTests.cs @@ -30,7 +30,7 @@ private static XElement CanonicalStepElement() => public void RoundTrip_CanonicalXml_IsPreserved() { var source = CanonicalStepElement(); - var step = BeepStep.Metadata.FromXml!(source); + var step = BeepStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -47,7 +47,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = BeepStep.Metadata.FromXml!(source); + var step = BeepStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/CancelPdfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CancelPdfStepTests.cs index 123ae84a..aeefcd16 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CancelPdfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CancelPdfStepTests.cs @@ -15,7 +15,7 @@ public class CancelPdfStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CancelPdfStep.Metadata.FromXml!(source); + var step = CancelPdfStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ChangePasswordStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ChangePasswordStepTests.cs index da1a63fe..83273120 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ChangePasswordStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ChangePasswordStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class ChangePasswordStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ChangePasswordStep.Metadata.FromXml!(source); + var step = ChangePasswordStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ChangePasswordStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ChangePasswordStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ChangePasswordStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ChangePasswordStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CheckFoundSetStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CheckFoundSetStepTests.cs index 239c6589..b6067bfc 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CheckFoundSetStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CheckFoundSetStepTests.cs @@ -19,7 +19,7 @@ public class CheckFoundSetStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CheckFoundSetStep.Metadata.FromXml!(source); + var step = CheckFoundSetStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = CheckFoundSetStep.Metadata.FromXml!(source); + var step = CheckFoundSetStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/CheckRecordStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CheckRecordStepTests.cs index 0843a75e..781d1576 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CheckRecordStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CheckRecordStepTests.cs @@ -19,7 +19,7 @@ public class CheckRecordStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CheckRecordStep.Metadata.FromXml!(source); + var step = CheckRecordStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = CheckRecordStep.Metadata.FromXml!(source); + var step = CheckRecordStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/CheckSelectionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CheckSelectionStepTests.cs index 01b23da3..1358ef49 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CheckSelectionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CheckSelectionStepTests.cs @@ -14,7 +14,7 @@ public class CheckSelectionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CheckSelectionStep.Metadata.FromXml!(source); + var step = CheckSelectionStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ClearStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ClearStepTests.cs index c2f2c109..0ef9bb94 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ClearStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ClearStepTests.cs @@ -14,7 +14,7 @@ public class ClearStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ClearStep.Metadata.FromXml!(source); + var step = ClearStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CloseDataFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CloseDataFileStepTests.cs index a93f70b2..e50a1d78 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CloseDataFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CloseDataFileStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class CloseDataFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CloseDataFileStep.Metadata.FromXml!(source); + var step = CloseDataFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = CloseDataFileStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = CloseDataFileStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = CloseDataFileStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(CloseDataFileStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CloseFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CloseFileStepTests.cs index 75089585..66d55798 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CloseFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CloseFileStepTests.cs @@ -15,7 +15,7 @@ public class CloseFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CloseFileStep.Metadata.FromXml!(source); + var step = CloseFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -23,14 +23,14 @@ public void RoundTrip_CanonicalXml_IsPreserved() public void Display_BareStep_UsesCurrentFile() { var bare = XElement.Parse(""); - var step = CloseFileStep.Metadata.FromXml!(bare); + var step = CloseFileStep.Parse(bare); Assert.Equal("Close File [ Current File ]", step.ToDisplayLine()); } [Fact] public void Display_WithFileReference_UsesName() { - var step = (CloseFileStep)CloseFileStep.Metadata.FromXml!(XElement.Parse( + var step = CloseFileStep.Parse(XElement.Parse( "file:Employees")); Assert.Equal("Close File [ \"Employees\" ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ClosePdfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ClosePdfStepTests.cs index cb1deb53..7127bd81 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ClosePdfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ClosePdfStepTests.cs @@ -19,7 +19,7 @@ public class ClosePdfStepTests public void RoundTrip_CanonicalXml_IsPreserved(string canonicalXml) { var source = XElement.Parse(canonicalXml); - var step = ClosePdfStep.Metadata.FromXml!(source); + var step = ClosePdfStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ClosePopoverStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ClosePopoverStepTests.cs index 4e358efa..79fa4300 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ClosePopoverStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ClosePopoverStepTests.cs @@ -19,7 +19,7 @@ public class ClosePopoverStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ClosePopoverStep.Metadata.FromXml!(source); + var step = ClosePopoverStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = ClosePopoverStep.Metadata.FromXml!(source); + var step = ClosePopoverStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/CloseWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CloseWindowStepTests.cs index e3a45d85..08fdf856 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CloseWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CloseWindowStepTests.cs @@ -14,7 +14,7 @@ public class CloseWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CloseWindowStep.Metadata.FromXml!(source); + var step = CloseWindowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CommitRecordsRequestsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CommitRecordsRequestsStepTests.cs index 14a98e6e..4944b83c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CommitRecordsRequestsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CommitRecordsRequestsStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -23,7 +24,7 @@ public class CommitRecordsRequestsStepTests public void RoundTrip_NoDialog_IsPreserved() { var source = XElement.Parse(NoDialogXml); - var step = CommitRecordsRequestsStep.Metadata.FromXml!(source); + var step = CommitRecordsRequestsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -31,7 +32,7 @@ public void RoundTrip_NoDialog_IsPreserved() public void RoundTrip_WithDialog_IsPreserved() { var source = XElement.Parse(WithDialogXml); - var step = CommitRecordsRequestsStep.Metadata.FromXml!(source); + var step = CommitRecordsRequestsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -39,7 +40,7 @@ public void RoundTrip_WithDialog_IsPreserved() public void InvertedHr_Display_Correct() { // NoInteract=True (XML) -> "With dialog: Off" (display). - var step = (CommitRecordsRequestsStep)CommitRecordsRequestsStep.Metadata.FromXml!(XElement.Parse(NoDialogXml)); + var step = CommitRecordsRequestsStep.Parse(XElement.Parse(NoDialogXml)); Assert.False(step.WithDialog); Assert.StartsWith("Commit Records/Requests [ With dialog: Off", step.ToDisplayLine()); } @@ -47,14 +48,14 @@ public void InvertedHr_Display_Correct() [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = CommitRecordsRequestsStep.Metadata.FromXml!(XElement.Parse(NoDialogXml)); + var step1 = CommitRecordsRequestsStep.Parse(XElement.Parse(NoDialogXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = CommitRecordsRequestsStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(CommitRecordsRequestsStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CommitTransactionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CommitTransactionStepTests.cs index 7ebae9c6..1943be29 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CommitTransactionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CommitTransactionStepTests.cs @@ -19,7 +19,7 @@ public class CommitTransactionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CommitTransactionStep.Metadata.FromXml!(source); + var step = CommitTransactionStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = CommitTransactionStep.Metadata.FromXml!(source); + var step = CommitTransactionStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigureAIAccountStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigureAIAccountStepTests.cs index 9e42dcbd..452bd009 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigureAIAccountStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigureAIAccountStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -16,21 +17,21 @@ public class ConfigureAIAccountStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigureAIAccountStep.Metadata.FromXml!(source); + var step = ConfigureAIAccountStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ConfigureAIAccountStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ConfigureAIAccountStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ConfigureAIAccountStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ConfigureAIAccountStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigureLocalNotificationStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigureLocalNotificationStepTests.cs index 1a3f1694..1810d14a 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigureLocalNotificationStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigureLocalNotificationStepTests.cs @@ -15,7 +15,7 @@ public class ConfigureLocalNotificationStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigureLocalNotificationStep.Metadata.FromXml!(source); + var step = ConfigureLocalNotificationStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigureMachineLearningModelStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigureMachineLearningModelStepTests.cs index 45e7785b..53e67940 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigureMachineLearningModelStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigureMachineLearningModelStepTests.cs @@ -15,7 +15,7 @@ public class ConfigureMachineLearningModelStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigureMachineLearningModelStep.Metadata.FromXml!(source); + var step = ConfigureMachineLearningModelStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigureNfcReadingStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigureNfcReadingStepTests.cs index f1e1446e..9bfda36f 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigureNfcReadingStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigureNfcReadingStepTests.cs @@ -15,7 +15,7 @@ public class ConfigureNfcReadingStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigureNfcReadingStep.Metadata.FromXml!(source); + var step = ConfigureNfcReadingStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigurePromptTemplateStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigurePromptTemplateStepTests.cs index e6809492..c9adc354 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigurePromptTemplateStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigurePromptTemplateStepTests.cs @@ -14,7 +14,7 @@ public class ConfigurePromptTemplateStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigurePromptTemplateStep.Metadata.FromXml!(source); + var step = ConfigurePromptTemplateStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigureRAGAccountStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigureRAGAccountStepTests.cs index 459da6b0..bdaa512d 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigureRAGAccountStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigureRAGAccountStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -16,21 +17,21 @@ public class ConfigureRAGAccountStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigureRAGAccountStep.Metadata.FromXml!(source); + var step = ConfigureRAGAccountStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ConfigureRAGAccountStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ConfigureRAGAccountStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ConfigureRAGAccountStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ConfigureRAGAccountStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegionMonitorScriptStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegionMonitorScriptStepTests.cs index f5bbd7f3..c3c6b5e2 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegionMonitorScriptStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegionMonitorScriptStepTests.cs @@ -15,7 +15,7 @@ public class ConfigureRegionMonitorScriptStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigureRegionMonitorScriptStep.Metadata.FromXml!(source); + var step = ConfigureRegionMonitorScriptStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegressionModelStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegressionModelStepTests.cs index 99fd1c8e..160ee9d8 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegressionModelStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConfigureRegressionModelStepTests.cs @@ -15,7 +15,7 @@ public class ConfigureRegressionModelStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConfigureRegressionModelStep.Metadata.FromXml!(source); + var step = ConfigureRegressionModelStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConstrainFoundSetStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConstrainFoundSetStepTests.cs index c7fc5c13..edd22295 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConstrainFoundSetStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConstrainFoundSetStepTests.cs @@ -15,14 +15,14 @@ public class ConstrainFoundSetStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConstrainFoundSetStep.Metadata.FromXml!(source); + var step = ConstrainFoundSetStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Query_IsTyped() { - var step = (ConstrainFoundSetStep)ConstrainFoundSetStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ConstrainFoundSetStep.Parse(XElement.Parse(CanonicalXml)); Assert.NotNull(step.Query); Assert.Single(step.Query!.Requests); Assert.Equal("Include", step.Query.Requests[0].Operation); diff --git a/tests/SharpFM.Tests/Scripting/Steps/ConvertFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ConvertFileStepTests.cs index 43f39039..da1162a7 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ConvertFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ConvertFileStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -17,21 +18,21 @@ public class ConvertFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ConvertFileStep.Metadata.FromXml!(source); + var step = ConvertFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ConvertFileStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ConvertFileStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ConvertFileStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ConvertFileStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } @@ -41,7 +42,7 @@ public void DataSourceType_Unlabeled_RoundTripsByPosition() var xml = XElement.Parse(""" """); - var step = (ConvertFileStep)ConvertFileStep.Metadata.FromXml!(xml); + var step = ConvertFileStep.Parse(xml); Assert.Equal("XMLSource", step.DataSourceType); Assert.True(XNode.DeepEquals(xml, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CopyAllRecordsRequestsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CopyAllRecordsRequestsStepTests.cs index 88f70540..0172ee88 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CopyAllRecordsRequestsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CopyAllRecordsRequestsStepTests.cs @@ -19,7 +19,7 @@ public class CopyAllRecordsRequestsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CopyAllRecordsRequestsStep.Metadata.FromXml!(source); + var step = CopyAllRecordsRequestsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = CopyAllRecordsRequestsStep.Metadata.FromXml!(source); + var step = CopyAllRecordsRequestsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/CopyRecordRequestStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CopyRecordRequestStepTests.cs index b9b01e90..651f72e0 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CopyRecordRequestStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CopyRecordRequestStepTests.cs @@ -19,7 +19,7 @@ public class CopyRecordRequestStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CopyRecordRequestStep.Metadata.FromXml!(source); + var step = CopyRecordRequestStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = CopyRecordRequestStep.Metadata.FromXml!(source); + var step = CopyRecordRequestStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/CopyStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CopyStepTests.cs index 343a35a6..8af5eec7 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CopyStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CopyStepTests.cs @@ -14,7 +14,7 @@ public class CopyStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CopyStep.Metadata.FromXml!(source); + var step = CopyStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CorrectWordStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CorrectWordStepTests.cs index efa395fc..b7f38fb3 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CorrectWordStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CorrectWordStepTests.cs @@ -19,7 +19,7 @@ public class CorrectWordStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CorrectWordStep.Metadata.FromXml!(source); + var step = CorrectWordStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = CorrectWordStep.Metadata.FromXml!(source); + var step = CorrectWordStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/CreateDataFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CreateDataFileStepTests.cs index d899c619..105f7832 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CreateDataFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CreateDataFileStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class CreateDataFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CreateDataFileStep.Metadata.FromXml!(source); + var step = CreateDataFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = CreateDataFileStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = CreateDataFileStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = CreateDataFileStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(CreateDataFileStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CreatePdfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CreatePdfStepTests.cs index c1ad5382..389610af 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CreatePdfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CreatePdfStepTests.cs @@ -19,7 +19,7 @@ public class CreatePdfStepTests public void RoundTrip_CanonicalXml_IsPreserved(string canonicalXml) { var source = XElement.Parse(canonicalXml); - var step = CreatePdfStep.Metadata.FromXml!(source); + var step = CreatePdfStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/CutStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/CutStepTests.cs index ef65dcf5..d666ac80 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/CutStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/CutStepTests.cs @@ -14,7 +14,7 @@ public class CutStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = CutStep.Metadata.FromXml!(source); + var step = CutStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/DeleteAccountStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/DeleteAccountStepTests.cs index 46c37c0b..9657c194 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/DeleteAccountStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/DeleteAccountStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class DeleteAccountStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = DeleteAccountStep.Metadata.FromXml!(source); + var step = DeleteAccountStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = DeleteAccountStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = DeleteAccountStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = DeleteAccountStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(DeleteAccountStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/DeleteAllRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/DeleteAllRecordsStepTests.cs index a69993a8..b8e745cd 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/DeleteAllRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/DeleteAllRecordsStepTests.cs @@ -16,7 +16,7 @@ public class DeleteAllRecordsStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = DeleteAllRecordsStep.Metadata.FromXml!(source); + var step = DeleteAllRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = DeleteAllRecordsStep.Metadata.FromXml!(source); + var step = DeleteAllRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "Off" // (invertedHr: XML True displays as Off). - var stepTrue = ((DeleteAllRecordsStep)DeleteAllRecordsStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (DeleteAllRecordsStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Delete All Records [ With dialog: Off ]", stepTrue.ToDisplayLine()); - var stepFalse = ((DeleteAllRecordsStep)DeleteAllRecordsStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (DeleteAllRecordsStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Delete All Records [ With dialog: On ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/DeleteFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/DeleteFileStepTests.cs index 25b430aa..b11cf9e6 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/DeleteFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/DeleteFileStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class DeleteFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = DeleteFileStep.Metadata.FromXml!(source); + var step = DeleteFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsLabeledPath() { - var step = (DeleteFileStep)DeleteFileStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = DeleteFileStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Delete File [ Target file: $path ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesLabeledPath() { - var step = (DeleteFileStep)DeleteFileStep.Metadata.FromDisplay!(true, new[] { "Target file: $path" }); + var step = (DeleteFileStep)StepDisplayFactory.TryCreate(DeleteFileStep.XmlName, true, new[] { "Target file: $path" })!; Assert.Equal("$path", step.TargetFile); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/DeletePortalRowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/DeletePortalRowStepTests.cs index b86fd9c0..eb57c574 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/DeletePortalRowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/DeletePortalRowStepTests.cs @@ -16,7 +16,7 @@ public class DeletePortalRowStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = DeletePortalRowStep.Metadata.FromXml!(source); + var step = DeletePortalRowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = DeletePortalRowStep.Metadata.FromXml!(source); + var step = DeletePortalRowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "Off" // (invertedHr: XML True displays as Off). - var stepTrue = ((DeletePortalRowStep)DeletePortalRowStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (DeletePortalRowStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Delete Portal Row [ With dialog: Off ]", stepTrue.ToDisplayLine()); - var stepFalse = ((DeletePortalRowStep)DeletePortalRowStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (DeletePortalRowStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Delete Portal Row [ With dialog: On ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/DeleteRecordRequestStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/DeleteRecordRequestStepTests.cs index eea6f264..3572b8fa 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/DeleteRecordRequestStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/DeleteRecordRequestStepTests.cs @@ -16,7 +16,7 @@ public class DeleteRecordRequestStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = DeleteRecordRequestStep.Metadata.FromXml!(source); + var step = DeleteRecordRequestStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = DeleteRecordRequestStep.Metadata.FromXml!(source); + var step = DeleteRecordRequestStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "Off" // (invertedHr: XML True displays as Off). - var stepTrue = ((DeleteRecordRequestStep)DeleteRecordRequestStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (DeleteRecordRequestStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Delete Record/Request [ With dialog: Off ]", stepTrue.ToDisplayLine()); - var stepFalse = ((DeleteRecordRequestStep)DeleteRecordRequestStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (DeleteRecordRequestStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Delete Record/Request [ With dialog: On ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/DialPhoneStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/DialPhoneStepTests.cs index b2125b5a..91bf7e96 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/DialPhoneStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/DialPhoneStepTests.cs @@ -14,7 +14,7 @@ public class DialPhoneStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = DialPhoneStep.Metadata.FromXml!(source); + var step = DialPhoneStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/DuplicateRecordRequestStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/DuplicateRecordRequestStepTests.cs index 0fb65148..1d2f2a9d 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/DuplicateRecordRequestStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/DuplicateRecordRequestStepTests.cs @@ -19,7 +19,7 @@ public class DuplicateRecordRequestStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = DuplicateRecordRequestStep.Metadata.FromXml!(source); + var step = DuplicateRecordRequestStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = DuplicateRecordRequestStep.Metadata.FromXml!(source); + var step = DuplicateRecordRequestStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/EditUserDictionaryStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/EditUserDictionaryStepTests.cs index 336bf9aa..ac6da436 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/EditUserDictionaryStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/EditUserDictionaryStepTests.cs @@ -19,7 +19,7 @@ public class EditUserDictionaryStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = EditUserDictionaryStep.Metadata.FromXml!(source); + var step = EditUserDictionaryStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = EditUserDictionaryStep.Metadata.FromXml!(source); + var step = EditUserDictionaryStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/EnableAccountStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/EnableAccountStepTests.cs index b6890969..7592d925 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/EnableAccountStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/EnableAccountStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class EnableAccountStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = EnableAccountStep.Metadata.FromXml!(source); + var step = EnableAccountStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = EnableAccountStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = EnableAccountStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = EnableAccountStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(EnableAccountStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/EnableTouchKeyboardStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/EnableTouchKeyboardStepTests.cs index cc3b8667..4b35c088 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/EnableTouchKeyboardStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/EnableTouchKeyboardStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class EnableTouchKeyboardStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = EnableTouchKeyboardStep.Metadata.FromXml!(source); + var step = EnableTouchKeyboardStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = EnableTouchKeyboardStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = EnableTouchKeyboardStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Enable Touch Keyboard [ On ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = EnableTouchKeyboardStep.Metadata.FromDisplay!(true, new[] { "On" }); + var step = StepDisplayFactory.TryCreate(EnableTouchKeyboardStep.XmlName, true, new[] { "On" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/EnterBrowseModeStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/EnterBrowseModeStepTests.cs index 06759291..33bc5d43 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/EnterBrowseModeStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/EnterBrowseModeStepTests.cs @@ -16,7 +16,7 @@ public class EnterBrowseModeStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = EnterBrowseModeStep.Metadata.FromXml!(source); + var step = EnterBrowseModeStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = EnterBrowseModeStep.Metadata.FromXml!(source); + var step = EnterBrowseModeStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "On" // (boolean: XML True displays as On). - var stepTrue = ((EnterBrowseModeStep)EnterBrowseModeStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (EnterBrowseModeStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Enter Browse Mode [ Pause: On ]", stepTrue.ToDisplayLine()); - var stepFalse = ((EnterBrowseModeStep)EnterBrowseModeStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (EnterBrowseModeStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Enter Browse Mode [ Pause: Off ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/EnterFindModeStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/EnterFindModeStepTests.cs index 9222aaa1..c2c67fec 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/EnterFindModeStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/EnterFindModeStepTests.cs @@ -15,7 +15,7 @@ public class EnterFindModeStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = EnterFindModeStep.Metadata.FromXml!(source); + var step = EnterFindModeStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/EnterPreviewModeStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/EnterPreviewModeStepTests.cs index 1c962bb3..b9443062 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/EnterPreviewModeStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/EnterPreviewModeStepTests.cs @@ -16,7 +16,7 @@ public class EnterPreviewModeStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = EnterPreviewModeStep.Metadata.FromXml!(source); + var step = EnterPreviewModeStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = EnterPreviewModeStep.Metadata.FromXml!(source); + var step = EnterPreviewModeStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "On" // (boolean: XML True displays as On). - var stepTrue = ((EnterPreviewModeStep)EnterPreviewModeStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (EnterPreviewModeStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Enter Preview Mode [ Pause: On ]", stepTrue.ToDisplayLine()); - var stepFalse = ((EnterPreviewModeStep)EnterPreviewModeStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (EnterPreviewModeStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Enter Preview Mode [ Pause: Off ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ExecuteFileMakerDataApiStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ExecuteFileMakerDataApiStepTests.cs index 26d5ce71..67aa98ed 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ExecuteFileMakerDataApiStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ExecuteFileMakerDataApiStepTests.cs @@ -15,7 +15,7 @@ public class ExecuteFileMakerDataApiStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ExecuteFileMakerDataApiStep.Metadata.FromXml!(source); + var step = ExecuteFileMakerDataApiStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ExecuteSqlStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ExecuteSqlStepTests.cs index 5bd818bd..903947e5 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ExecuteSqlStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ExecuteSqlStepTests.cs @@ -15,7 +15,7 @@ public class ExecuteSqlStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ExecuteSqlStep.Metadata.FromXml!(source); + var step = ExecuteSqlStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ExitApplicationStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ExitApplicationStepTests.cs index 1bba3881..b7842f33 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ExitApplicationStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ExitApplicationStepTests.cs @@ -19,7 +19,7 @@ public class ExitApplicationStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ExitApplicationStep.Metadata.FromXml!(source); + var step = ExitApplicationStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = ExitApplicationStep.Metadata.FromXml!(source); + var step = ExitApplicationStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/ExitScriptStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ExitScriptStepTests.cs index 6b080c90..f9ce966a 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ExitScriptStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ExitScriptStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class ExitScriptStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ExitScriptStep.Metadata.FromXml!(source); + var step = ExitScriptStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ExitScriptStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ExitScriptStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ExitScriptStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ExitScriptStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ExportFieldContentsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ExportFieldContentsStepTests.cs index 9522a62f..2ed08983 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ExportFieldContentsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ExportFieldContentsStepTests.cs @@ -15,7 +15,7 @@ public class ExportFieldContentsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ExportFieldContentsStep.Metadata.FromXml!(source); + var step = ExportFieldContentsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ExportRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ExportRecordsStepTests.cs index 18e3e9bc..0d783a6d 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ExportRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ExportRecordsStepTests.cs @@ -15,14 +15,14 @@ public class ExportRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ExportRecordsStep.Metadata.FromXml!(source); + var step = ExportRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void ExportEntries_AreTyped() { - var step = (ExportRecordsStep)ExportRecordsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ExportRecordsStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal(2, step.ExportEntries.Count); Assert.Equal("name", step.ExportEntries[0].Field.Name); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ExtendFoundSetStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ExtendFoundSetStepTests.cs index 7b3808c4..dfd17717 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ExtendFoundSetStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ExtendFoundSetStepTests.cs @@ -15,7 +15,7 @@ public class ExtendFoundSetStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ExtendFoundSetStep.Metadata.FromXml!(source); + var step = ExtendFoundSetStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/FindMatchingRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/FindMatchingRecordsStepTests.cs index 0ce95ee6..038199ae 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/FindMatchingRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/FindMatchingRecordsStepTests.cs @@ -15,14 +15,14 @@ public class FindMatchingRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = FindMatchingRecordsStep.Metadata.FromXml!(source); + var step = FindMatchingRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsModeAndField() { - var step = (FindMatchingRecordsStep)FindMatchingRecordsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = FindMatchingRecordsStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Find Matching Records [ Constrain ; Customer::state (#1) ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/FineTuneModelStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/FineTuneModelStepTests.cs index 04a8edb2..8a7cba69 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/FineTuneModelStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/FineTuneModelStepTests.cs @@ -15,7 +15,7 @@ public class FineTuneModelStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = FineTuneModelStep.Metadata.FromXml!(source); + var step = FineTuneModelStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/FlushCacheToDiskStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/FlushCacheToDiskStepTests.cs index b729be75..52cbfaf7 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/FlushCacheToDiskStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/FlushCacheToDiskStepTests.cs @@ -19,7 +19,7 @@ public class FlushCacheToDiskStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = FlushCacheToDiskStep.Metadata.FromXml!(source); + var step = FlushCacheToDiskStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = FlushCacheToDiskStep.Metadata.FromXml!(source); + var step = FlushCacheToDiskStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/FreezeWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/FreezeWindowStepTests.cs index ef1f9356..5217ed9c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/FreezeWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/FreezeWindowStepTests.cs @@ -19,7 +19,7 @@ public class FreezeWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = FreezeWindowStep.Metadata.FromXml!(source); + var step = FreezeWindowStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = FreezeWindowStep.Metadata.FromXml!(source); + var step = FreezeWindowStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/GenerateResponseFromModelStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GenerateResponseFromModelStepTests.cs index fa41f4ca..ded5b111 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GenerateResponseFromModelStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GenerateResponseFromModelStepTests.cs @@ -15,7 +15,7 @@ public class GenerateResponseFromModelStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GenerateResponseFromModelStep.Metadata.FromXml!(source); + var step = GenerateResponseFromModelStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GetDataFilePositionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GetDataFilePositionStepTests.cs index 68d88297..89d83552 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GetDataFilePositionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GetDataFilePositionStepTests.cs @@ -15,14 +15,14 @@ public class GetDataFilePositionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GetDataFilePositionStep.Metadata.FromXml!(source); + var step = GetDataFilePositionStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsFileIdAndTarget() { - var step = (GetDataFilePositionStep)GetDataFilePositionStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = GetDataFilePositionStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Get Data File Position [ File ID: $handle ; Target: Data::pos (#1) ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GetFileExistsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GetFileExistsStepTests.cs index 7e5b2346..2c9d28f5 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GetFileExistsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GetFileExistsStepTests.cs @@ -15,14 +15,14 @@ public class GetFileExistsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GetFileExistsStep.Metadata.FromXml!(source); + var step = GetFileExistsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsPathAndTarget() { - var step = (GetFileExistsStep)GetFileExistsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = GetFileExistsStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Get File Exists [ $path ; Target: Results::exists (#5) ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GetFileSizeStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GetFileSizeStepTests.cs index d0ee637c..87b70863 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GetFileSizeStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GetFileSizeStepTests.cs @@ -15,14 +15,14 @@ public class GetFileSizeStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GetFileSizeStep.Metadata.FromXml!(source); + var step = GetFileSizeStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsPathAndTarget() { - var step = (GetFileSizeStep)GetFileSizeStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = GetFileSizeStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Get File Size [ $path ; Target: Results::size (#6) ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GetFolderPathStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GetFolderPathStepTests.cs index fe7e2266..8d6d67a7 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GetFolderPathStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GetFolderPathStepTests.cs @@ -14,7 +14,7 @@ public class GetFolderPathStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GetFolderPathStep.Metadata.FromXml!(source); + var step = GetFolderPathStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GoToFieldStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GoToFieldStepTests.cs index cefc6251..acdd6185 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GoToFieldStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GoToFieldStepTests.cs @@ -14,7 +14,7 @@ public class GoToFieldStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GoToFieldStep.Metadata.FromXml!(source); + var step = GoToFieldStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GoToListOfRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GoToListOfRecordsStepTests.cs index 65fc8b11..e25ecea2 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GoToListOfRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GoToListOfRecordsStepTests.cs @@ -15,7 +15,7 @@ public class GoToListOfRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GoToListOfRecordsStep.Metadata.FromXml!(source); + var step = GoToListOfRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GoToNextFieldStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GoToNextFieldStepTests.cs index 8cd393d3..86ea7d44 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GoToNextFieldStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GoToNextFieldStepTests.cs @@ -19,7 +19,7 @@ public class GoToNextFieldStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GoToNextFieldStep.Metadata.FromXml!(source); + var step = GoToNextFieldStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = GoToNextFieldStep.Metadata.FromXml!(source); + var step = GoToNextFieldStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/GoToObjectStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GoToObjectStepTests.cs index b3870da1..67eb3fe6 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GoToObjectStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GoToObjectStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class GoToObjectStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GoToObjectStep.Metadata.FromXml!(source); + var step = GoToObjectStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = GoToObjectStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = GoToObjectStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = GoToObjectStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(GoToObjectStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GoToPortalRowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GoToPortalRowStepTests.cs index 913dc0bc..606776d9 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GoToPortalRowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GoToPortalRowStepTests.cs @@ -15,7 +15,7 @@ public class GoToPortalRowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GoToPortalRowStep.Metadata.FromXml!(source); + var step = GoToPortalRowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/GoToPreviousFieldStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GoToPreviousFieldStepTests.cs index 1bac8702..8dd058ef 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GoToPreviousFieldStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GoToPreviousFieldStepTests.cs @@ -19,7 +19,7 @@ public class GoToPreviousFieldStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GoToPreviousFieldStep.Metadata.FromXml!(source); + var step = GoToPreviousFieldStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = GoToPreviousFieldStep.Metadata.FromXml!(source); + var step = GoToPreviousFieldStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/GoToRelatedRecordStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/GoToRelatedRecordStepTests.cs index 41995c44..33cf58be 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/GoToRelatedRecordStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/GoToRelatedRecordStepTests.cs @@ -16,7 +16,7 @@ public class GoToRelatedRecordStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = GoToRelatedRecordStep.Metadata.FromXml!(source); + var step = GoToRelatedRecordStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/HaltScriptStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/HaltScriptStepTests.cs index 6da08bca..b92f4a2f 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/HaltScriptStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/HaltScriptStepTests.cs @@ -19,7 +19,7 @@ public class HaltScriptStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = HaltScriptStep.Metadata.FromXml!(source); + var step = HaltScriptStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = HaltScriptStep.Metadata.FromXml!(source); + var step = HaltScriptStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/IfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/IfStepTests.cs index c6b38ba2..ecc6af75 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/IfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/IfStepTests.cs @@ -39,7 +39,7 @@ private static XElement StepFromSnippet(string snippet) => public void RoundTrip_WithRestoreInSource_PreservesRestore() { var source = StepFromSnippet(CanonicalSnippet); - var step = IfStep.Metadata.FromXml!(source); + var step = IfStep.Parse(source); var output = step.ToXml(); Assert.Equal("False", output.Element("Restore")!.Attribute("state")!.Value); @@ -53,7 +53,7 @@ public void RoundTrip_WithRestoreInSource_PreservesRestore() public void RoundTrip_NoRestoreInput_CanonicalizesByAddingRestore() { var source = XElement.Parse(NoRestoreStep); - var step = IfStep.Metadata.FromXml!(source); + var step = IfStep.Parse(source); var output = step.ToXml(); Assert.Equal("False", output.Element("Restore")!.Attribute("state")!.Value); diff --git a/tests/SharpFM.Tests/Scripting/Steps/ImportRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ImportRecordsStepTests.cs index 74b1b8c6..aff49c69 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ImportRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ImportRecordsStepTests.cs @@ -15,14 +15,14 @@ public class ImportRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ImportRecordsStep.Metadata.FromXml!(source); + var step = ImportRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void TargetFields_AreTyped() { - var step = (ImportRecordsStep)ImportRecordsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ImportRecordsStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal(2, step.TargetFields.Count); Assert.Equal("Import", step.TargetFields[0].Map); Assert.Equal("DoNotImport", step.TargetFields[1].Map); diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertAudioVideoStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertAudioVideoStepTests.cs index 4307c2c6..8f18918e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertAudioVideoStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertAudioVideoStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -16,28 +17,28 @@ public class InsertAudioVideoStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertAudioVideoStep.Metadata.FromXml!(source); + var step = InsertAudioVideoStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsPathAndReference() { - var step = (InsertAudioVideoStep)InsertAudioVideoStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = InsertAudioVideoStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Insert Audio/Video [ $path ; Reference: Embedded ]", step.ToDisplayLine()); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = InsertAudioVideoStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = InsertAudioVideoStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = InsertAudioVideoStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(InsertAudioVideoStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertCalculatedResultStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertCalculatedResultStepTests.cs index 8a6ccb6e..efabafeb 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertCalculatedResultStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertCalculatedResultStepTests.cs @@ -15,14 +15,14 @@ public class InsertCalculatedResultStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertCalculatedResultStep.Metadata.FromXml!(source); + var step = InsertCalculatedResultStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsSelectTargetAndCalc() { - var step = (InsertCalculatedResultStep)InsertCalculatedResultStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = InsertCalculatedResultStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Insert Calculated Result [ Select ; Target: $variable ; \"calculation\" ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentDateStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentDateStepTests.cs index 26667b18..78772ba3 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentDateStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentDateStepTests.cs @@ -14,7 +14,7 @@ public class InsertCurrentDateStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertCurrentDateStep.Metadata.FromXml!(source); + var step = InsertCurrentDateStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentTimeStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentTimeStepTests.cs index f08e6c3b..d1059919 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentTimeStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentTimeStepTests.cs @@ -14,7 +14,7 @@ public class InsertCurrentTimeStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertCurrentTimeStep.Metadata.FromXml!(source); + var step = InsertCurrentTimeStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentUserNameStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentUserNameStepTests.cs index 5eb57219..0314e7b1 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentUserNameStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertCurrentUserNameStepTests.cs @@ -14,7 +14,7 @@ public class InsertCurrentUserNameStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertCurrentUserNameStep.Metadata.FromXml!(source); + var step = InsertCurrentUserNameStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingInFoundSetStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingInFoundSetStepTests.cs index 6b0866ef..90420275 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingInFoundSetStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingInFoundSetStepTests.cs @@ -15,14 +15,14 @@ public class InsertEmbeddingInFoundSetStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertEmbeddingInFoundSetStep.Metadata.FromXml!(source); + var step = InsertEmbeddingInFoundSetStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void FlagElements_PresenceMeansOn() { - var step = (InsertEmbeddingInFoundSetStep)InsertEmbeddingInFoundSetStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = InsertEmbeddingInFoundSetStep.Parse(XElement.Parse(CanonicalXml)); Assert.True(step.Overwrite); Assert.True(step.ContinueOnError); Assert.True(step.ShowSummary); diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingStepTests.cs index 49c29b06..b04264b7 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertEmbeddingStepTests.cs @@ -15,7 +15,7 @@ public class InsertEmbeddingStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertEmbeddingStep.Metadata.FromXml!(source); + var step = InsertEmbeddingStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertFileStepTests.cs index 38580f14..dd2fac41 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertFileStepTests.cs @@ -15,7 +15,7 @@ public class InsertFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertFileStep.Metadata.FromXml!(source); + var step = InsertFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertFromDeviceStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertFromDeviceStepTests.cs index e381c0ec..c54c89f6 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertFromDeviceStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertFromDeviceStepTests.cs @@ -15,7 +15,7 @@ public class InsertFromDeviceStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertFromDeviceStep.Metadata.FromXml!(source); + var step = InsertFromDeviceStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertFromIndexStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertFromIndexStepTests.cs index 144b1a42..103a2111 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertFromIndexStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertFromIndexStepTests.cs @@ -14,7 +14,7 @@ public class InsertFromIndexStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertFromIndexStep.Metadata.FromXml!(source); + var step = InsertFromIndexStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertFromLastVisitedStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertFromLastVisitedStepTests.cs index d77a0037..9c64d8fc 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertFromLastVisitedStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertFromLastVisitedStepTests.cs @@ -14,7 +14,7 @@ public class InsertFromLastVisitedStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertFromLastVisitedStep.Metadata.FromXml!(source); + var step = InsertFromLastVisitedStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertFromUrlStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertFromUrlStepTests.cs index a84c5a6c..271362c2 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertFromUrlStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertFromUrlStepTests.cs @@ -15,7 +15,7 @@ public class InsertFromUrlStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertFromUrlStep.Metadata.FromXml!(source); + var step = InsertFromUrlStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -58,7 +58,7 @@ public void RealWorldShapes_RoundTrip( xml.Append(""); var source = XElement.Parse(xml.ToString()); - var step = InsertFromUrlStep.Metadata.FromXml!(source); + var step = InsertFromUrlStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml()), $"Round-trip mismatch.\nSource:\n{source}\n\nOutput:\n{step.ToXml()}"); } @@ -73,7 +73,7 @@ public void NoInteract_True_RendersAsWithDialogOff() + "" + "" + ""); - var step = (InsertFromUrlStep)InsertFromUrlStep.Metadata.FromXml!(source); + var step = InsertFromUrlStep.Parse(source); Assert.False(step.WithDialog); Assert.Contains("With dialog: Off", step.ToDisplayLine()); } @@ -86,7 +86,7 @@ public void NoInteract_False_RendersAsWithDialogOn() + "" + "" + ""); - var step = (InsertFromUrlStep)InsertFromUrlStep.Metadata.FromXml!(source); + var step = InsertFromUrlStep.Parse(source); Assert.True(step.WithDialog); Assert.Contains("With dialog: On", step.ToDisplayLine()); } @@ -101,7 +101,7 @@ public void Display_BaseShape_IsValidatorClean() + "" + "" + ""); - var step = InsertFromUrlStep.Metadata.FromXml!(source); + var step = InsertFromUrlStep.Parse(source); var display = step.ToDisplayLine(); var diagnostics = SharpFM.Model.Scripting.ScriptValidator.Validate(display); Assert.Empty(diagnostics); diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertPdfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertPdfStepTests.cs index ff4c92f8..6b32656e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertPdfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertPdfStepTests.cs @@ -15,7 +15,7 @@ public class InsertPdfStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertPdfStep.Metadata.FromXml!(source); + var step = InsertPdfStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertPictureStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertPictureStepTests.cs index a39e6472..368959b5 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertPictureStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertPictureStepTests.cs @@ -15,7 +15,7 @@ public class InsertPictureStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertPictureStep.Metadata.FromXml!(source); + var step = InsertPictureStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InsertTextStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InsertTextStepTests.cs index cc193e58..766b193c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InsertTextStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InsertTextStepTests.cs @@ -15,14 +15,14 @@ public class InsertTextStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InsertTextStep.Metadata.FromXml!(source); + var step = InsertTextStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsSelectTargetAndText() { - var step = (InsertTextStep)InsertTextStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = InsertTextStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Insert Text [ Select ; Target: $variable ; \"text content\" ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InstallMenuSetStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InstallMenuSetStepTests.cs index e82083e9..8d626f85 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InstallMenuSetStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InstallMenuSetStepTests.cs @@ -15,14 +15,14 @@ public class InstallMenuSetStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InstallMenuSetStep.Metadata.FromXml!(source); + var step = InstallMenuSetStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsMenuSetAndFlag() { - var step = (InstallMenuSetStep)InstallMenuSetStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = InstallMenuSetStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Install Menu Set [ \"[Standard FileMaker Menus]\" ; Use as file default: Off ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InstallOnTimerScriptStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InstallOnTimerScriptStepTests.cs index d9f74d67..9fcdd05f 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InstallOnTimerScriptStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InstallOnTimerScriptStepTests.cs @@ -16,14 +16,14 @@ public class InstallOnTimerScriptStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InstallOnTimerScriptStep.Metadata.FromXml!(source); + var step = InstallOnTimerScriptStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsScriptAndInterval() { - var step = (InstallOnTimerScriptStep)InstallOnTimerScriptStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = InstallOnTimerScriptStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Install OnTimer Script [ \"Refresh\" ; Interval: 30 ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/InstallPlugInFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/InstallPlugInFileStepTests.cs index fac11dd8..db9b5f3c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/InstallPlugInFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/InstallPlugInFileStepTests.cs @@ -14,7 +14,7 @@ public class InstallPlugInFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = InstallPlugInFileStep.Metadata.FromXml!(source); + var step = InstallPlugInFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ModifyLastFindStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ModifyLastFindStepTests.cs index 7cbb1166..cc0602b9 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ModifyLastFindStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ModifyLastFindStepTests.cs @@ -19,7 +19,7 @@ public class ModifyLastFindStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ModifyLastFindStep.Metadata.FromXml!(source); + var step = ModifyLastFindStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = ModifyLastFindStep.Metadata.FromXml!(source); + var step = ModifyLastFindStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/MoveResizeWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/MoveResizeWindowStepTests.cs index 932216c2..1c26bcc6 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/MoveResizeWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/MoveResizeWindowStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class MoveResizeWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = MoveResizeWindowStep.Metadata.FromXml!(source); + var step = MoveResizeWindowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = MoveResizeWindowStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = MoveResizeWindowStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = MoveResizeWindowStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(MoveResizeWindowStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/NewFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/NewFileStepTests.cs index bbf2cf2a..cf45652c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/NewFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/NewFileStepTests.cs @@ -19,7 +19,7 @@ public class NewFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = NewFileStep.Metadata.FromXml!(source); + var step = NewFileStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = NewFileStep.Metadata.FromXml!(source); + var step = NewFileStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/NewRecordRequestStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/NewRecordRequestStepTests.cs index 50b3718e..d0ced80a 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/NewRecordRequestStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/NewRecordRequestStepTests.cs @@ -19,7 +19,7 @@ public class NewRecordRequestStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = NewRecordRequestStep.Metadata.FromXml!(source); + var step = NewRecordRequestStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = NewRecordRequestStep.Metadata.FromXml!(source); + var step = NewRecordRequestStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/NewWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/NewWindowStepTests.cs index e2f96b10..ba79ba51 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/NewWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/NewWindowStepTests.cs @@ -18,7 +18,7 @@ public class NewWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = NewWindowStep.Metadata.FromXml!(source); + var step = NewWindowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/NoInteractSemanticTests.cs b/tests/SharpFM.Tests/Scripting/Steps/NoInteractSemanticTests.cs index 21a431f3..f776c0cd 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/NoInteractSemanticTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/NoInteractSemanticTests.cs @@ -1,6 +1,7 @@ using System.Linq; using System.Xml.Linq; using SharpFM.Model.Scripting.Registry; +using SharpFM.Model.Scripting.Serialization; using Xunit; namespace SharpFM.Tests.Scripting.Steps; @@ -143,7 +144,7 @@ private static SharpFM.Model.Scripting.ScriptStep ParseWithNoInteract(string nam new XAttribute("id", id), new XAttribute("name", name), new XElement("NoInteract", new XAttribute("state", state))); - return StepRegistry.ByName[name].FromXml!(xml); + return StepXmlFactory.Create(xml); } // Helper used inside the discovery LINQ: construct the POCO from a @@ -155,12 +156,11 @@ private static SharpFM.Model.Scripting.ScriptStep ParseWithNoInteract(string nam private static SharpFM.Model.Scripting.ScriptStep? m(string stepName) { if (!StepRegistry.ByName.TryGetValue(stepName, out var meta)) return null; - if (meta.FromXml is null) return null; var xml = new XElement("Step", new XAttribute("enable", "True"), new XAttribute("id", meta.Id), new XAttribute("name", stepName)); - try { return meta.FromXml(xml); } + try { return StepXmlFactory.Create(xml); } catch { return null; } } } diff --git a/tests/SharpFM.Tests/Scripting/Steps/OmitMultipleRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OmitMultipleRecordsStepTests.cs index f651b40c..6cf7b4dd 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OmitMultipleRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OmitMultipleRecordsStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class OmitMultipleRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OmitMultipleRecordsStep.Metadata.FromXml!(source); + var step = OmitMultipleRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = OmitMultipleRecordsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = OmitMultipleRecordsStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = OmitMultipleRecordsStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(OmitMultipleRecordsStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/OmitRecordStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OmitRecordStepTests.cs index f32706d5..e536431b 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OmitRecordStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OmitRecordStepTests.cs @@ -19,7 +19,7 @@ public class OmitRecordStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OmitRecordStep.Metadata.FromXml!(source); + var step = OmitRecordStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OmitRecordStep.Metadata.FromXml!(source); + var step = OmitRecordStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenDataFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenDataFileStepTests.cs index ee12f256..e0a2792b 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenDataFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenDataFileStepTests.cs @@ -15,14 +15,14 @@ public class OpenDataFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenDataFileStep.Metadata.FromXml!(source); + var step = OpenDataFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsPathAndTarget() { - var step = (OpenDataFileStep)OpenDataFileStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = OpenDataFileStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Open Data File [ $path ; Target: Data::handle (#1) ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenEditSavedFindsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenEditSavedFindsStepTests.cs index b315bbc2..4b7e04a1 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenEditSavedFindsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenEditSavedFindsStepTests.cs @@ -19,7 +19,7 @@ public class OpenEditSavedFindsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenEditSavedFindsStep.Metadata.FromXml!(source); + var step = OpenEditSavedFindsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenEditSavedFindsStep.Metadata.FromXml!(source); + var step = OpenEditSavedFindsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenFavoritesStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenFavoritesStepTests.cs index 41eb736d..d4bb27e5 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenFavoritesStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenFavoritesStepTests.cs @@ -19,7 +19,7 @@ public class OpenFavoritesStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenFavoritesStep.Metadata.FromXml!(source); + var step = OpenFavoritesStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenFavoritesStep.Metadata.FromXml!(source); + var step = OpenFavoritesStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenFileOptionsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenFileOptionsStepTests.cs index 7c2d07fe..10a89ba8 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenFileOptionsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenFileOptionsStepTests.cs @@ -19,7 +19,7 @@ public class OpenFileOptionsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenFileOptionsStep.Metadata.FromXml!(source); + var step = OpenFileOptionsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenFileOptionsStep.Metadata.FromXml!(source); + var step = OpenFileOptionsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenFileStepTests.cs index a28163e1..137c6d58 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenFileStepTests.cs @@ -15,14 +15,14 @@ public class OpenFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenFileStep.Metadata.FromXml!(source); + var step = OpenFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHiddenFlagAndFileName() { - var step = (OpenFileStep)OpenFileStep.Metadata.FromXml!(XElement.Parse( + var step = OpenFileStep.Parse(XElement.Parse( "")); Assert.Equal("Open File [ Open hidden: On ; \"Books\" ]", step.ToDisplayLine()); } @@ -30,7 +30,7 @@ public void Display_EmitsHiddenFlagAndFileName() [Fact] public void Display_WithoutFile_OmitsFileToken() { - var step = (OpenFileStep)OpenFileStep.Metadata.FromXml!(XElement.Parse( + var step = OpenFileStep.Parse(XElement.Parse( "")); Assert.Equal("Open File [ Open hidden: Off ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenFindReplaceStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenFindReplaceStepTests.cs index 60182db0..8df57eab 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenFindReplaceStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenFindReplaceStepTests.cs @@ -19,7 +19,7 @@ public class OpenFindReplaceStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenFindReplaceStep.Metadata.FromXml!(source); + var step = OpenFindReplaceStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenFindReplaceStep.Metadata.FromXml!(source); + var step = OpenFindReplaceStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenHelpStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenHelpStepTests.cs index 75fa6a2c..3082ff87 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenHelpStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenHelpStepTests.cs @@ -19,7 +19,7 @@ public class OpenHelpStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenHelpStep.Metadata.FromXml!(source); + var step = OpenHelpStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenHelpStep.Metadata.FromXml!(source); + var step = OpenHelpStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenHostsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenHostsStepTests.cs index dcec789e..bb4d9234 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenHostsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenHostsStepTests.cs @@ -19,7 +19,7 @@ public class OpenHostsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenHostsStep.Metadata.FromXml!(source); + var step = OpenHostsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenHostsStep.Metadata.FromXml!(source); + var step = OpenHostsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenManageContainersStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenManageContainersStepTests.cs index 051aebc4..e3aad530 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenManageContainersStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenManageContainersStepTests.cs @@ -19,7 +19,7 @@ public class OpenManageContainersStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenManageContainersStep.Metadata.FromXml!(source); + var step = OpenManageContainersStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenManageContainersStep.Metadata.FromXml!(source); + var step = OpenManageContainersStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenManageDataSourcesStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenManageDataSourcesStepTests.cs index e0359472..b04da57f 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenManageDataSourcesStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenManageDataSourcesStepTests.cs @@ -19,7 +19,7 @@ public class OpenManageDataSourcesStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenManageDataSourcesStep.Metadata.FromXml!(source); + var step = OpenManageDataSourcesStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenManageDataSourcesStep.Metadata.FromXml!(source); + var step = OpenManageDataSourcesStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenManageDatabaseStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenManageDatabaseStepTests.cs index d399c669..33b574ac 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenManageDatabaseStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenManageDatabaseStepTests.cs @@ -19,7 +19,7 @@ public class OpenManageDatabaseStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenManageDatabaseStep.Metadata.FromXml!(source); + var step = OpenManageDatabaseStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenManageDatabaseStep.Metadata.FromXml!(source); + var step = OpenManageDatabaseStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenManageLayoutsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenManageLayoutsStepTests.cs index 7d40964d..4ff4e969 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenManageLayoutsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenManageLayoutsStepTests.cs @@ -19,7 +19,7 @@ public class OpenManageLayoutsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenManageLayoutsStep.Metadata.FromXml!(source); + var step = OpenManageLayoutsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenManageLayoutsStep.Metadata.FromXml!(source); + var step = OpenManageLayoutsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenManageThemesStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenManageThemesStepTests.cs index c0bc3ba2..5865ff60 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenManageThemesStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenManageThemesStepTests.cs @@ -19,7 +19,7 @@ public class OpenManageThemesStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenManageThemesStep.Metadata.FromXml!(source); + var step = OpenManageThemesStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenManageThemesStep.Metadata.FromXml!(source); + var step = OpenManageThemesStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenManageValueListsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenManageValueListsStepTests.cs index 834cd7e6..3fbd197e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenManageValueListsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenManageValueListsStepTests.cs @@ -19,7 +19,7 @@ public class OpenManageValueListsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenManageValueListsStep.Metadata.FromXml!(source); + var step = OpenManageValueListsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenManageValueListsStep.Metadata.FromXml!(source); + var step = OpenManageValueListsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenPdfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenPdfStepTests.cs index 55d9d99e..68b25911 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenPdfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenPdfStepTests.cs @@ -19,7 +19,7 @@ public class OpenPdfStepTests public void RoundTrip_CanonicalXml_IsPreserved(string canonicalXml) { var source = XElement.Parse(canonicalXml); - var step = OpenPdfStep.Metadata.FromXml!(source); + var step = OpenPdfStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenRecordRequestStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenRecordRequestStepTests.cs index bbb5b832..1b3b3b37 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenRecordRequestStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenRecordRequestStepTests.cs @@ -19,7 +19,7 @@ public class OpenRecordRequestStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenRecordRequestStep.Metadata.FromXml!(source); + var step = OpenRecordRequestStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenRecordRequestStep.Metadata.FromXml!(source); + var step = OpenRecordRequestStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenScriptWorkspaceStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenScriptWorkspaceStepTests.cs index 893fafad..0825051d 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenScriptWorkspaceStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenScriptWorkspaceStepTests.cs @@ -19,7 +19,7 @@ public class OpenScriptWorkspaceStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenScriptWorkspaceStep.Metadata.FromXml!(source); + var step = OpenScriptWorkspaceStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenScriptWorkspaceStep.Metadata.FromXml!(source); + var step = OpenScriptWorkspaceStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenSettingsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenSettingsStepTests.cs index e50c32bd..ec2ac354 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenSettingsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenSettingsStepTests.cs @@ -19,7 +19,7 @@ public class OpenSettingsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenSettingsStep.Metadata.FromXml!(source); + var step = OpenSettingsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenSettingsStep.Metadata.FromXml!(source); + var step = OpenSettingsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenSharingStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenSharingStepTests.cs index af48ae8b..1ed70929 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenSharingStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenSharingStepTests.cs @@ -19,7 +19,7 @@ public class OpenSharingStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenSharingStep.Metadata.FromXml!(source); + var step = OpenSharingStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenSharingStep.Metadata.FromXml!(source); + var step = OpenSharingStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenTransactionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenTransactionStepTests.cs index ab001830..c962f770 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenTransactionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenTransactionStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -19,14 +20,14 @@ public class OpenTransactionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenTransactionStep.Metadata.FromXml!(source); + var step = OpenTransactionStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = OpenTransactionStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = OpenTransactionStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); @@ -34,7 +35,7 @@ public void Display_RoundTripsThroughFromDisplayParams() var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = OpenTransactionStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(OpenTransactionStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } @@ -46,7 +47,7 @@ public void RestoreElement_IsPartOfCanonicalForm_AndRoundTrips() var withRestore = XElement.Parse(""" """); - var step = OpenTransactionStep.Metadata.FromXml!(withRestore); + var step = OpenTransactionStep.Parse(withRestore); Assert.NotNull(step.ToXml().Element("Restore")); Assert.True(XNode.DeepEquals(withRestore, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenURLStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenURLStepTests.cs index d3b842d1..ce8cc628 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenURLStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenURLStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class OpenURLStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenURLStep.Metadata.FromXml!(source); + var step = OpenURLStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = OpenURLStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = OpenURLStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = OpenURLStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(OpenURLStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/OpenUploadToHostStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/OpenUploadToHostStepTests.cs index 5400883d..aada8866 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/OpenUploadToHostStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/OpenUploadToHostStepTests.cs @@ -19,7 +19,7 @@ public class OpenUploadToHostStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = OpenUploadToHostStep.Metadata.FromXml!(source); + var step = OpenUploadToHostStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = OpenUploadToHostStep.Metadata.FromXml!(source); + var step = OpenUploadToHostStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/PasteStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PasteStepTests.cs index 5339deb7..b50229ae 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PasteStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PasteStepTests.cs @@ -15,7 +15,7 @@ public class PasteStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PasteStep.Metadata.FromXml!(source); + var step = PasteStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PauseResumeScriptStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PauseResumeScriptStepTests.cs index b5d15c7b..10d65aa6 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PauseResumeScriptStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PauseResumeScriptStepTests.cs @@ -14,7 +14,7 @@ public class PauseResumeScriptStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PauseResumeScriptStep.Metadata.FromXml!(source); + var step = PauseResumeScriptStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformAppleScriptStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformAppleScriptStepTests.cs index 13c0e152..db3b6c0e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformAppleScriptStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformAppleScriptStepTests.cs @@ -14,7 +14,7 @@ public class PerformAppleScriptStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformAppleScriptStep.Metadata.FromXml!(source); + var step = PerformAppleScriptStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformFindByNaturalLanguageStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformFindByNaturalLanguageStepTests.cs index 4febef25..569572f9 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformFindByNaturalLanguageStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformFindByNaturalLanguageStepTests.cs @@ -15,7 +15,7 @@ public class PerformFindByNaturalLanguageStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformFindByNaturalLanguageStep.Metadata.FromXml!(source); + var step = PerformFindByNaturalLanguageStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformFindReplaceStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformFindReplaceStepTests.cs index fb968a41..fa67671d 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformFindReplaceStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformFindReplaceStepTests.cs @@ -15,7 +15,7 @@ public class PerformFindReplaceStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformFindReplaceStep.Metadata.FromXml!(source); + var step = PerformFindReplaceStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformFindStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformFindStepTests.cs index d46ff149..1a54446f 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformFindStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformFindStepTests.cs @@ -15,14 +15,14 @@ public class PerformFindStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformFindStep.Metadata.FromXml!(source); + var step = PerformFindStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void MultipleRequests_ExcludeOperationIsPreserved() { - var step = (PerformFindStep)PerformFindStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = PerformFindStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal(2, step.Query!.Requests.Count); Assert.Equal("Include", step.Query.Requests[0].Operation); Assert.Equal("Exclude", step.Query.Requests[1].Operation); diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformJavaScriptInWebViewerStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformJavaScriptInWebViewerStepTests.cs index bfeb4558..517f1550 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformJavaScriptInWebViewerStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformJavaScriptInWebViewerStepTests.cs @@ -15,14 +15,14 @@ public class PerformJavaScriptInWebViewerStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformJavaScriptInWebViewerStep.Metadata.FromXml!(source); + var step = PerformJavaScriptInWebViewerStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Parameters_AreTyped() { - var step = (PerformJavaScriptInWebViewerStep)PerformJavaScriptInWebViewerStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = PerformJavaScriptInWebViewerStep.Parse(XElement.Parse(CanonicalXml)); Assert.Single(step.Parameters); Assert.Equal("$parameter1", step.Parameters[0].Text); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformQuickFindStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformQuickFindStepTests.cs index d9e50df1..3f2ca21e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformQuickFindStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformQuickFindStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class PerformQuickFindStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformQuickFindStep.Metadata.FromXml!(source); + var step = PerformQuickFindStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = PerformQuickFindStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = PerformQuickFindStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = PerformQuickFindStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(PerformQuickFindStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformRagActionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformRagActionStepTests.cs index d9332100..879b2141 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformRagActionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformRagActionStepTests.cs @@ -15,7 +15,7 @@ public class PerformRagActionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformRagActionStep.Metadata.FromXml!(source); + var step = PerformRagActionStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerStepTests.cs index 67a2f591..d886ccae 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerStepTests.cs @@ -15,7 +15,7 @@ public class PerformScriptOnServerStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformScriptOnServerStep.Metadata.FromXml!(source); + var step = PerformScriptOnServerStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerWithCallbackStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerWithCallbackStepTests.cs index 75dc49b8..85145079 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerWithCallbackStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformScriptOnServerWithCallbackStepTests.cs @@ -15,7 +15,7 @@ public class PerformScriptOnServerWithCallbackStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformScriptOnServerWithCallbackStep.Metadata.FromXml!(source); + var step = PerformScriptOnServerWithCallbackStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformSemanticFindStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformSemanticFindStepTests.cs index c9989889..9a601a7b 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformSemanticFindStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformSemanticFindStepTests.cs @@ -15,7 +15,7 @@ public class PerformSemanticFindStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformSemanticFindStep.Metadata.FromXml!(source); + var step = PerformSemanticFindStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PerformSqlQueryByNaturalLanguageStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PerformSqlQueryByNaturalLanguageStepTests.cs index 40a93865..c7713cf6 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PerformSqlQueryByNaturalLanguageStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PerformSqlQueryByNaturalLanguageStepTests.cs @@ -15,7 +15,7 @@ public class PerformSqlQueryByNaturalLanguageStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PerformSqlQueryByNaturalLanguageStep.Metadata.FromXml!(source); + var step = PerformSqlQueryByNaturalLanguageStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PrintSetupStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PrintSetupStepTests.cs index dfdf1a41..872bdd32 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PrintSetupStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PrintSetupStepTests.cs @@ -15,7 +15,7 @@ public class PrintSetupStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PrintSetupStep.Metadata.FromXml!(source); + var step = PrintSetupStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/PrintStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/PrintStepTests.cs index 8f1cd5f1..24cc62f9 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/PrintStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/PrintStepTests.cs @@ -15,7 +15,7 @@ public class PrintStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = PrintStep.Metadata.FromXml!(source); + var step = PrintStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ReLoginStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ReLoginStepTests.cs index 628b4293..07a2d37b 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ReLoginStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ReLoginStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class ReLoginStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ReLoginStep.Metadata.FromXml!(source); + var step = ReLoginStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ReLoginStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ReLoginStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ReLoginStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ReLoginStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ReadFromDataFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ReadFromDataFileStepTests.cs index 605e1b2e..0d231db6 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ReadFromDataFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ReadFromDataFileStepTests.cs @@ -15,7 +15,7 @@ public class ReadFromDataFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ReadFromDataFileStep.Metadata.FromXml!(source); + var step = ReadFromDataFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RecoverFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RecoverFileStepTests.cs index 50c9351b..eb5f64b2 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RecoverFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RecoverFileStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class RecoverFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = RecoverFileStep.Metadata.FromXml!(source); + var step = RecoverFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = RecoverFileStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = RecoverFileStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = RecoverFileStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(RecoverFileStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RefreshObjectStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RefreshObjectStepTests.cs index c9f3adcc..b9576137 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RefreshObjectStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RefreshObjectStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class RefreshObjectStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = RefreshObjectStep.Metadata.FromXml!(source); + var step = RefreshObjectStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = RefreshObjectStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = RefreshObjectStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = RefreshObjectStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(RefreshObjectStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RefreshPortalStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RefreshPortalStepTests.cs index 0daca2b4..6c21890a 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RefreshPortalStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RefreshPortalStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class RefreshPortalStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = RefreshPortalStep.Metadata.FromXml!(source); + var step = RefreshPortalStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = RefreshPortalStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = RefreshPortalStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = RefreshPortalStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(RefreshPortalStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RefreshWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RefreshWindowStepTests.cs index d948e171..ef52dc1a 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RefreshWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RefreshWindowStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,14 +16,14 @@ public class RefreshWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = RefreshWindowStep.Metadata.FromXml!(source); + var step = RefreshWindowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = RefreshWindowStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = RefreshWindowStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); // Extract the tokens inside [ ... ] and feed through FromDisplay. @@ -31,7 +32,7 @@ public void Display_RoundTripsThroughFromDisplayParams() var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = RefreshWindowStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(RefreshWindowStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RelookupFieldContentsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RelookupFieldContentsStepTests.cs index 4e0dc2bf..bb368afc 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RelookupFieldContentsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RelookupFieldContentsStepTests.cs @@ -14,7 +14,7 @@ public class RelookupFieldContentsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = RelookupFieldContentsStep.Metadata.FromXml!(source); + var step = RelookupFieldContentsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RenameFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RenameFileStepTests.cs index fb477c19..03f3697c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RenameFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RenameFileStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class RenameFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = RenameFileStep.Metadata.FromXml!(source); + var step = RenameFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = RenameFileStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = RenameFileStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = RenameFileStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(RenameFileStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ReplaceFieldContentsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ReplaceFieldContentsStepTests.cs index c84bd55d..d394b0b8 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ReplaceFieldContentsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ReplaceFieldContentsStepTests.cs @@ -21,7 +21,7 @@ public class ReplaceFieldContentsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ReplaceFieldContentsStep.Metadata.FromXml!(source); + var step = ReplaceFieldContentsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -30,7 +30,7 @@ public void RestoreElement_IsPreserved() { // Canonical form emits (skill); earlier revisions dropped it. var source = XElement.Parse(WithRestoreXml); - var step = ReplaceFieldContentsStep.Metadata.FromXml!(source); + var step = ReplaceFieldContentsStep.Parse(source); var output = step.ToXml(); Assert.Equal("True", output.Element("Restore")!.Attribute("state")!.Value); } @@ -38,7 +38,7 @@ public void RestoreElement_IsPreserved() [Fact] public void Display_EmitsDialogFieldAndCalculation() { - var step = (ReplaceFieldContentsStep)ReplaceFieldContentsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ReplaceFieldContentsStep.Parse(XElement.Parse(CanonicalXml)); // NoInteract state="True" in the canonical XML ⇒ dialog suppressed ⇒ "With dialog: Off". Assert.Equal("Replace Field Contents [ With dialog: Off ; Customer::id (#3) ; \"value\" ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ResetAccountPasswordStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ResetAccountPasswordStepTests.cs index d6bd5c9e..296c8ea0 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ResetAccountPasswordStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ResetAccountPasswordStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class ResetAccountPasswordStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ResetAccountPasswordStep.Metadata.FromXml!(source); + var step = ResetAccountPasswordStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ResetAccountPasswordStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ResetAccountPasswordStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ResetAccountPasswordStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ResetAccountPasswordStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RevertRecordRequestStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RevertRecordRequestStepTests.cs index cf01c5e5..afbc33f7 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RevertRecordRequestStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RevertRecordRequestStepTests.cs @@ -16,7 +16,7 @@ public class RevertRecordRequestStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = RevertRecordRequestStep.Metadata.FromXml!(source); + var step = RevertRecordRequestStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = RevertRecordRequestStep.Metadata.FromXml!(source); + var step = RevertRecordRequestStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "Off" // (invertedHr: XML True displays as Off). - var stepTrue = ((RevertRecordRequestStep)RevertRecordRequestStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (RevertRecordRequestStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Revert Record/Request [ With dialog: Off ]", stepTrue.ToDisplayLine()); - var stepFalse = ((RevertRecordRequestStep)RevertRecordRequestStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (RevertRecordRequestStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Revert Record/Request [ With dialog: On ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/RevertTransactionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/RevertTransactionStepTests.cs index 180b31f8..475a8673 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/RevertTransactionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/RevertTransactionStepTests.cs @@ -14,7 +14,7 @@ public class RevertTransactionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = RevertTransactionStep.Metadata.FromXml!(source); + var step = RevertTransactionStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsAddOnPackageStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsAddOnPackageStepTests.cs index e176356b..b6f7fad1 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsAddOnPackageStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsAddOnPackageStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SaveACopyAsAddOnPackageStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SaveACopyAsAddOnPackageStep.Metadata.FromXml!(source); + var step = SaveACopyAsAddOnPackageStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SaveACopyAsAddOnPackageStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SaveACopyAsAddOnPackageStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SaveACopyAsAddOnPackageStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SaveACopyAsAddOnPackageStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsStepTests.cs index 27fc0d33..3b70f05e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SaveACopyAsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SaveACopyAsStep.Metadata.FromXml!(source); + var step = SaveACopyAsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SaveACopyAsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SaveACopyAsStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SaveACopyAsStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SaveACopyAsStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsXMLStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsXMLStepTests.cs index 0318ba04..6c54d045 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsXMLStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SaveACopyAsXMLStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -17,21 +18,21 @@ public class SaveACopyAsXMLStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SaveACopyAsXMLStep.Metadata.FromXml!(source); + var step = SaveACopyAsXMLStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SaveACopyAsXMLStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SaveACopyAsXMLStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SaveACopyAsXMLStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SaveACopyAsXMLStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsExcelStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsExcelStepTests.cs index 30f541d1..4328a22a 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsExcelStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsExcelStepTests.cs @@ -18,7 +18,7 @@ public class SaveRecordsAsExcelStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SaveRecordsAsExcelStep.Metadata.FromXml!(source); + var step = SaveRecordsAsExcelStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsJsonlStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsJsonlStepTests.cs index cc33cf76..58461b62 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsJsonlStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsJsonlStepTests.cs @@ -15,7 +15,7 @@ public class SaveRecordsAsJsonlStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SaveRecordsAsJsonlStep.Metadata.FromXml!(source); + var step = SaveRecordsAsJsonlStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsPdfStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsPdfStepTests.cs index c72eda91..af12dd01 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsPdfStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsPdfStepTests.cs @@ -15,7 +15,7 @@ public class SaveRecordsAsPdfStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SaveRecordsAsPdfStep.Metadata.FromXml!(source); + var step = SaveRecordsAsPdfStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsSnapshotLinkStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsSnapshotLinkStepTests.cs index 3e8c27fb..9c5556b8 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsSnapshotLinkStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SaveRecordsAsSnapshotLinkStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SaveRecordsAsSnapshotLinkStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SaveRecordsAsSnapshotLinkStep.Metadata.FromXml!(source); + var step = SaveRecordsAsSnapshotLinkStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SaveRecordsAsSnapshotLinkStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SaveRecordsAsSnapshotLinkStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SaveRecordsAsSnapshotLinkStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SaveRecordsAsSnapshotLinkStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ScrollWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ScrollWindowStepTests.cs index 26df0e12..c7962b90 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ScrollWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ScrollWindowStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class ScrollWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ScrollWindowStep.Metadata.FromXml!(source); + var step = ScrollWindowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = ScrollWindowStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ScrollWindowStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Scroll Window [ Direction: Home ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = ScrollWindowStep.Metadata.FromDisplay!(true, new[] { "Direction: Home" }); + var step = StepDisplayFactory.TryCreate(ScrollWindowStep.XmlName, true, new[] { "Direction: Home" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SelectAllStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SelectAllStepTests.cs index 5ca1a0de..df6590c1 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SelectAllStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SelectAllStepTests.cs @@ -19,7 +19,7 @@ public class SelectAllStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SelectAllStep.Metadata.FromXml!(source); + var step = SelectAllStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = SelectAllStep.Metadata.FromXml!(source); + var step = SelectAllStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/SelectDictionariesStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SelectDictionariesStepTests.cs index 61cf74c9..f9a7b650 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SelectDictionariesStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SelectDictionariesStepTests.cs @@ -19,7 +19,7 @@ public class SelectDictionariesStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SelectDictionariesStep.Metadata.FromXml!(source); + var step = SelectDictionariesStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = SelectDictionariesStep.Metadata.FromXml!(source); + var step = SelectDictionariesStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/SelectWindowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SelectWindowStepTests.cs index 59b3b0e5..e0a8317b 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SelectWindowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SelectWindowStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SelectWindowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SelectWindowStep.Metadata.FromXml!(source); + var step = SelectWindowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SelectWindowStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SelectWindowStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SelectWindowStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SelectWindowStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SendDDEExecuteStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SendDDEExecuteStepTests.cs index 30fa6835..d8425131 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SendDDEExecuteStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SendDDEExecuteStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class SendDDEExecuteStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SendDDEExecuteStep.Metadata.FromXml!(source); + var step = SendDDEExecuteStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = SendDDEExecuteStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SendDDEExecuteStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Send DDE Execute [ File ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = SendDDEExecuteStep.Metadata.FromDisplay!(true, new[] { "File" }); + var step = StepDisplayFactory.TryCreate(SendDDEExecuteStep.XmlName, true, new[] { "File" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SendEventStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SendEventStepTests.cs index 01146353..00afbd9a 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SendEventStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SendEventStepTests.cs @@ -17,7 +17,7 @@ public class SendEventStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SendEventStep.Metadata.FromXml!(source); + var step = SendEventStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SendMailStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SendMailStepTests.cs index d7312fb4..e8200005 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SendMailStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SendMailStepTests.cs @@ -15,14 +15,14 @@ public class SendMailStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SendMailStep.Metadata.FromXml!(source); + var step = SendMailStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void HotFields_ReadThroughBag() { - var step = (SendMailStep)SendMailStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SendMailStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("$to", step.To!.Text); Assert.Equal("$subject", step.Subject!.Text); Assert.Equal("$message", step.Message!.Text); @@ -32,7 +32,7 @@ public void HotFields_ReadThroughBag() public void RoundTrip_PreservesUseFoundSetAttribute() { var source = XElement.Parse(CanonicalXml); - var step = SendMailStep.Metadata.FromXml!(source); + var step = SendMailStep.Parse(source); var output = step.ToXml(); Assert.Equal("False", output.Element("To")!.Attribute("UseFoundSet")!.Value); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetAICallLoggingStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetAICallLoggingStepTests.cs index 824854b1..14cc16ca 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetAICallLoggingStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetAICallLoggingStepTests.cs @@ -19,14 +19,14 @@ public class SetAICallLoggingStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetAICallLoggingStep.Metadata.FromXml!(source); + var step = SetAICallLoggingStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void FlagElements_PresenceMeansOn() { - var step = (SetAICallLoggingStep)SetAICallLoggingStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SetAICallLoggingStep.Parse(XElement.Parse(CanonicalXml)); Assert.True(step.Logging); Assert.True(step.Verbose); Assert.True(step.TruncateMessages); @@ -35,7 +35,7 @@ public void FlagElements_PresenceMeansOn() [Fact] public void FlagElements_AbsenceMeansOff() { - var step = (SetAICallLoggingStep)SetAICallLoggingStep.Metadata.FromXml!(XElement.Parse(OffXml)); + var step = SetAICallLoggingStep.Parse(XElement.Parse(OffXml)); Assert.False(step.Logging); Assert.False(step.Verbose); Assert.False(step.TruncateMessages); @@ -44,7 +44,7 @@ public void FlagElements_AbsenceMeansOff() [Fact] public void Display_EmitsAllFlags() { - var step = (SetAICallLoggingStep)SetAICallLoggingStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SetAICallLoggingStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Set AI Call Logging [ On ; Filename: \"ai_log.txt\" ; Verbose: On ; Truncate Messages: On ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetDataFilePositionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetDataFilePositionStepTests.cs index d611d1ca..ac17e900 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetDataFilePositionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetDataFilePositionStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SetDataFilePositionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetDataFilePositionStep.Metadata.FromXml!(source); + var step = SetDataFilePositionStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetDataFilePositionStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetDataFilePositionStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetDataFilePositionStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetDataFilePositionStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetDictionaryStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetDictionaryStepTests.cs index 66adbcad..52b3c497 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetDictionaryStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetDictionaryStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SetDictionaryStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetDictionaryStep.Metadata.FromXml!(source); + var step = SetDictionaryStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetDictionaryStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetDictionaryStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetDictionaryStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetDictionaryStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetErrorCaptureStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetErrorCaptureStepTests.cs index 96bd615b..7b34c230 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetErrorCaptureStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetErrorCaptureStepTests.cs @@ -5,6 +5,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -42,7 +43,7 @@ private static XElement StepFrom(string snippet) => public void RoundTrip_StateTrue() { var source = StepFrom(StateTrueSnippet); - var step = (SetErrorCaptureStep)SetErrorCaptureStep.Metadata.FromXml!(source); + var step = SetErrorCaptureStep.Parse(source); Assert.True(step.CaptureErrors); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -52,7 +53,7 @@ public void RoundTrip_StateTrue() public void RoundTrip_StateFalse() { var source = StepFrom(StateFalseSnippet); - var step = (SetErrorCaptureStep)SetErrorCaptureStep.Metadata.FromXml!(source); + var step = SetErrorCaptureStep.Parse(source); Assert.False(step.CaptureErrors); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -70,10 +71,10 @@ public void Display_EmitsOnOff() [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step = (SetErrorCaptureStep)SetErrorCaptureStep.Metadata.FromDisplay!(true, new[] { "On" }); + var step = (SetErrorCaptureStep)StepDisplayFactory.TryCreate(SetErrorCaptureStep.XmlName, true, new[] { "On" })!; Assert.True(step.CaptureErrors); - var off = (SetErrorCaptureStep)SetErrorCaptureStep.Metadata.FromDisplay!(true, new[] { "Off" }); + var off = (SetErrorCaptureStep)StepDisplayFactory.TryCreate(SetErrorCaptureStep.XmlName, true, new[] { "Off" })!; Assert.False(off.CaptureErrors); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetErrorLoggingStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetErrorLoggingStepTests.cs index 8318f60c..81b70cbb 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetErrorLoggingStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetErrorLoggingStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SetErrorLoggingStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetErrorLoggingStep.Metadata.FromXml!(source); + var step = SetErrorLoggingStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetErrorLoggingStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetErrorLoggingStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetErrorLoggingStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetErrorLoggingStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetFieldByNameStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetFieldByNameStepTests.cs index 1486fab1..3ea6488c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetFieldByNameStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetFieldByNameStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SetFieldByNameStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetFieldByNameStep.Metadata.FromXml!(source); + var step = SetFieldByNameStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetFieldByNameStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetFieldByNameStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetFieldByNameStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetFieldByNameStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetLayoutObjectAnimationStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetLayoutObjectAnimationStepTests.cs index 1762dafc..da6fb95e 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetLayoutObjectAnimationStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetLayoutObjectAnimationStepTests.cs @@ -16,7 +16,7 @@ public class SetLayoutObjectAnimationStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = SetLayoutObjectAnimationStep.Metadata.FromXml!(source); + var step = SetLayoutObjectAnimationStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = SetLayoutObjectAnimationStep.Metadata.FromXml!(source); + var step = SetLayoutObjectAnimationStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "On" // (boolean: XML True displays as On). - var stepTrue = ((SetLayoutObjectAnimationStep)SetLayoutObjectAnimationStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (SetLayoutObjectAnimationStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Set Layout Object Animation [ Animation: On ]", stepTrue.ToDisplayLine()); - var stepFalse = ((SetLayoutObjectAnimationStep)SetLayoutObjectAnimationStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (SetLayoutObjectAnimationStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Set Layout Object Animation [ Animation: Off ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetMultiUserStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetMultiUserStepTests.cs index 73c15877..54117125 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetMultiUserStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetMultiUserStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class SetMultiUserStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetMultiUserStep.Metadata.FromXml!(source); + var step = SetMultiUserStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = SetMultiUserStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SetMultiUserStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Set Multi-User [ Network access: On ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = SetMultiUserStep.Metadata.FromDisplay!(true, new[] { "Network access: On" }); + var step = StepDisplayFactory.TryCreate(SetMultiUserStep.XmlName, true, new[] { "Network access: On" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetNextSerialValueStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetNextSerialValueStepTests.cs index 8c7e1852..6417d20c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetNextSerialValueStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetNextSerialValueStepTests.cs @@ -15,14 +15,14 @@ public class SetNextSerialValueStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetNextSerialValueStep.Metadata.FromXml!(source); + var step = SetNextSerialValueStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsFieldAndNextValue() { - var step = (SetNextSerialValueStep)SetNextSerialValueStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SetNextSerialValueStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Set Next Serial Value [ Customer::id (#3) ; Max ( id ) + 1 ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetRevertTransactionOnErrorStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetRevertTransactionOnErrorStepTests.cs index a147520a..05bea83c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetRevertTransactionOnErrorStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetRevertTransactionOnErrorStepTests.cs @@ -16,7 +16,7 @@ public class SetRevertTransactionOnErrorStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = SetRevertTransactionOnErrorStep.Metadata.FromXml!(source); + var step = SetRevertTransactionOnErrorStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = SetRevertTransactionOnErrorStep.Metadata.FromXml!(source); + var step = SetRevertTransactionOnErrorStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "On" // (boolean: XML True displays as On). - var stepTrue = ((SetRevertTransactionOnErrorStep)SetRevertTransactionOnErrorStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (SetRevertTransactionOnErrorStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Set Revert Transaction on Error [ Revert on error: On ]", stepTrue.ToDisplayLine()); - var stepFalse = ((SetRevertTransactionOnErrorStep)SetRevertTransactionOnErrorStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (SetRevertTransactionOnErrorStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Set Revert Transaction on Error [ Revert on error: Off ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetSelectionStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetSelectionStepTests.cs index 99f263d1..4eee4952 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetSelectionStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetSelectionStepTests.cs @@ -15,14 +15,14 @@ public class SetSelectionStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetSelectionStep.Metadata.FromXml!(source); + var step = SetSelectionStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsFieldAndPositions() { - var step = (SetSelectionStep)SetSelectionStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SetSelectionStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Set Selection [ Notes::body (#1) ; Start Position: 1 ; End Position: 10 ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetSessionIdentifierStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetSessionIdentifierStepTests.cs index 4660574f..10441efb 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetSessionIdentifierStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetSessionIdentifierStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SetSessionIdentifierStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetSessionIdentifierStep.Metadata.FromXml!(source); + var step = SetSessionIdentifierStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetSessionIdentifierStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetSessionIdentifierStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetSessionIdentifierStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetSessionIdentifierStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetUseSystemFormatsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetUseSystemFormatsStepTests.cs index 21b6be95..e1e54f73 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetUseSystemFormatsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetUseSystemFormatsStepTests.cs @@ -16,7 +16,7 @@ public class SetUseSystemFormatsStepTests public void RoundTrip_True_IsPreserved() { var source = XElement.Parse(TrueStateXml); - var step = SetUseSystemFormatsStep.Metadata.FromXml!(source); + var step = SetUseSystemFormatsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -24,7 +24,7 @@ public void RoundTrip_True_IsPreserved() public void RoundTrip_False_IsPreserved() { var source = XElement.Parse(FalseStateXml); - var step = SetUseSystemFormatsStep.Metadata.FromXml!(source); + var step = SetUseSystemFormatsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -33,10 +33,10 @@ public void Display_EmitsExpectedFormat() { // Setting underlying prop=true renders as "On" // (boolean: XML True displays as On). - var stepTrue = ((SetUseSystemFormatsStep)SetUseSystemFormatsStep.Metadata.FromXml!(XElement.Parse(TrueStateXml))); + var stepTrue = (SetUseSystemFormatsStep.Parse(XElement.Parse(TrueStateXml))); Assert.Equal("Set Use System Formats [ Use system formats: On ]", stepTrue.ToDisplayLine()); - var stepFalse = ((SetUseSystemFormatsStep)SetUseSystemFormatsStep.Metadata.FromXml!(XElement.Parse(FalseStateXml))); + var stepFalse = (SetUseSystemFormatsStep.Parse(XElement.Parse(FalseStateXml))); Assert.Equal("Set Use System Formats [ Use system formats: Off ]", stepFalse.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetWebViewerStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetWebViewerStepTests.cs index 99783dc0..62e608af 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetWebViewerStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetWebViewerStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -16,21 +17,21 @@ public class SetWebViewerStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetWebViewerStep.Metadata.FromXml!(source); + var step = SetWebViewerStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetWebViewerStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetWebViewerStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetWebViewerStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetWebViewerStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetWindowTitleStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetWindowTitleStepTests.cs index 6e81e495..4fad840c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetWindowTitleStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetWindowTitleStepTests.cs @@ -3,6 +3,7 @@ using SharpFM.Model.Scripting.Registry; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -14,21 +15,21 @@ public class SetWindowTitleStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetWindowTitleStep.Metadata.FromXml!(source); + var step = SetWindowTitleStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetWindowTitleStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetWindowTitleStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); var open = display.IndexOf('['); var close = display.LastIndexOf(']'); var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetWindowTitleStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetWindowTitleStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SetZoomLevelStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SetZoomLevelStepTests.cs index a461611b..359473e0 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SetZoomLevelStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SetZoomLevelStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,14 +16,14 @@ public class SetZoomLevelStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SetZoomLevelStep.Metadata.FromXml!(source); + var step = SetZoomLevelStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = SetZoomLevelStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = SetZoomLevelStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); // Extract the tokens inside [ ... ] and feed through FromDisplay. @@ -31,7 +32,7 @@ public void Display_RoundTripsThroughFromDisplayParams() var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = SetZoomLevelStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(SetZoomLevelStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ShowAllRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ShowAllRecordsStepTests.cs index 0d204a76..af474f1c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ShowAllRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ShowAllRecordsStepTests.cs @@ -19,7 +19,7 @@ public class ShowAllRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ShowAllRecordsStep.Metadata.FromXml!(source); + var step = ShowAllRecordsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = ShowAllRecordsStep.Metadata.FromXml!(source); + var step = ShowAllRecordsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/ShowHideMenubarStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ShowHideMenubarStepTests.cs index 376c66a7..b56f9b89 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ShowHideMenubarStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ShowHideMenubarStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,14 +16,14 @@ public class ShowHideMenubarStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ShowHideMenubarStep.Metadata.FromXml!(source); + var step = ShowHideMenubarStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ShowHideMenubarStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ShowHideMenubarStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); // Extract the tokens inside [ ... ] and feed through FromDisplay. @@ -31,7 +32,7 @@ public void Display_RoundTripsThroughFromDisplayParams() var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ShowHideMenubarStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ShowHideMenubarStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ShowHideTextRulerStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ShowHideTextRulerStepTests.cs index 6bd36c52..37e0fef4 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ShowHideTextRulerStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ShowHideTextRulerStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class ShowHideTextRulerStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ShowHideTextRulerStep.Metadata.FromXml!(source); + var step = ShowHideTextRulerStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = ShowHideTextRulerStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ShowHideTextRulerStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Show/Hide Text Ruler [ Action: Show ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = ShowHideTextRulerStep.Metadata.FromDisplay!(true, new[] { "Action: Show" }); + var step = StepDisplayFactory.TryCreate(ShowHideTextRulerStep.XmlName, true, new[] { "Action: Show" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ShowHideToolbarsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ShowHideToolbarsStepTests.cs index 394ed7fc..6db39d03 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ShowHideToolbarsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ShowHideToolbarsStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,14 +16,14 @@ public class ShowHideToolbarsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ShowHideToolbarsStep.Metadata.FromXml!(source); + var step = ShowHideToolbarsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_RoundTripsThroughFromDisplayParams() { - var step1 = ShowHideToolbarsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step1 = ShowHideToolbarsStep.Parse(XElement.Parse(CanonicalXml)); var display = step1.ToDisplayLine(); // Extract the tokens inside [ ... ] and feed through FromDisplay. @@ -31,7 +32,7 @@ public void Display_RoundTripsThroughFromDisplayParams() var inner = display.Substring(open + 1, close - open - 1).Trim(); var tokens = inner.Split(';', System.StringSplitOptions.TrimEntries); - var step2 = ShowHideToolbarsStep.Metadata.FromDisplay!(true, tokens); + var step2 = StepDisplayFactory.TryCreate(ShowHideToolbarsStep.XmlName, true, tokens)!; Assert.True(XNode.DeepEquals(step1.ToXml(), step2.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/ShowOmittedOnlyStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ShowOmittedOnlyStepTests.cs index af514272..5d909440 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ShowOmittedOnlyStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ShowOmittedOnlyStepTests.cs @@ -19,7 +19,7 @@ public class ShowOmittedOnlyStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ShowOmittedOnlyStep.Metadata.FromXml!(source); + var step = ShowOmittedOnlyStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = ShowOmittedOnlyStep.Metadata.FromXml!(source); + var step = ShowOmittedOnlyStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/SortRecordsByFieldStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SortRecordsByFieldStepTests.cs index 427cc042..e4716c3c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SortRecordsByFieldStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SortRecordsByFieldStepTests.cs @@ -15,14 +15,14 @@ public class SortRecordsByFieldStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SortRecordsByFieldStep.Metadata.FromXml!(source); + var step = SortRecordsByFieldStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsOrderAndField() { - var step = (SortRecordsByFieldStep)SortRecordsByFieldStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SortRecordsByFieldStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Sort Records by Field [ Descending ; Customer::name (#2) ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SortRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SortRecordsStepTests.cs index ff2bc06e..327fba8c 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SortRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SortRecordsStepTests.cs @@ -15,14 +15,14 @@ public class SortRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SortRecordsStep.Metadata.FromXml!(source); + var step = SortRecordsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void SortList_IsTyped() { - var step = (SortRecordsStep)SortRecordsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SortRecordsStep.Parse(XElement.Parse(CanonicalXml)); Assert.NotNull(step.Sort); Assert.Single(step.Sort!.Fields); Assert.Equal("Ascending", step.Sort.Fields[0].Type); diff --git a/tests/SharpFM.Tests/Scripting/Steps/SpeakStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SpeakStepTests.cs index 8eb42746..b6b74187 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SpeakStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SpeakStepTests.cs @@ -19,7 +19,7 @@ public class SpeakStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SpeakStep.Metadata.FromXml!(source); + var step = SpeakStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } @@ -27,14 +27,14 @@ public void RoundTrip_CanonicalXml_IsPreserved() public void RoundTrip_WithoutOptions_IsPreserved() { var source = XElement.Parse(WithoutOptionsXml); - var step = SpeakStep.Metadata.FromXml!(source); + var step = SpeakStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsTextOnly() { - var step = (SpeakStep)SpeakStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = SpeakStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Speak [ \"text_to_speak\" ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/SpellingOptionsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/SpellingOptionsStepTests.cs index e3d00915..b9fe4291 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/SpellingOptionsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/SpellingOptionsStepTests.cs @@ -19,7 +19,7 @@ public class SpellingOptionsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = SpellingOptionsStep.Metadata.FromXml!(source); + var step = SpellingOptionsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = SpellingOptionsStep.Metadata.FromXml!(source); + var step = SpellingOptionsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/TriggerClarisConnectFlowStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/TriggerClarisConnectFlowStepTests.cs index f9b7a462..2ef17e8f 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/TriggerClarisConnectFlowStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/TriggerClarisConnectFlowStepTests.cs @@ -16,7 +16,7 @@ public class TriggerClarisConnectFlowStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = TriggerClarisConnectFlowStep.Metadata.FromXml!(source); + var step = TriggerClarisConnectFlowStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/TruncateTableStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/TruncateTableStepTests.cs index 28e74af1..8884527b 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/TruncateTableStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/TruncateTableStepTests.cs @@ -15,14 +15,14 @@ public class TruncateTableStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = TruncateTableStep.Metadata.FromXml!(source); + var step = TruncateTableStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsDialogAndTable() { - var step = (TruncateTableStep)TruncateTableStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = TruncateTableStep.Parse(XElement.Parse(CanonicalXml)); // NoInteract state="True" in the canonical XML ⇒ dialog suppressed ⇒ "With dialog: Off". Assert.Equal("Truncate Table [ With dialog: Off ; Table: Clients ]", step.ToDisplayLine()); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/UndoRedoStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/UndoRedoStepTests.cs index fb4f450f..0f4a9980 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/UndoRedoStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/UndoRedoStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class UndoRedoStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = UndoRedoStep.Metadata.FromXml!(source); + var step = UndoRedoStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = UndoRedoStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = UndoRedoStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("Undo/Redo [ Action: Undo ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = UndoRedoStep.Metadata.FromDisplay!(true, new[] { "Action: Undo" }); + var step = StepDisplayFactory.TryCreate(UndoRedoStep.XmlName, true, new[] { "Action: Undo" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/UnsortRecordsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/UnsortRecordsStepTests.cs index 8a4456eb..20cb0fe1 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/UnsortRecordsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/UnsortRecordsStepTests.cs @@ -19,7 +19,7 @@ public class UnsortRecordsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = UnsortRecordsStep.Metadata.FromXml!(source); + var step = UnsortRecordsStep.Parse(source); Assert.IsType(step); Assert.True(XNode.DeepEquals(source, step.ToXml())); @@ -36,7 +36,7 @@ public void Display_EmitsBareName() public void Disabled_RoundTrips() { var source = XElement.Parse(""""""); - var step = UnsortRecordsStep.Metadata.FromXml!(source); + var step = UnsortRecordsStep.Parse(source); Assert.False(step.Enabled); Assert.True(XNode.DeepEquals(source, step.ToXml())); diff --git a/tests/SharpFM.Tests/Scripting/Steps/ViewAsStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/ViewAsStepTests.cs index 8c5b01e2..29e573da 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/ViewAsStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/ViewAsStepTests.cs @@ -4,6 +4,7 @@ using SharpFM.Model.Scripting.Shapes; using SharpFM.Model.Scripting.Steps; using Xunit; +using SharpFM.Model.Scripting.Serialization; namespace SharpFM.Tests.Scripting.Steps; @@ -15,21 +16,21 @@ public class ViewAsStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = ViewAsStep.Metadata.FromXml!(source); + var step = ViewAsStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } [Fact] public void Display_EmitsHrMappedValue() { - var step = ViewAsStep.Metadata.FromXml!(XElement.Parse(CanonicalXml)); + var step = ViewAsStep.Parse(XElement.Parse(CanonicalXml)); Assert.Equal("View As [ View: Cycle ]", step.ToDisplayLine()); } [Fact] public void FromDisplay_ParsesHrValueBack() { - var step = ViewAsStep.Metadata.FromDisplay!(true, new[] { "View: Cycle" }); + var step = StepDisplayFactory.TryCreate(ViewAsStep.XmlName, true, new[] { "View: Cycle" })!; Assert.True(XNode.DeepEquals(XElement.Parse(CanonicalXml), step.ToXml())); } diff --git a/tests/SharpFM.Tests/Scripting/Steps/WriteToDataFileStepTests.cs b/tests/SharpFM.Tests/Scripting/Steps/WriteToDataFileStepTests.cs index 6c0a6df4..4a8eaf2b 100644 --- a/tests/SharpFM.Tests/Scripting/Steps/WriteToDataFileStepTests.cs +++ b/tests/SharpFM.Tests/Scripting/Steps/WriteToDataFileStepTests.cs @@ -15,7 +15,7 @@ public class WriteToDataFileStepTests public void RoundTrip_CanonicalXml_IsPreserved() { var source = XElement.Parse(CanonicalXml); - var step = WriteToDataFileStep.Metadata.FromXml!(source); + var step = WriteToDataFileStep.Parse(source); Assert.True(XNode.DeepEquals(source, step.ToXml())); } From 2bc6b3f890a3922869598ecf7bf03a4e6d999415 Mon Sep 17 00:00:00 2001 From: Nate Bross Date: Sun, 12 Jul 2026 13:38:22 -0500 Subject: [PATCH 5/5] docs: rename FromDisplayParams references to PopulateFromDisplay Advanced FileMaker Scripting Syntax reference still named the deleted static method; update to match the virtual PopulateFromDisplay override. --- docs/advanced-filemaker-scripting-syntax.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/advanced-filemaker-scripting-syntax.md b/docs/advanced-filemaker-scripting-syntax.md index 8d1ba935..1353d46d 100644 --- a/docs/advanced-filemaker-scripting-syntax.md +++ b/docs/advanced-filemaker-scripting-syntax.md @@ -20,7 +20,7 @@ ever reads our own extended output. ## Core invariant -> `ToDisplayLine()` and `FromDisplayParams()` together are lossless for +> `ToDisplayLine()` and `PopulateFromDisplay()` together are lossless for > every piece of state the POCO carries. XML state that is dropped is > dropped because it carries no information, not because the display > can't express it. @@ -177,6 +177,6 @@ per-step extension. Covered here for completeness. - `ScriptLineParser.ParseLine` (`src/SharpFM.Model/Scripting/ScriptLineParser.cs`) — disabled-step prefix and bracket tokenization. -- `PerformScriptStep.FromDisplayParams`, - `GoToLayoutStep.FromDisplayParams` — Form 1 regex parsers for named +- `PerformScriptStep.PopulateFromDisplay`, + `GoToLayoutStep.PopulateFromDisplay` — Form 1 regex parsers for named refs with `(#id)` suffixes.