private static string FormatMessage(string message, WorkflowSchemeParser parser) { return parser.ReadDone ? message : string.Format("[{0}, стр {1}, поз {2}] {3}", parser.FileName, parser.LineNumber, parser.LinePosition, message); }
protected internal override WorkflowScheme CreateInstance( string workflowSchemeUri, IEnumerable<KeyValuePair<string, XmlReader>> customXmlSchemas) { CodeContract.Requires(!string.IsNullOrEmpty(workflowSchemeUri)); var parser = new WorkflowSchemeParser(); parser.Parse(workflowSchemeUri, customXmlSchemas); return parser.Scheme; }
private bool IsFileAlreadyIncluded(string fileUri, WorkflowSchemeParser startSearchIncludesParser) { if (_workflowSchemaUri.Equals(fileUri)) throw new WorkflowSchemeParserException(string.Format( "Обнаружена циклическая ссылка при подключении файла {0}", fileUri), startSearchIncludesParser); return _includeFileUriList.Contains(fileUri) || (_parentParser != null && _parentParser.IsFileAlreadyIncluded(fileUri, startSearchIncludesParser)); }
private void ReadInclude() { var refUri = ReadAttributes(new[] { ATT_REF })[ATT_REF]; if (refUri == null) throw new WorkflowSchemeParserException("Не задан Uri подключаемого файла с описанием схемы", this); if (IsFileAlreadyIncluded(refUri, this)) return; var parser = new WorkflowSchemeParser {_parentParser = this}; parser.Parse(refUri, _xmlReaderSettings); foreach (var activity in parser.Scheme.Activities.Values) { AddActivityToScheme(activity); } foreach (var paramsBinding in parser._parametersBindings.Values) { if (_parametersBindings.ContainsKey(paramsBinding.Name)) { var existingParamsBinding = _parametersBindings[paramsBinding.Name]; foreach (var param in paramsBinding.Parameters) { if (existingParamsBinding.Parameters.Contains(param)) throw new WorkflowSchemeParserException(string.Format( "В файле {0} (или в подключенных в него файлах) содержится " + "связывание значения параметра {1} для действия {2}, " + "которое уже объявлено ранее", parser.FileName, param.Name, paramsBinding.Name), this); existingParamsBinding.Parameters.Add(param); } } else { _parametersBindings.Add(paramsBinding); } } _includeFileUriList.Add(refUri); foreach (var fileUri in parser._includeFileUriList) { _includeFileUriList.Add(fileUri); } }
public WorkflowSchemeParserException(string message, Exception innerEx, WorkflowSchemeParser parser) : base(FormatMessage(message, parser), innerEx) { }