Example #1
0
        private static Queue <string> PrepareWork(IEnumerable <string> dtmis)
        {
            var toProcessModels = new Queue <string>();

            foreach (string dtmi in dtmis)
            {
                if (!DtmiConventions.IsValidDtmi(dtmi))
                {
                    ModelsRepositoryEventSource.Instance.InvalidDtmiInput(dtmi);

                    string invalidArgMsg =
                        $"{string.Format(CultureInfo.InvariantCulture, StandardStrings.GenericGetModelsError, dtmi)} " +
                        string.Format(CultureInfo.InvariantCulture, StandardStrings.InvalidDtmiFormat, dtmi);

                    throw new ArgumentException(invalidArgMsg);
                }

                toProcessModels.Enqueue(dtmi);
            }

            return(toProcessModels);
        }
Example #2
0
 /// <summary>
 /// Evaluates whether an input <paramref name="dtmi"/> is valid.
 /// </summary>
 public bool IsValidDtmi(string dtmi) => DtmiConventions.IsDtmi(dtmi);
Example #3
0
        public async Task <IDictionary <string, string> > ProcessAsync(IEnumerable <string> dtmis, CancellationToken cancellationToken)
        {
            Dictionary <string, string> processedModels = new Dictionary <string, string>();
            Queue <string> toProcessModels = new Queue <string>();

            foreach (string dtmi in dtmis)
            {
                if (!DtmiConventions.IsDtmi(dtmi))
                {
                    ResolverEventSource.Shared.InvalidDtmiInput(dtmi);
                    string invalidArgMsg = string.Format(StandardStrings.InvalidDtmiFormat, dtmi);
                    throw new ResolverException(dtmi, invalidArgMsg, new ArgumentException(invalidArgMsg));
                }

                toProcessModels.Enqueue(dtmi);
            }

            while (toProcessModels.Count != 0 && !cancellationToken.IsCancellationRequested)
            {
                string targetDtmi = toProcessModels.Dequeue();
                if (processedModels.ContainsKey(targetDtmi))
                {
                    ResolverEventSource.Shared.SkippingPreprocessedDtmi(targetDtmi);
                    continue;
                }
                ResolverEventSource.Shared.ProcessingDtmi(targetDtmi);

                FetchResult result = await FetchAsync(targetDtmi, cancellationToken);

                if (result.FromExpanded)
                {
                    Dictionary <string, string> expanded = await new ModelQuery(result.Definition).ListToDictAsync();
                    foreach (KeyValuePair <string, string> kvp in expanded)
                    {
                        if (!processedModels.ContainsKey(kvp.Key))
                        {
                            processedModels.Add(kvp.Key, kvp.Value);
                        }
                    }

                    continue;
                }

                ModelMetadata metadata = new ModelQuery(result.Definition).GetMetadata();

                if (ClientOptions.DependencyResolution >= DependencyResolutionOption.Enabled)
                {
                    IList <string> dependencies = metadata.Dependencies;

                    if (dependencies.Count > 0)
                    {
                        ResolverEventSource.Shared.DiscoveredDependencies(string.Join("\", \"", dependencies));
                    }

                    foreach (string dep in dependencies)
                    {
                        toProcessModels.Enqueue(dep);
                    }
                }

                string parsedDtmi = metadata.Id;
                if (!parsedDtmi.Equals(targetDtmi, StringComparison.Ordinal))
                {
                    ResolverEventSource.Shared.IncorrectDtmiCasing(targetDtmi, parsedDtmi);
                    string formatErrorMsg = string.Format(StandardStrings.IncorrectDtmiCasing, targetDtmi, parsedDtmi);
                    throw new ResolverException(targetDtmi, formatErrorMsg, new FormatException(formatErrorMsg));
                }

                processedModels.Add(targetDtmi, result.Definition);
            }

            return(processedModels);
        }