/// <summary> /// Adds the PatchFiles action to the sequence table if it does not already exist. /// </summary> /// <param name="table">The sequence table to check or modify.</param> /// <param name="mainTransform">The primary authoring transform.</param> /// <param name="pairedTransform">The secondary patch transform.</param> /// <param name="mainFileRow">The file row that contains information about the patched file.</param> private void AddPatchFilesActionToSequenceTable(SequenceTable table, Output mainTransform, Output pairedTransform, Row mainFileRow) { // Find/add PatchFiles action (also determine sequence for it). // Search mainTransform first, then pairedTransform (pairedTransform overrides). bool hasPatchFilesAction = false; int seqInstallFiles = 0; int seqDuplicateFiles = 0; string tableName = table.ToString(); TestSequenceTableForPatchFilesAction( mainTransform.Tables[tableName], ref hasPatchFilesAction, ref seqInstallFiles, ref seqDuplicateFiles); TestSequenceTableForPatchFilesAction( pairedTransform.Tables[tableName], ref hasPatchFilesAction, ref seqInstallFiles, ref seqDuplicateFiles); if (!hasPatchFilesAction) { Table iesTable = pairedTransform.EnsureTable(this.TableDefinitions[tableName]); if (0 == iesTable.Rows.Count) { iesTable.Operation = TableOperation.Add; } Row patchAction = iesTable.CreateRow(null); WixActionRow wixPatchAction = WindowsInstallerStandardInternal.GetStandardActionRows()[table, "PatchFiles"]; int sequence = wixPatchAction.Sequence; // Test for default sequence value's appropriateness if (seqInstallFiles >= sequence || (0 != seqDuplicateFiles && seqDuplicateFiles <= sequence)) { if (0 != seqDuplicateFiles) { if (seqDuplicateFiles < seqInstallFiles) { throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action)); } else { sequence = (seqDuplicateFiles + seqInstallFiles) / 2; if (seqInstallFiles == sequence || seqDuplicateFiles == sequence) { throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action)); } } } else { sequence = seqInstallFiles + 1; } } patchAction[0] = wixPatchAction.Action; patchAction[1] = wixPatchAction.Condition; patchAction[2] = sequence; patchAction.Operation = RowOperation.Add; } }
/// <summary> /// Instantiates a standard ActionRow. /// </summary> /// <param name="sequenceTable">The sequence table of the standard action.</param> /// <param name="action">The name of the standard action.</param> /// <param name="condition">The condition of the standard action.</param> /// <param name="sequence">The suggested sequence number of the standard action.</param> private WixActionRow(SequenceTable sequenceTable, string action, string condition, int sequence) : base(null, Installer.GetTableDefinitions()["WixAction"]) { this.SequenceTable = sequenceTable; this.Action = action; this.Condition = condition; this.Sequence = sequence; this.Overridable = true; // all standard actions are overridable by default }
private IEnumerable <WixActionSymbol> GetActions(SequenceTable sequence, string[] actionNames) { foreach (var action in WindowsInstallerStandard.StandardActions()) { if (action.SequenceTable == sequence && actionNames.Contains(action.Action)) { yield return(action); } } }
private RelativeActions GetAllRelativeActionsForSequenceType(SequenceTable sequenceType, WixActionSymbol action) { var relativeActions = new RelativeActions(); if (this.RelativeActionsForActions.TryGetValue(action.Id.Id, out var actionRelatives)) { this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.PreviousActions, relativeActions.PreviousActions); this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.NextActions, relativeActions.NextActions); } return(relativeActions); }
/// <summary> /// Get all the actions scheduled after this one in a particular sequence table. /// </summary> /// <param name="sequenceTable">The sequence table.</param> /// <param name="allNextActionRows">A RowCollection which will contain all the next actions.</param> internal void GetAllNextActionRows(SequenceTable sequenceTable, RowCollection allNextActionRows) { if (null != this.nextActionRows) { foreach (WixActionRow actionRow in this.nextActionRows) { if (sequenceTable == actionRow.SequenceTable) { actionRow.GetAllPreviousActionRows(sequenceTable, allNextActionRows); allNextActionRows.Add(actionRow); actionRow.GetAllNextActionRows(sequenceTable, allNextActionRows); } } } }
/// <summary> /// Get all the actions scheduled after this one in a particular sequence table. /// </summary> /// <param name="sequenceTable">The sequence table.</param> /// <param name="allNextActionRows">A RowCollection which will contain all the next actions.</param> public void GetAllNextActionRows(SequenceTable sequenceTable, IList <WixActionRow> allNextActionRows) { if (null != this.nextActionRows) { foreach (WixActionRow actionRow in this.nextActionRows) { if (sequenceTable == actionRow.SequenceTable) { actionRow.GetAllPreviousActionRows(sequenceTable, allNextActionRows); allNextActionRows.Add(actionRow); actionRow.GetAllNextActionRows(sequenceTable, allNextActionRows); } } } }
private void RecurseRelativeActionsForSequenceType(SequenceTable sequenceType, List <WixActionSymbol> actions, List <WixActionSymbol> visitedActions) { foreach (var action in actions.Where(a => a.SequenceTable == sequenceType)) { if (this.RelativeActionsForActions.TryGetValue(action.Id.Id, out var actionRelatives)) { this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.PreviousActions, visitedActions); } visitedActions.Add(action); if (actionRelatives != null) { this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.NextActions, visitedActions); } } }
private void SchedulePropertyExeAction(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier name, string source, string cmdline, CustomActionSymbol caTemplate, string condition, string beforeAction, string afterAction) { const SequenceTable sequence = SequenceTable.InstallExecuteSequence; caTemplate.SourceType = CustomActionSourceType.Property; caTemplate.Source = source; caTemplate.TargetType = CustomActionTargetType.Exe; caTemplate.Target = cmdline; section.AddSymbol(caTemplate); section.AddSymbol(new WixActionSymbol(sourceLineNumbers, new Identifier(name.Access, sequence, name.Id)) { SequenceTable = SequenceTable.InstallExecuteSequence, Action = name.Id, Condition = condition, // no explicit sequence Before = beforeAction, After = afterAction, Overridable = false, }); if (null != beforeAction) { if (WindowsInstallerStandard.IsStandardAction(beforeAction)) { this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), beforeAction); } else { this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, beforeAction); } } if (null != afterAction) { if (WindowsInstallerStandard.IsStandardAction(afterAction)) { this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), afterAction); } else { this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, afterAction); } } }
public static SequenceTable CreateSequenceTable(string numberSequenceCode, string scopeValue, int quantityOfNumbers, int next, decimal interval, global::System.DateTimeOffset dateTime, int largest, int smallest) { SequenceTable sequenceTable = new SequenceTable(); sequenceTable.NumberSequenceCode = numberSequenceCode; sequenceTable.ScopeValue = scopeValue; sequenceTable.QuantityOfNumbers = quantityOfNumbers; sequenceTable.Next = next; sequenceTable.Interval = interval; sequenceTable.DateTime = dateTime; sequenceTable.Largest = largest; sequenceTable.Smallest = smallest; return(sequenceTable); }
/// <summary> /// Adds the PatchFiles action to the sequence table if it does not already exist. /// </summary> /// <param name="table">The sequence table to check or modify.</param> /// <param name="mainTransform">The primary authoring transform.</param> /// <param name="pairedTransform">The secondary patch transform.</param> /// <param name="mainFileRow">The file row that contains information about the patched file.</param> private void AddPatchFilesActionToSequenceTable(SequenceTable table, WindowsInstallerData mainTransform, WindowsInstallerData pairedTransform, Row mainFileRow) { var tableName = table.ToString(); // Find/add PatchFiles action (also determine sequence for it). // Search mainTransform first, then pairedTransform (pairedTransform overrides). var hasPatchFilesAction = false; var installFilesSequence = 0; var duplicateFilesSequence = 0; TestSequenceTableForPatchFilesAction( mainTransform.Tables[tableName], ref hasPatchFilesAction, ref installFilesSequence, ref duplicateFilesSequence); TestSequenceTableForPatchFilesAction( pairedTransform.Tables[tableName], ref hasPatchFilesAction, ref installFilesSequence, ref duplicateFilesSequence); if (!hasPatchFilesAction) { WindowsInstallerStandard.TryGetStandardAction(tableName, "PatchFiles", out var patchFilesActionSymbol); var sequence = patchFilesActionSymbol.Sequence; // Test for default sequence value's appropriateness if (installFilesSequence >= sequence || (0 != duplicateFilesSequence && duplicateFilesSequence <= sequence)) { if (0 != duplicateFilesSequence) { if (duplicateFilesSequence < installFilesSequence) { throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action)); } else { sequence = (duplicateFilesSequence + installFilesSequence) / 2; if (installFilesSequence == sequence || duplicateFilesSequence == sequence) { throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action)); } } } else { sequence = installFilesSequence + 1; } } var sequenceTable = pairedTransform.EnsureTable(this.TableDefinitions[tableName]); if (0 == sequenceTable.Rows.Count) { sequenceTable.Operation = TableOperation.Add; } var patchAction = sequenceTable.CreateRow(null); patchAction[0] = patchFilesActionSymbol.Action; patchAction[1] = patchFilesActionSymbol.Condition; patchAction[2] = sequence; patchAction.Operation = RowOperation.Add; } }
/// <summary> /// Gets the SequenceTable enum as the Windows Installer table name. /// </summary> public static string WindowsInstallerTableName(this SequenceTable sequence) => (sequence == SequenceTable.AdvertiseExecuteSequence) ? "AdvtExecuteSequence" : sequence.ToString();
public SequenceTable GetSequenceTable(uint i) { SequenceTable st = null; if (i < SequenceCount) { st = new SequenceTable(m_offsetMultipleSubst + GetSequenceOffset(i), m_bufTable); } return st; }
/// <summary> /// Parses ActionRows from the Xml reader. /// </summary> /// <param name="reader">Xml reader that contains serialized ActionRows.</param> /// <returns>The parsed ActionRows.</returns> internal static WixActionRow[] Parse(XmlReader reader) { Debug.Assert("action" == reader.LocalName); string id = null; string condition = null; bool empty = reader.IsEmptyElement; int sequence = int.MinValue; int sequenceCount = 0; SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length]; while (reader.MoveToNextAttribute()) { switch (reader.Name) { case "name": id = reader.Value; break; case "AdminExecuteSequence": if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence; ++sequenceCount; } break; case "AdminUISequence": if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.AdminUISequence; ++sequenceCount; } break; case "AdvtExecuteSequence": if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence; ++sequenceCount; } break; case "condition": condition = reader.Value; break; case "InstallExecuteSequence": if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence; ++sequenceCount; } break; case "InstallUISequence": if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.InstallUISequence; ++sequenceCount; } break; case "sequence": sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture); break; default: if (!reader.NamespaceURI.StartsWith("http://www.w3.org/", StringComparison.Ordinal)) { throw new WixException(WixErrors.UnexpectedAttribute(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name)); } break; } } if (null == id) { throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "name")); } if (int.MinValue == sequence) { throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "sequence")); } else if (1 > sequence) { throw new WixException(WixErrors.IntegralValueOutOfRange(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "sequence", sequence, 1, int.MaxValue)); } if (0 == sequenceCount) { throw new WixException(WixErrors.ExpectedAttributes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "AdminExecuteSequence", "AdminUISequence", "AdvtExecuteSequence", "InstallExecuteSequence", "InstallUISequence")); } if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent()) { throw new WixException(WixErrors.UnexpectedContentNode(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.NodeType.ToString())); } // create the actions WixActionRow[] actionRows = new WixActionRow[sequenceCount]; for (int i = 0; i < sequenceCount; i++) { WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence); actionRows[i] = actionRow; } return actionRows; }
/// <summary> /// Get an ActionRow by its sequence table and action name. /// </summary> /// <param name="sequenceTable">The sequence table of the ActionRow.</param> /// <param name="action">The action name of the ActionRow.</param> public WixActionRow this[SequenceTable sequenceTable, string action] { get { return((WixActionRow)this.collection[GetKey(sequenceTable, action)]); } }
/// <summary> /// Get all the actions scheduled before this one in a particular sequence table. /// </summary> /// <param name="sequenceTable">The sequence table.</param> /// <param name="allPreviousActionRows">A RowCollection which will contain all the previous actions.</param> internal void GetAllPreviousActionRows(SequenceTable sequenceTable, RowCollection allPreviousActionRows) { if (null != this.previousActionRows) { foreach (WixActionRow actionRow in this.previousActionRows) { if (sequenceTable == actionRow.SequenceTable) { actionRow.GetAllPreviousActionRows(sequenceTable, allPreviousActionRows); allPreviousActionRows.Add(actionRow); actionRow.GetAllNextActionRows(sequenceTable, allPreviousActionRows); } } } }
/// <summary> /// Get an ActionRow by its sequence table and action name. /// </summary> /// <param name="sequenceTable">The sequence table of the ActionRow.</param> /// <param name="action">The action name of the ActionRow.</param> public WixActionRow this[SequenceTable sequenceTable, string action] { get { return (WixActionRow)this.collection[GetKey(sequenceTable, action)]; } }
/// <summary> /// Remove an ActionRow from the collection. /// </summary> /// <param name="sequenceTable">The sequence table of the ActionRow.</param> /// <param name="action">The action name of the ActionRow.</param> public void Remove(SequenceTable sequenceTable, string action) { this.collection.Remove(GetKey(sequenceTable, action)); }
public WixActionSymbol ScheduleActionSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, AccessModifier access, SequenceTable sequence, string actionName, string condition, string beforeAction, string afterAction, bool overridable = false) { var actionId = new Identifier(access, sequence, actionName); var actionSymbol = section.AddSymbol(new WixActionSymbol(sourceLineNumbers, actionId) { SequenceTable = sequence, Action = actionName, Condition = condition, Before = beforeAction, After = afterAction, Overridable = overridable, }); if (null != beforeAction) { if (WindowsInstallerStandard.IsStandardAction(beforeAction)) { this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), beforeAction); } else { this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, beforeAction); } } if (null != afterAction) { if (WindowsInstallerStandard.IsStandardAction(afterAction)) { this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), afterAction); } else { this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, afterAction); } } return(actionSymbol); }
/// <summary> /// Adds the PatchFiles action to the sequence table if it does not already exist. /// </summary> /// <param name="table">The sequence table to check or modify.</param> /// <param name="mainTransform">The primary authoring transform.</param> /// <param name="pairedTransform">The secondary patch transform.</param> /// <param name="mainFileRow">The file row that contains information about the patched file.</param> private void AddPatchFilesActionToSequenceTable(SequenceTable table, Output mainTransform, Output pairedTransform, Row mainFileRow) { // Find/add PatchFiles action (also determine sequence for it). // Search mainTransform first, then pairedTransform (pairedTransform overrides). bool hasPatchFilesAction = false; int seqInstallFiles = 0; int seqDuplicateFiles = 0; string tableName = table.ToString(); TestSequenceTableForPatchFilesAction( mainTransform.Tables[tableName], ref hasPatchFilesAction, ref seqInstallFiles, ref seqDuplicateFiles); TestSequenceTableForPatchFilesAction( pairedTransform.Tables[tableName], ref hasPatchFilesAction, ref seqInstallFiles, ref seqDuplicateFiles); if (!hasPatchFilesAction) { Table iesTable = pairedTransform.EnsureTable(this.core.TableDefinitions[tableName]); if (0 == iesTable.Rows.Count) { iesTable.Operation = TableOperation.Add; } Row patchAction = iesTable.CreateRow(null); WixActionRow wixPatchAction = Installer.GetStandardActions()[table, "PatchFiles"]; int sequence = wixPatchAction.Sequence; // Test for default sequence value's appropriateness if (seqInstallFiles >= sequence || (0 != seqDuplicateFiles && seqDuplicateFiles <= sequence)) { if (0 != seqDuplicateFiles) { if (seqDuplicateFiles < seqInstallFiles) { throw new WixException(WixErrors.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action)); } else { sequence = (seqDuplicateFiles + seqInstallFiles) / 2; if (seqInstallFiles == sequence || seqDuplicateFiles == sequence) { throw new WixException(WixErrors.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action)); } } } else { sequence = seqInstallFiles + 1; } } patchAction[0] = wixPatchAction.Action; patchAction[1] = wixPatchAction.Condition; patchAction[2] = sequence; patchAction.Operation = RowOperation.Add; } }
/// <summary> /// Determines if the collection contains an ActionRow with a specific sequence table and name. /// </summary> /// <param name="sequenceTable">The sequence table of the ActionRow.</param> /// <param name="action">The action name of the ActionRow.</param> /// <returns>true if the ActionRow was found; false otherwise.</returns> public bool Contains(SequenceTable sequenceTable, string action) { return this.collection.Contains(GetKey(sequenceTable, action)); }
/// <summary> /// Parses ActionRows from the Xml reader. /// </summary> /// <param name="reader">Xml reader that contains serialized ActionRows.</param> /// <returns>The parsed ActionRows.</returns> internal static WixActionRow[] ParseActions(XmlReader reader) { Debug.Assert("action" == reader.LocalName); string id = null; string condition = null; bool empty = reader.IsEmptyElement; int sequence = int.MinValue; int sequenceCount = 0; SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length]; while (reader.MoveToNextAttribute()) { switch (reader.Name) { case "name": id = reader.Value; break; case "AdminExecuteSequence": if (reader.Value.Equals("yes")) { sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence; ++sequenceCount; } break; case "AdminUISequence": if (reader.Value.Equals("yes")) { sequenceTables[sequenceCount] = SequenceTable.AdminUISequence; ++sequenceCount; } break; case "AdvtExecuteSequence": if (reader.Value.Equals("yes")) { sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence; ++sequenceCount; } break; case "condition": condition = reader.Value; break; case "InstallExecuteSequence": if (reader.Value.Equals("yes")) { sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence; ++sequenceCount; } break; case "InstallUISequence": if (reader.Value.Equals("yes")) { sequenceTables[sequenceCount] = SequenceTable.InstallUISequence; ++sequenceCount; } break; case "sequence": sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture); break; } } if (null == id) { throw new XmlException(); } if (int.MinValue == sequence) { throw new XmlException(); } else if (1 > sequence) { throw new XmlException(); } if (0 == sequenceCount) { throw new XmlException(); } if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent()) { throw new XmlException(); } // create the actions WixActionRow[] actionRows = new WixActionRow[sequenceCount]; for (int i = 0; i < sequenceCount; i++) { //WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence); //actionRows[i] = actionRow; throw new NotImplementedException(); } return(actionRows); }
/// <summary> /// Get the key for storing an ActionRow. /// </summary> /// <param name="sequenceTable">The sequence table of the ActionRow.</param> /// <param name="action">The action name of the ActionRow.</param> /// <returns>The string key.</returns> private static string GetKey(SequenceTable sequenceTable, string action) { return GetKey(sequenceTable.ToString(), action); }
/// <summary> /// Determines if the collection contains an ActionRow with a specific sequence table and name. /// </summary> /// <param name="sequenceTable">The sequence table of the ActionRow.</param> /// <param name="action">The action name of the ActionRow.</param> /// <returns>true if the ActionRow was found; false otherwise.</returns> public bool Contains(SequenceTable sequenceTable, string action) { return(this.collection.Contains(GetKey(sequenceTable, action))); }
/// <summary> /// Parses ActionRows from the Xml reader. /// </summary> /// <param name="reader">Xml reader that contains serialized ActionRows.</param> /// <returns>The parsed ActionRows.</returns> internal static WixActionRow[] Parse(XmlReader reader) { Debug.Assert("action" == reader.LocalName); string id = null; string condition = null; bool empty = reader.IsEmptyElement; int sequence = int.MinValue; int sequenceCount = 0; SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length]; while (reader.MoveToNextAttribute()) { switch (reader.Name) { case "name": id = reader.Value; break; case "AdminExecuteSequence": if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence; ++sequenceCount; } break; case "AdminUISequence": if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.AdminUISequence; ++sequenceCount; } break; case "AdvtExecuteSequence": if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence; ++sequenceCount; } break; case "condition": condition = reader.Value; break; case "InstallExecuteSequence": if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence; ++sequenceCount; } break; case "InstallUISequence": if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value)) { sequenceTables[sequenceCount] = SequenceTable.InstallUISequence; ++sequenceCount; } break; case "sequence": sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture); break; default: if (!reader.NamespaceURI.StartsWith("http://www.w3.org/", StringComparison.Ordinal)) { throw new WixException(WixErrors.UnexpectedAttribute(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name)); } break; } } if (null == id) { throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "name")); } if (int.MinValue == sequence) { throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "sequence")); } else if (1 > sequence) { throw new WixException(WixErrors.IntegralValueOutOfRange(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "sequence", sequence, 1, int.MaxValue)); } if (0 == sequenceCount) { throw new WixException(WixErrors.ExpectedAttributes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "AdminExecuteSequence", "AdminUISequence", "AdvtExecuteSequence", "InstallExecuteSequence", "InstallUISequence")); } if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent()) { throw new WixException(WixErrors.UnexpectedContentNode(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.NodeType.ToString())); } // create the actions WixActionRow[] actionRows = new WixActionRow[sequenceCount]; for (int i = 0; i < sequenceCount; i++) { WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence); actionRows[i] = actionRow; } return(actionRows); }
/// <summary> /// Get the key for storing an ActionRow. /// </summary> /// <param name="sequenceTable">The sequence table of the ActionRow.</param> /// <param name="action">The action name of the ActionRow.</param> /// <returns>The string key.</returns> private static string GetKey(SequenceTable sequenceTable, string action) { return(GetKey(sequenceTable.ToString(), action)); }
/// <summary> /// Статический метод для создания экземпляров класса на основе данных импорта /// </summary> /// <param name="table">Объект содержащий данные импорта</param> /// <returns>Объект таблицы</returns> public static TableSequence CreateInstance(SequenceTable table) { TableSequence objectTable; switch (table.typeOfTable) { case 0x00000001: objectTable = new DelayTableSequence( ); break; case 0x0000000D: objectTable = new LoopTableSequence( ); break; case 0x00004154: case 0x00004132: objectTable = new AttenuationTableSequence( ); break; case 0x00004143: objectTable = new AcquisitionTableSequence( ); break; case 0x00004741: objectTable = new RotationAngleTableSequence( ); break; case 0x00004752: case 0x00004732: objectTable = new GradientAmplitudeTableSequence( ); break; case 0x00004F31: objectTable = new FrequencyTableSequence( ); break; case 0x0000524D: case 0x00005232: objectTable = new ModulationTableSequence( ); break; case 0x00005048: case 0x00005032: case 0x00005053: objectTable = new PhaseTableSequence( ); break; case 0x00005348: objectTable = new GradientWaveformTableSequence( ); break; default: objectTable = new TableSequence( ); break; } objectTable.Name = table.name; objectTable.TypeTable = objectTable.GetTypeTable(table.dimension); objectTable.Data = new DataTable( ); objectTable.Data.Auto = table.isAuto; objectTable.Data.Steps = table.stepsPer360Cycle.ToString(); objectTable.Data.TimePoint = table.timePoint; objectTable.Text = table.entry; if (objectTable._delayAuto != null) { objectTable._delayAuto.UseDwellTime = table.useIncrementList; objectTable._delayAuto.Increment = table.incrementValue; objectTable._delayAuto.Every = table.incrementOperation == "+ Add" ? 0 : 1; objectTable._delayAuto.Add = table.incrementOperation == "Every pass" ? 0 : 1; objectTable._delayAuto.Table = objectTable; } if (objectTable._generateAuto != null) { objectTable._generateAuto.Start = table.start; objectTable._generateAuto.Increment = table.increment; objectTable._generateAuto.Number = table.number; objectTable._generateAuto.Table = objectTable; } return(objectTable); }