public EmbeddedMetadataTreeElement(IMetadataTreeNode node, IMetadata embeddedMetadata, bool ownsEmbeddedMetadata, bool linkEmbeddedMetadata = false, ReadOnlyStateTag readOnlyState = null) : base(node: node, readOnlyState: readOnlyState) { // embeddedMetadata.EnsureNotNull(nameof(embeddedMetadata)); // _embeddedMetadata = embeddedMetadata.ToValueHolder(ownsEmbeddedMetadata); // if (linkEmbeddedMetadata) { SetMetadata(new Link <IMetadataTreeElement, IVh <IMetadata> >(this, embeddedMetadata.ToValueHolder())); } }
protected MetadataTreeElementBase(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState = default(ReadOnlyStateTag)) : base(readOnlyState: readOnlyState) { // if (node is null) { _nodeLink = null; } else { var nodeLink = _nodeLink = new Link <IMetadataTreeNode, IMetadataTreeElement>(source: node, target: this); node.SetMetadataElement(nodeLink); } }
public MetadataTreeNode(IMetadataTreeNode parent, string caption = null, IMetadataTreeElement metadataElement = default, ReadOnlyStateTag readOnlyState = default) : base(caption : caption, readOnlyState : readOnlyState) { // _children = new MetadataTreeNodeContainer(this); _inclusions = new MetadataTreeNodeInclusionContainer(this); // if (metadataElement != null) { SetMetadataElement(link: new Link <MetadataTreeNode, IMetadataTreeElement>(this, metadataElement)); } if (parent != null) { parent.Children.AddComponent(this); } }
public MetadataFileInclusionTreeElement(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState = default) : base(node: node, readOnlyState: readOnlyState) { }
IMetadataTreeElement IMetadataTreeElement.CreateCopy(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState) => CreateCopy(node, readOnlyState: readOnlyState);
/// <summary> /// Создает копию данного элемента, связывая копию с указанным узлом дерева метаданных. /// <para>Связь данного элемента с объектом метаданных (<seealso cref="MetadataLink"/>) не копируется.</para> /// </summary> /// <param name="node">Узел дерева метаданных, с которым в копии будет установлена связь.</param> /// <param name="readOnlyState">Состояние доступности редактировании копии.</param> /// <returns>Объект <see cref="MetadataTreeElementBase"/>.</returns> public MetadataTreeElementBase CreateCopy(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState = null) => (MetadataTreeElementBase)CreateCopy(new CopyArgs(node, readOnlyState));
public CopyArgs(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState) : base(readOnlyState) { Node = node; }
protected MetadataInclusionTreeElementBase(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState = default(ReadOnlyStateTag)) : base(node: node, readOnlyState: readOnlyState) { }
// TODO: Put strings into the resources. // IEnumerable <IMetadataTreeNode> P_LoadNodes(IMetadataLoadContext loadCtx, DirectoryInfo directory, IMetadataTreeNode parentNode = default, bool continuation = default) { loadCtx.EnsureNotNull(nameof(loadCtx)); directory.EnsureNotNull(nameof(directory)); // loadCtx.ThrowIfCancellationRequested(); var buffer = continuation ? null : new List <IMetadataTreeNode>(); var fileNameAndNodeMap = new Dictionary <string, IMetadataTreeNode>(FileSystemAccessUtilities.DefaultPathComparer); // var files = directory.GetFiles(searchPattern: "*", searchOption: SearchOption.TopDirectoryOnly); for (var i = 0; i < files.Length; i++) { loadCtx.ThrowIfCancellationRequested(); var file = files[i]; if (ShouldIncludeFile(context: loadCtx, file: file, mediaType: out var fileFormatMediaType)) { var metadataElement = new MetadataFileInclusionTreeElement() { LocationUri = new Uri(uriString: $"{UriUtilities.UriSchemeFile}://{file.FullName}", uriKind: UriKind.Absolute), FormatMediaTypeName = fileFormatMediaType }; var node = new MetadataTreeNode(parent: parentNode, caption: file.Name, metadataElement: metadataElement); buffer?.Add(node); fileNameAndNodeMap.Add(Path.GetFileNameWithoutExtension(file.Name), node); } } // var subdirectories = directory.GetDirectories(searchPattern: "*", searchOption: SearchOption.TopDirectoryOnly); for (var i = 0; i < subdirectories.Length; i++) { loadCtx.ThrowIfCancellationRequested(); var subdirectory = subdirectories[i]; if (!fileNameAndNodeMap.TryGetValue(subdirectory.Name, out var subdirectoryParentNode)) { MetadataName name; try { name = (MetadataName)subdirectory.Name; } catch (Exception exception) { throw new EonException(message: $"Directory name can't be converted to metadata name (type '{typeof(MetadataName)}').{Environment.NewLine}\tDirectory:{subdirectory.FmtStr().GNLI2()}", innerException: exception); } var metadataElement = new EmbeddedMetadataTreeElement(embeddedMetadata: new Namespace(name: name), ownsEmbeddedMetadata: true); var node = new MetadataTreeNode(parent: parentNode, caption: metadataElement.EmbeddedMetadata.Name, metadataElement: metadataElement); buffer?.Add(node); subdirectoryParentNode = node; } // P_LoadNodes(loadCtx: loadCtx, directory: subdirectory, parentNode: subdirectoryParentNode, continuation: true); } // return(buffer ?? Enumerable.Empty <IMetadataTreeNode>()); }
public virtual async Task <IEnumerable <IMetadataTreeNode> > LoadNodesAsync(IMetadataLoadContext loadCtx, DirectoryInfo directory, IMetadataTreeNode parentNode = default) { await Task.CompletedTask; return(P_LoadNodes(loadCtx: loadCtx, directory: directory, parentNode: parentNode, continuation: false)); }