Beispiel #1
0
 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()));
     }
 }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
 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);
     }
 }
Beispiel #4
0
 public MetadataFileInclusionTreeElement(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState = default)
     : base(node: node, readOnlyState: readOnlyState)
 {
 }
Beispiel #5
0
 IMetadataTreeElement IMetadataTreeElement.CreateCopy(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState)
 => CreateCopy(node, readOnlyState: readOnlyState);
Beispiel #6
0
 /// <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));
Beispiel #7
0
 public CopyArgs(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState)
     : base(readOnlyState)
 {
     Node = node;
 }
Beispiel #8
0
 protected MetadataInclusionTreeElementBase(IMetadataTreeNode node, ReadOnlyStateTag readOnlyState = default(ReadOnlyStateTag))
     : base(node: node, readOnlyState: readOnlyState)
 {
 }
Beispiel #9
0
        // 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>());
        }
Beispiel #10
0
        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));
        }