Example #1
0
        /// <summary>
        /// Validates well-formedness of the Xaml
        /// </summary>
        /// <exception cref="System.IO.FileNotFoundException">If the <code>inputFile</code> was not found</exception>
        private void ValidateXaml()
        {
            XmlReader     xmlReader  = null;
            XamlXmlReader xamlReader = null;

            try
            {
                log.Debug("Validating XAML.");

                xmlReader  = XmlReader.Create(inputFile);
                xamlReader = new XamlXmlReader(xmlReader);
                ActivityBuilder activity = XamlServices.Load(ActivityXamlServices.CreateBuilderReader(xamlReader)) as ActivityBuilder;

                log.Info("XAML successfully validated.");
            }
            catch (XamlException)
            {
                // Only notify user
                log.Warn("XAML could not be validated. This may also be caused by Custom Activities or WorkflowServices.");
            }
            finally
            {
                // Cleanup
                if (xmlReader != null)
                {
                    xmlReader.Close();
                }
                if (xamlReader != null)
                {
                    xamlReader.Close();
                }
            }
        }
Example #2
0
 /// <summary>
 /// Dispose object.
 /// </summary>
 public void Dispose()
 {
     if (_xamlReader != null)
     {
         _xamlReader.Close();
         _xamlReader = null;
     }
 }
      public ActivityBuilder LoadActivityBuilder(string fileName)
      {
          ActivityBuilder builder;

          using (var xamlReader = new XamlXmlReader(fileName))
          {
              var builderReader = ActivityXamlServices.CreateBuilderReader(xamlReader);
              builder = (ActivityBuilder)XamlServices.Load(builderReader);
              xamlReader.Close();
          }
          return(builder);
      }
Example #4
0
        private bool ParseInput()
        {
            XamlXmlReader reader = null;

            try {
                try {
                    reader = new XamlXmlReader(InputFileName.ItemSpec, new XamlXmlReaderSettings {
                        ProvideLineInfo = true
                    });
                } catch (FileNotFoundException ex) {
                    LogError(1001, ex.Message);
                    return(false);
                }

                bool classNameExpected = false, classModifierExpected = false;
                bool lambdaBodyExpected = false, importedNamespacesExpected = false;
                int  nestingLevel = 0, lambdaNestingLevel = -1;
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                    case XamlNodeType.GetObject:
                        ++nestingLevel;
                        break;

                    case XamlNodeType.StartObject:
                        ++nestingLevel;
                        if (nestingLevel == 1)
                        {
                            classNameLineNumber = reader.LineNumber;
                        }
                        if ((reader.Type.Name == "Lambda" || reader.Type.Name == "LambdaExtension") && IsLambdaNamespace(reader.Type.PreferredXamlNamespace))
                        {
                            lambdaNestingLevel = nestingLevel;
                        }
                        break;

                    case XamlNodeType.EndObject:
                        --nestingLevel;
                        if (nestingLevel < lambdaNestingLevel)
                        {
                            lambdaNestingLevel = -1;
                        }
                        break;

                    case XamlNodeType.StartMember:
                        if (nestingLevel == 1)
                        {
                            if (reader.Member.PreferredXamlNamespace == XamlLanguage.Xaml2006Namespace)
                            {
                                switch (reader.Member.Name)
                                {
                                case "Class": {
                                    classNameExpected = true;
                                } break;

                                case "ClassModifier": {
                                    classModifierExpected = true;
                                } break;
                                }
                            }
                            else if (reader.Member.DeclaringType != null && IsLambdaNamespace(reader.Member.DeclaringType.PreferredXamlNamespace))
                            {
                                if (reader.Member.Name == "ImportedNamespaces" && reader.Member.DeclaringType.Name == "LambdaProperties")
                                {
                                    importedNamespacesExpected = true;
                                }
                            }
                        }
                        else if (nestingLevel == lambdaNestingLevel)
                        {
                            if (reader.Member == XamlLanguage.UnknownContent || reader.Member == XamlLanguage.PositionalParameters || reader.Member.Name == "Lambda")
                            {
                                lambdaBodyExpected = true;
                            }
                        }
                        break;

                    case XamlNodeType.EndMember:
                        classNameExpected = lambdaBodyExpected = importedNamespacesExpected = false;
                        break;

                    case XamlNodeType.Value:
                        if (classNameExpected)
                        {
                            classNameExpected   = false;
                            className           = (string)reader.Value;
                            classNameLineNumber = reader.LineNumber;
                        }
                        else if (classModifierExpected)
                        {
                            classModifierExpected   = false;
                            classModifier           = (string)reader.Value;
                            classModifierLineNumber = reader.LineNumber;
                        }
                        else if (importedNamespacesExpected)
                        {
                            importedNamespaces.Clear();
                            importedNamespaces.AddRange(((string)reader.Value).Split(" \f\n\r\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
                            importedNamespacesLineNumber = reader.LineNumber;
                        }
                        else if (lambdaBodyExpected)
                        {
                            lambdas.Add(new LambdaInfo {
                                Code = (string)reader.Value, LineNumber = reader.LineNumber
                            });
                        }
                        break;
                    }
                }
            } catch (IOException ex) {
                LogError(1002, ex.Message);
                return(false);
            } catch (XmlException ex) {
                LogError(1003, ex.Message);
                return(false);
            } catch (XamlException ex) {
                LogError(1004, ex.Message);
                return(false);
            } finally {
                if (reader != null)
                {
                    reader.Close();
                }
            }

            return(true);
        }