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;
 }
Beispiel #3
0
 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));
 }
Beispiel #4
0
 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)
 {
 }