/// <summary> /// Gets called when a Uri cannot be resolved /// </summary> /// <param name="e">The event data</param> protected virtual void OnUnresolvedModelElement(UnresolvedModelElementEventArgs e) { if (UnresolvedModelElement != null) { UnresolvedModelElement(this, e); } }
/// <summary> /// Gets called when a Uri cannot be resolved /// </summary> /// <param name="e">The event data</param> protected virtual void OnUnresolvedModelElement(UnresolvedModelElementEventArgs e) { if (UnresolvedModelElement != null) UnresolvedModelElement(this, e); }
/// <summary> /// Resolves the given Uri and returns the model element /// </summary> /// <param name="uri">The Uri where to look for the model element</param> /// <param name="hintPath">The path where the model can be found</param> /// <param name="loadOnDemand">A boolean flag indicating whether the uri should be attempted /// to load, if the model is not already registered with the repository</param> /// <returns>A model element at the given Uri or null if none can be found</returns> public IModelElement Resolve(Uri uri, string hintPath, bool loadOnDemand = true) { if (uri == null) throw new ArgumentNullException("uri"); Model model; Uri modelUri; Func<Stream> streamCreator; if (!models.TryGetValue(uri, out model)) { var parentResolved = Parent.Resolve(uri, false); if (parentResolved != null) return parentResolved; if (loadOnDemand) { if (hintPath == null) { var locator = Locators.Where(l => l.CanLocate(uri)).FirstOrDefault(); if (locator == null) { if (parentResolved != null) return parentResolved; var e = new UnresolvedModelElementEventArgs(uri); OnUnresolvedModelElement(e); return e.ModelElement; } modelUri = locator.GetRepositoryUri(uri); streamCreator = () => locator.Open(modelUri); } else { modelUri = uri; streamCreator = () => File.OpenRead(hintPath); } if (!models.TryGetValue(modelUri, out model)) { using (var stream = streamCreator()) { model = Serializer.Deserialize(stream, modelUri, this, true); if (model.RootElements.Count == 1) { var ns = model.RootElements[0] as INamespace; if (ns != null) { model.ModelUri = ns.Uri; if (!models.ContainsKey(ns.Uri)) { models.Add(ns.Uri, model); } } } } } } else { return null; } } if (uri.IsAbsoluteUri) { var element = model.Resolve(uri.Fragment); if (element == null) { var e = new UnresolvedModelElementEventArgs(uri); OnUnresolvedModelElement(e); element = e.ModelElement; } return element; } else { return model; } }
/// <summary> /// Resolves the given Uri and returns the model element /// </summary> /// <param name="uri">The Uri where to look for the model element</param> /// <param name="hintPath">The path where the model can be found</param> /// <param name="loadOnDemand">A boolean flag indicating whether the uri should be attempted /// to load, if the model is not already registered with the repository</param> /// <returns>A model element at the given Uri or null if none can be found</returns> public IModelElement Resolve(Uri uri, string hintPath, bool loadOnDemand = true) { if (uri == null) { throw new ArgumentNullException("uri"); } Model model; Uri modelUri; Func <Stream> streamCreator; if (!models.TryGetValue(uri, out model)) { var parentResolved = Parent.Resolve(uri, false); if (parentResolved != null) { return(parentResolved); } if (loadOnDemand) { if (hintPath == null) { var locator = Locators.Where(l => l.CanLocate(uri)).FirstOrDefault(); if (locator == null) { if (parentResolved != null) { return(parentResolved); } var e = new UnresolvedModelElementEventArgs(uri); OnUnresolvedModelElement(e); return(e.ModelElement); } modelUri = locator.GetRepositoryUri(uri); streamCreator = () => locator.Open(modelUri); } else { modelUri = uri; streamCreator = () => File.OpenRead(hintPath); } if (!models.TryGetValue(modelUri, out model)) { using (var stream = streamCreator()) { model = Serializer.Deserialize(stream, modelUri, this, true); if (model.RootElements.Count == 1) { var ns = model.RootElements[0] as INamespace; if (ns != null) { model.ModelUri = ns.Uri; if (!models.ContainsKey(ns.Uri)) { models.Add(ns.Uri, model); } } } } } } else { return(null); } } if (uri.IsAbsoluteUri) { var element = model.Resolve(uri.Fragment); if (element == null) { var e = new UnresolvedModelElementEventArgs(uri); OnUnresolvedModelElement(e); element = e.ModelElement; } return(element); } else { return(model); } }