public RepositoryHandler(Uri repositoryUri, ResolverClientOptions options = null, ILogger logger = null) { _logger = logger ?? NullLogger.Instance; ClientOptions = options ?? new ResolverClientOptions(); RepositoryUri = repositoryUri; _logger.LogTrace(StandardStrings.ClientInitWithFetcher(repositoryUri.Scheme)); if (repositoryUri.Scheme == "file") { RepositoryType = RepositoryTypeCategory.LocalUri; _modelFetcher = new LocalModelFetcher(_logger, ClientOptions); } else { RepositoryType = RepositoryTypeCategory.RemoteUri; _modelFetcher = new RemoteModelFetcher(_logger, ClientOptions); } }
public static string DtmiToQualifiedPath(string dtmi, string basePath, bool fromExpanded = false) { string dtmiPath = DtmiToPath(dtmi); if (dtmiPath == null) { throw new ArgumentException(StandardStrings.InvalidDtmiFormat(dtmi)); } if (!basePath.EndsWith("/")) { basePath += "/"; } string fullyQualifiedPath = $"{basePath}{dtmiPath}"; if (fromExpanded) { fullyQualifiedPath = fullyQualifiedPath.Replace(".json", ".expanded.json"); } return(fullyQualifiedPath); }
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)) { string invalidArgMsg = StandardStrings.InvalidDtmiFormat(dtmi); _logger.LogError(invalidArgMsg); 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)) { _logger.LogTrace(StandardStrings.SkippingPreProcessedDtmi(targetDtmi)); continue; } _logger.LogTrace(StandardStrings.ProcessingDtmi(targetDtmi)); FetchResult result = await this.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) { _logger.LogTrace(StandardStrings.DiscoveredDependencies(dependencies)); } foreach (string dep in dependencies) { toProcessModels.Enqueue(dep); } } string parsedDtmi = metadata.Id; if (!parsedDtmi.Equals(targetDtmi, StringComparison.Ordinal)) { string formatErrorMsg = StandardStrings.IncorrectDtmiCasing(targetDtmi, parsedDtmi); throw new ResolverException(targetDtmi, formatErrorMsg, new FormatException(formatErrorMsg)); } processedModels.Add(targetDtmi, result.Definition); } return(processedModels); }
public ResolverException(string dtmi) : base(StandardStrings.GenericResolverError(dtmi)) { }
public ResolverException(string dtmi, string message, Exception innerException) : base($"{StandardStrings.GenericResolverError(dtmi)}{message}", innerException) { }