Exemplo n.º 1
0
        /// <summary>
        /// Parse the <paramref name="dmnDefinition">string</paramref> with DMN Model XML definition based on <paramref name="dmnVersion">DMN standard version</paramref>.
        /// </summary>
        /// <param name="dmnDefinition">DMN Model XML definition</param>
        /// <param name="dmnVersion">DMN standard version to be used for parsing. Version 1.1 (<see cref="DmnVersionEnum.V1_1"/> is used as default if the version is not provided.</param>
        /// <returns>Parsed DMN Model</returns>
        /// <exception cref="DmnParserException">Missing DMN Model definition (<paramref name="dmnDefinition"/> is null or empty)</exception>
        /// <exception cref="DmnParserException">Can't parse DMN definition</exception>
        public static DmnModel ParseString(string dmnDefinition, DmnVersionEnum dmnVersion = DmnVersionEnum.V1_1)
        {
            dmnDefinition = dmnDefinition?.Trim();
            if (string.IsNullOrWhiteSpace(dmnDefinition))
            {
                throw Logger.Fatal <DmnParserException>("Missing DMN Model definition");
            }

            DmnModel def;

            // ReSharper disable once AssignNullToNotNullAttribute
            using (var rdr = new StringReader(dmnDefinition))
            {
                try
                {
                    Logger.Info($"Parsing DMN definition from given string...");
                    if (Logger.IsTraceEnabled)
                    {
                        Logger.Trace(dmnDefinition);
                    }

                    switch (dmnVersion)
                    {
                    case DmnVersionEnum.V1_1:
                        def = (DmnModel)DmnDefinitionsSerializer.Deserialize(rdr);
                        break;

                    case DmnVersionEnum.V1_3:
                        def = (DmnModel)DmnDefinitionsSerializer13.Deserialize(rdr);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(dmnVersion), dmnVersion, null);
                    }

                    Logger.Info($"Parsed DMN definition from given string");
                }
                catch (Exception ex)
                {
                    throw Logger.Fatal <DmnParserException>($"Can't parse definition from given string: {ex.Message}", ex);
                }
            }

            return(def);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Parse the <paramref name="filePath">file</paramref> with DMN Model XML definition based on <paramref name="dmnVersion">DMN standard version</paramref>.
        /// </summary>
        /// <param name="filePath">Path to the file to be parsed</param>
        /// <param name="dmnVersion">DMN standard version to be used for parsing. Version 1.1 (<see cref="DmnVersionEnum.V1_1"/> is used as default if the version is not provided.</param>
        /// <returns> Parsed DMN Model</returns>
        /// <exception cref="DmnParserException">Missing file path (<paramref name="filePath"/> is null or empty)</exception>
        /// <exception cref="DmnParserException">File doesn't exist</exception>
        /// <exception cref="DmnParserException">Can't parse file</exception>
        public static DmnModel Parse(string filePath, DmnVersionEnum dmnVersion = DmnVersionEnum.V1_1)
        {
            if (string.IsNullOrWhiteSpace(filePath))
            {
                throw Logger.Fatal <DmnParserException>($"{nameof(filePath)} is null or empty");
            }
            if (!File.Exists(filePath))
            {
                throw Logger.Fatal <DmnParserException>($"File {filePath} doesn't exist");
            }

            DmnModel def;

            // ReSharper disable once AssignNullToNotNullAttribute
            using (var rdr = new StreamReader(filePath))
            {
                try
                {
                    Logger.Info($"Parsing DMN file {filePath}...");

                    switch (dmnVersion)
                    {
                    case DmnVersionEnum.V1_1:
                        def = (DmnModel)DmnDefinitionsSerializer.Deserialize(rdr);
                        break;

                    case DmnVersionEnum.V1_3:
                        def = (DmnModel)DmnDefinitionsSerializer13.Deserialize(rdr);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(dmnVersion), dmnVersion, null);
                    }

                    Logger.Info($"Parsed DMN file {filePath}");
                }
                catch (Exception ex)
                {
                    throw Logger.Fatal <DmnParserException>($"Can't parse file {filePath}: {ex.Message}", ex);
                }
            }

            return(def);
        }