Repository: reef Updated Branches: refs/heads/master 8b483a53c -> cce59bbdd
[REEF-1389] Add wrapper interface for DirectoryInfo and FileInfo to facilitate testing for REEF-1357 JIRA: [REEF-1389](https://issues.apache.org/jira/browse/REEF-1389) Pull Request: Closes #997 Project: http://git-wip-us.apache.org/repos/asf/reef/repo Commit: http://git-wip-us.apache.org/repos/asf/reef/commit/cce59bbd Tree: http://git-wip-us.apache.org/repos/asf/reef/tree/cce59bbd Diff: http://git-wip-us.apache.org/repos/asf/reef/diff/cce59bbd Branch: refs/heads/master Commit: cce59bbdd3d3b25bed2121f6fdd6039334e13159 Parents: 8b483a5 Author: Andrew Chung <[email protected]> Authored: Wed May 11 14:49:03 2016 -0700 Committer: dhruv <[email protected]> Committed: Mon May 16 17:42:36 2016 -0700 ---------------------------------------------------------------------- .../Files/DefaultDirectoryInfo.cs | 450 +++++++++++++++++++ .../Org.Apache.REEF.IO/Files/DefaultFileInfo.cs | 334 ++++++++++++++ .../Files/FileSystemInfoFactory.cs | 45 ++ .../Org.Apache.REEF.IO/Files/IDirectoryInfo.cs | 177 ++++++++ .../Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs | 96 ++++ lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs | 126 ++++++ .../Org.Apache.REEF.IO.csproj | 6 + 7 files changed, 1234 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/reef/blob/cce59bbd/lang/cs/Org.Apache.REEF.IO/Files/DefaultDirectoryInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.IO/Files/DefaultDirectoryInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/DefaultDirectoryInfo.cs new file mode 100644 index 0000000..47a86fe --- /dev/null +++ b/lang/cs/Org.Apache.REEF.IO/Files/DefaultDirectoryInfo.cs @@ -0,0 +1,450 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.AccessControl; + +namespace Org.Apache.REEF.IO.Files +{ + /// <summary> + /// This is meant only as a proxy class for <see cref="DirectoryInfo"/> and has no + /// relation to classes in <see cref="Org.Apache.REEF.IO.FileSystem"/>. + /// To create a <see cref="DefaultDirectoryInfo"/> object from a <see cref="DirectoryInfo"/> object, + /// please use the static factory method <see cref="FromDirectoryInfo"/>. + /// </summary> + public sealed class DefaultDirectoryInfo : IDirectoryInfo + { + private readonly DirectoryInfo _directoryInfo; + + private DefaultDirectoryInfo(DirectoryInfo info) + { + _directoryInfo = info; + } + + /// <summary> + /// Factory method to create an <see cref="IDirectoryInfo"/> object + /// from a <see cref="DirectoryInfo"/> object. + /// </summary> + public static IDirectoryInfo FromDirectoryInfo(DirectoryInfo info) + { + return new DefaultDirectoryInfo(info); + } + + /// <summary> + /// See <see cref="DirectoryInfo#Attributes"/>. + /// </summary> + public FileAttributes Attributes + { + get { return _directoryInfo.Attributes; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#CreationTime"/>. + /// </summary> + public DateTime CreationTime + { + get { return _directoryInfo.CreationTime; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#CreationTimeUtc"/>. + /// </summary> + public DateTime CreationTimeUtc + { + get { return _directoryInfo.CreationTimeUtc; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#Exists"/>. + /// </summary> + public bool Exists + { + get { return _directoryInfo.Exists; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#Extension"/>. + /// </summary> + public string Extension + { + get { return _directoryInfo.Extension; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#FullName"/>. + /// </summary> + public string FullName + { + get { return _directoryInfo.FullName; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#LastAccessTime"/>. + /// </summary> + public DateTime LastAccessTime + { + get { return _directoryInfo.LastAccessTime; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#LastAccessTimeUtc"/>. + /// </summary> + public DateTime LastAccessTimeUtc + { + get { return _directoryInfo.LastAccessTimeUtc; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#LastWriteTime"/>. + /// </summary> + public DateTime LastWriteTime + { + get { return _directoryInfo.LastWriteTime; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#LastWriteTimeUtc"/>. + /// </summary> + public DateTime LastWriteTimeUtc + { + get { return _directoryInfo.LastWriteTimeUtc; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#Name"/>. + /// </summary> + public string Name + { + get { return _directoryInfo.Name; } + } + + /// <summary> + /// See <see cref="DirectoryInfo#Parent"/>. + /// </summary> + public IDirectoryInfo Parent + { + get { return FromDirectoryInfo(_directoryInfo.Parent); } + } + + /// <summary> + /// See <see cref="DirectoryInfo#Root"/>. + /// </summary> + public IDirectoryInfo Root + { + get { return FromDirectoryInfo(_directoryInfo.Root); } + } + + /// <summary> + /// See <see cref="DirectoryInfo#Delete"/>. + /// </summary> + public void Delete() + { + _directoryInfo.Delete(); + } + + /// <summary> + /// See <see cref="DirectoryInfo#Refresh"/>. + /// </summary> + public void Refresh() + { + _directoryInfo.Refresh(); + } + + /// <summary> + /// See <see cref="DirectoryInfo#Create"/>. + /// </summary> + public void Create() + { + _directoryInfo.Create(); + } + + /// <summary> + /// See <see cref="DirectoryInfo#Create(DirectorySecurity)"/>. + /// </summary> + public void Create(DirectorySecurity directorySecurity) + { + _directoryInfo.Create(directorySecurity); + } + + /// <summary> + /// See <see cref="DirectoryInfo#CreateSubdirectory(string)"/>. + /// </summary> + public IDirectoryInfo CreateSubdirectory(string path) + { + return FromDirectoryInfo(_directoryInfo.CreateSubdirectory(path)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#CreateSubdirectory(string, DirectorySecurity)"/>. + /// </summary> + public IDirectoryInfo CreateSubdirectory(string path, DirectorySecurity directorySecurity) + { + return FromDirectoryInfo(_directoryInfo.CreateSubdirectory(path, directorySecurity)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#Delete(bool)"/>. + /// </summary> + public void Delete(bool recursive) + { + _directoryInfo.Delete(recursive); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateDirectories"/>. + /// </summary> + public IEnumerable<IDirectoryInfo> EnumerateDirectories() + { + return _directoryInfo.EnumerateDirectories().Select(FromDirectoryInfo); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateDirectories(string)"/>. + /// </summary> + public IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern) + { + return _directoryInfo.EnumerateDirectories(searchPattern).Select(FromDirectoryInfo); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateDirectories(string, SearchOption)"/>. + /// </summary> + public IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, SearchOption searchOption) + { + return _directoryInfo.EnumerateDirectories(searchPattern, searchOption).Select(FromDirectoryInfo); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFiles"/>. + /// </summary> + public IEnumerable<IFileInfo> EnumerateFiles() + { + return _directoryInfo.EnumerateFiles().Select(DefaultFileInfo.FromFileInfo); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFiles(string)"/>. + /// </summary> + public IEnumerable<IFileInfo> EnumerateFiles(string searchPattern) + { + return _directoryInfo.EnumerateFiles(searchPattern).Select(DefaultFileInfo.FromFileInfo); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFiles(string, SearchOption)"/>. + /// </summary> + public IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, SearchOption searchOption) + { + return _directoryInfo.EnumerateFiles(searchPattern, searchOption).Select(DefaultFileInfo.FromFileInfo); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFileSystemInfos"/>. + /// </summary> + public IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos() + { + return ConvertFileSystemInfoEnumerable(_directoryInfo.EnumerateFileSystemInfos()); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFileSystemInfos(string)"/>. + /// </summary> + public IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) + { + return ConvertFileSystemInfoEnumerable(_directoryInfo.EnumerateFileSystemInfos(searchPattern)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFileSystemInfos(string, SearchOption)"/>. + /// </summary> + public IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption) + { + return ConvertFileSystemInfoEnumerable(_directoryInfo.EnumerateFileSystemInfos(searchPattern, searchOption)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetAccessControl"/>. + /// </summary> + public DirectorySecurity GetAccessControl() + { + return _directoryInfo.GetAccessControl(); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetAccessControl(AccessControlSections)"/>. + /// </summary> + public DirectorySecurity GetAccessControl(AccessControlSections includeSections) + { + return _directoryInfo.GetAccessControl(includeSections); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetDirectories"/>. + /// </summary> + public IDirectoryInfo[] GetDirectories() + { + return ConvertDirectoryArray(_directoryInfo.GetDirectories()); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetDirectories(string)"/>. + /// </summary> + public IDirectoryInfo[] GetDirectories(string searchPattern) + { + return ConvertDirectoryArray(_directoryInfo.GetDirectories(searchPattern)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetDirectories(string, SearchOption)"/>. + /// </summary> + public IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption) + { + return ConvertDirectoryArray(_directoryInfo.GetDirectories(searchPattern, searchOption)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetFiles"/>. + /// </summary> + public IFileInfo[] GetFiles() + { + return ConvertFileArray(_directoryInfo.GetFiles()); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetFiles(string)"/>. + /// </summary> + public IFileInfo[] GetFiles(string searchPattern) + { + return ConvertFileArray(_directoryInfo.GetFiles(searchPattern)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetFiles(string, SearchOption)"/>. + /// </summary> + public IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption) + { + return ConvertFileArray(_directoryInfo.GetFiles(searchPattern, searchOption)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetFileSystemInfos"/>. + /// </summary> + public IFileSystemInfo[] GetFileSystemInfos() + { + return ConvertFileSystemInfoArray(_directoryInfo.GetFileSystemInfos()); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetFileSystemInfos(string)"/>. + /// </summary> + public IFileSystemInfo[] GetFileSystemInfos(string searchPattern) + { + return ConvertFileSystemInfoArray(_directoryInfo.GetFileSystemInfos(searchPattern)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetFileSystemInfos(string, SearchOption)"/>. + /// </summary> + public IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption) + { + return ConvertFileSystemInfoArray(_directoryInfo.GetFileSystemInfos(searchPattern, searchOption)); + } + + /// <summary> + /// See <see cref="DirectoryInfo#MoveTo(string)"/>. + /// </summary> + public void MoveTo(string destDirName) + { + _directoryInfo.MoveTo(destDirName); + } + + /// <summary> + /// See <see cref="DirectoryInfo#SetAccessControl(DirectorySecurity)"/>. + /// </summary> + public void SetAccessControl(DirectorySecurity directorySecurity) + { + _directoryInfo.SetAccessControl(directorySecurity); + } + + /// <summary> + /// See <see cref="DirectoryInfo#Equals(object)"/>. + /// </summary> + public override bool Equals(object obj) + { + var other = obj as DefaultDirectoryInfo; + return other != null && Equals(other); + } + + /// <summary> + /// See <see cref="DirectoryInfo#GetHashCode"/>. + /// </summary> + public override int GetHashCode() + { + return _directoryInfo != null ? _directoryInfo.GetHashCode() : 0; + } + + /// <summary> + /// See <see cref="DirectoryInfo#ToString"/>. + /// </summary> + public override string ToString() + { + return _directoryInfo.ToString(); + } + + private static IFileSystemInfo[] ConvertFileSystemInfoArray(IEnumerable<FileSystemInfo> fsInfos) + { + return ConvertFileSystemInfoEnumerable(fsInfos).ToArray(); + } + + private static IEnumerable<IFileSystemInfo> ConvertFileSystemInfoEnumerable(IEnumerable<FileSystemInfo> fileSystemInfos) + { + return fileSystemInfos.Select(FileSystemInfoFactory.FromFileSystemInfo).Where(fsInfo => fsInfo != null); + } + + private static IDirectoryInfo[] ConvertDirectoryArray(DirectoryInfo[] directoryInfos) + { + var arr = new IDirectoryInfo[directoryInfos.Length]; + + for (var i = 0; i < directoryInfos.Length; i++) + { + arr[i] = FromDirectoryInfo(directoryInfos[i]); + } + + return arr; + } + + private static IFileInfo[] ConvertFileArray(FileInfo[] fileInfos) + { + var arr = new IFileInfo[fileInfos.Length]; + + for (var i = 0; i < fileInfos.Length; i++) + { + arr[i] = DefaultFileInfo.FromFileInfo(fileInfos[i]); + } + + return arr; + } + + private bool Equals(DefaultDirectoryInfo other) + { + return Equals(_directoryInfo, other._directoryInfo); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/reef/blob/cce59bbd/lang/cs/Org.Apache.REEF.IO/Files/DefaultFileInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.IO/Files/DefaultFileInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/DefaultFileInfo.cs new file mode 100644 index 0000000..be4bfee --- /dev/null +++ b/lang/cs/Org.Apache.REEF.IO/Files/DefaultFileInfo.cs @@ -0,0 +1,334 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +using System; +using System.IO; +using System.Security.AccessControl; + +namespace Org.Apache.REEF.IO.Files +{ + /// <summary> + /// This is meant only as a proxy class for <see cref="FileInfo"/> and has no + /// relation to classes in <see cref="Org.Apache.REEF.IO.FileSystem"/>. + /// To create a <see cref="DefaultFileInfo"/> object from a <see cref="FileInfo"/> object, + /// please use the static method <see cref="FromFileInfo"/>. + /// </summary> + public sealed class DefaultFileInfo : IFileInfo + { + private readonly FileInfo _fileInfo; + + private DefaultFileInfo(FileInfo info) + { + _fileInfo = info; + } + + /// <summary> + /// Factory method to create an <see cref="IFileInfo"/> object + /// from a <see cref="FileInfo"/> object. + /// </summary> + public static IFileInfo FromFileInfo(FileInfo fileInfo) + { + return new DefaultFileInfo(fileInfo); + } + + /// <summary> + /// See <see cref="FileInfo#Attributes"/>. + /// </summary> + public FileAttributes Attributes + { + get { return _fileInfo.Attributes; } + } + + /// <summary> + /// See <see cref="FileInfo#CreationTime"/>. + /// </summary> + public DateTime CreationTime + { + get { return _fileInfo.CreationTime; } + } + + /// <summary> + /// See <see cref="FileInfo#CreationTimeUtc"/>. + /// </summary> + public DateTime CreationTimeUtc + { + get { return _fileInfo.CreationTimeUtc; } + } + + /// <summary> + /// See <see cref="FileInfo#Directory"/>. + /// </summary> + public IDirectoryInfo Directory + { + get { return DefaultDirectoryInfo.FromDirectoryInfo(_fileInfo.Directory); } + } + + /// <summary> + /// See <see cref="FileInfo#DirectoryName"/>. + /// </summary> + public string DirectoryName + { + get { return _fileInfo.DirectoryName; } + } + + /// <summary> + /// See <see cref="FileInfo#Exists"/>. + /// </summary> + public bool Exists + { + get { return _fileInfo.Exists; } + } + + /// <summary> + /// See <see cref="FileInfo#Extension"/>. + /// </summary> + public string Extension + { + get { return _fileInfo.Extension; } + } + + /// <summary> + /// See <see cref="FileInfo#FullName"/>. + /// </summary> + public string FullName + { + get { return _fileInfo.FullName; } + } + + /// <summary> + /// See <see cref="FileInfo#IsReadOnly"/>. + /// </summary> + public bool IsReadOnly + { + get { return _fileInfo.IsReadOnly; } + } + + /// <summary> + /// See <see cref="FileInfo#LastAccessTime"/>. + /// </summary> + public DateTime LastAccessTime + { + get { return _fileInfo.LastAccessTime; } + } + + /// <summary> + /// See <see cref="FileInfo#LastAccessTimeUtc"/>. + /// </summary> + public DateTime LastAccessTimeUtc + { + get { return _fileInfo.LastAccessTimeUtc; } + } + + /// <summary> + /// See <see cref="FileInfo#LastWriteTime"/>. + /// </summary> + public DateTime LastWriteTime + { + get { return _fileInfo.LastWriteTime; } + } + + /// <summary> + /// See <see cref="FileInfo#LastWriteTimeUtc"/>. + /// </summary> + public DateTime LastWriteTimeUtc + { + get { return _fileInfo.LastWriteTimeUtc; } + } + + /// <summary> + /// See <see cref="FileInfo#Length"/>. + /// </summary> + public long Length + { + get { return _fileInfo.Length; } + } + + /// <summary> + /// See <see cref="FileInfo#Name"/>. + /// </summary> + public string Name + { + get { return _fileInfo.Name; } + } + + /// <summary> + /// See <see cref="FileInfo#AppendText"/>. + /// </summary> + public StreamWriter AppendText() + { + return _fileInfo.AppendText(); + } + + /// <summary> + /// See <see cref="FileInfo#CopyTo(string)"/>. + /// </summary> + public IFileInfo CopyTo(string destFileName) + { + return FromFileInfo(_fileInfo.CopyTo(destFileName)); + } + + /// <summary> + /// See <see cref="FileInfo#CopyTo(string, bool)"/>. + /// </summary> + public IFileInfo CopyTo(string destFileName, bool overwrite) + { + return FromFileInfo(_fileInfo.CopyTo(destFileName, overwrite)); + } + + /// <summary> + /// See <see cref="FileInfo#Create"/>. + /// </summary> + public FileStream Create() + { + return _fileInfo.Create(); + } + + /// <summary> + /// See <see cref="FileInfo#CreateText"/>. + /// </summary> + public StreamWriter CreateText() + { + return _fileInfo.CreateText(); + } + + /// <summary> + /// See <see cref="FileInfo#Delete"/>. + /// </summary> + public void Delete() + { + _fileInfo.Delete(); + } + + /// <summary> + /// See <see cref="FileInfo#MoveTo(string)"/>. + /// </summary> + public void MoveTo(string destFileName) + { + _fileInfo.MoveTo(destFileName); + } + + /// <summary> + /// See <see cref="FileInfo#Open(FileMode)"/>. + /// </summary> + public FileStream Open(FileMode mode) + { + return _fileInfo.Open(mode); + } + + /// <summary> + /// See <see cref="FileInfo#Open(FileMode, FileAccess)"/>. + /// </summary> + public FileStream Open(FileMode mode, FileAccess access) + { + return _fileInfo.Open(mode, access); + } + + /// <summary> + /// See <see cref="FileInfo#Open(FileMode, FileAccess, FileShare)"/>. + /// </summary> + public FileStream Open(FileMode mode, FileAccess access, FileShare share) + { + return _fileInfo.Open(mode, access, share); + } + + /// <summary> + /// See <see cref="FileInfo#OpenRead"/>. + /// </summary> + public FileStream OpenRead() + { + return _fileInfo.OpenRead(); + } + + /// <summary> + /// See <see cref="FileInfo#OpenText"/>. + /// </summary> + public StreamReader OpenText() + { + return _fileInfo.OpenText(); + } + + /// <summary> + /// See <see cref="FileInfo#OpenWrite"/>. + /// </summary> + public FileStream OpenWrite() + { + return _fileInfo.OpenWrite(); + } + + /// <summary> + /// See <see cref="FileInfo#Refresh"/>. + /// </summary> + public void Refresh() + { + _fileInfo.Refresh(); + } + + /// <summary> + /// See <see cref="FileInfo#Replace(string, string)"/>. + /// </summary> + public IFileInfo Replace(string destinationFileName, string destinationBackupFileName) + { + return FromFileInfo(_fileInfo.Replace(destinationFileName, destinationBackupFileName)); + } + + /// <summary> + /// See <see cref="FileInfo#Replace(string, string, bool)"/>. + /// </summary> + public IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) + { + return FromFileInfo(_fileInfo.Replace(destinationFileName, destinationBackupFileName, ignoreMetadataErrors)); + } + + /// <summary> + /// See <see cref="FileInfo#SetAccessControl(FileSecurity)"/>. + /// </summary> + public void SetAccessControl(FileSecurity fileSecurity) + { + _fileInfo.SetAccessControl(fileSecurity); + } + + /// <summary> + /// See <see cref="FileInfo#Equals(object)"/>. + /// </summary> + public override bool Equals(object obj) + { + var other = obj as DefaultFileInfo; + return other != null && Equals(other); + } + + /// <summary> + /// See <see cref="FileInfo#GetHashCode"/>. + /// </summary> + public override int GetHashCode() + { + return _fileInfo != null ? _fileInfo.GetHashCode() : 0; + } + + /// <summary> + /// See <see cref="FileInfo#ToString"/>. + /// </summary> + public override string ToString() + { + return _fileInfo.ToString(); + } + + private bool Equals(DefaultFileInfo other) + { + return Equals(_fileInfo, other._fileInfo); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/reef/blob/cce59bbd/lang/cs/Org.Apache.REEF.IO/Files/FileSystemInfoFactory.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.IO/Files/FileSystemInfoFactory.cs b/lang/cs/Org.Apache.REEF.IO/Files/FileSystemInfoFactory.cs new file mode 100644 index 0000000..81a628d --- /dev/null +++ b/lang/cs/Org.Apache.REEF.IO/Files/FileSystemInfoFactory.cs @@ -0,0 +1,45 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +using System.IO; + +namespace Org.Apache.REEF.IO.Files +{ + /// <summary> + /// A static factory class that creates an <see cref="IFileSystemInfo"/> object from + /// a <see cref="FileSystemInfo"/> object. + /// </summary> + public static class FileSystemInfoFactory + { + public static IFileSystemInfo FromFileSystemInfo(FileSystemInfo fsInfo) + { + var dirInfo = fsInfo as DirectoryInfo; + if (dirInfo != null) + { + return DefaultDirectoryInfo.FromDirectoryInfo(dirInfo); + } + + var fileInfo = fsInfo as FileInfo; + if (fileInfo != null) + { + return DefaultFileInfo.FromFileInfo(fileInfo); + } + + return null; + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/reef/blob/cce59bbd/lang/cs/Org.Apache.REEF.IO/Files/IDirectoryInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.IO/Files/IDirectoryInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/IDirectoryInfo.cs new file mode 100644 index 0000000..9d8af33 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.IO/Files/IDirectoryInfo.cs @@ -0,0 +1,177 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +using System.Collections.Generic; +using System.IO; +using System.Security.AccessControl; + +namespace Org.Apache.REEF.IO.Files +{ + /// <summary> + /// This is meant only as a proxy interface for <see cref="DirectoryInfo"/> and has no + /// relation to classes in <see cref="Org.Apache.REEF.IO.FileSystem"/>. + /// To create an <see cref="IDirectoryInfo"/> object from a <see cref="DirectoryInfo"/> object, + /// please use the static method <see cref="DefaultDirectoryInfo.FromDirectoryInfo"/>. + /// </summary> + public interface IDirectoryInfo : IFileSystemInfo + { + /// <summary> + /// See <see cref="DirectoryInfo#Parent"/>. + /// </summary> + IDirectoryInfo Parent { get; } + + /// <summary> + /// See <see cref="DirectoryInfo#Root"/>. + /// </summary> + IDirectoryInfo Root { get; } + + /// <summary> + /// See <see cref="DirectoryInfo#Create"/>. + /// </summary> + void Create(); + + /// <summary> + /// See <see cref="DirectoryInfo#Create(DirectorySecurity)"/>. + /// </summary> + void Create(DirectorySecurity directorySecurity); + + /// <summary> + /// See <see cref="DirectoryInfo#CreateSubdirectory(string)"/>. + /// </summary> + IDirectoryInfo CreateSubdirectory(string path); + + /// <summary> + /// See <see cref="DirectoryInfo#CreateSubdirectory(string, DirectorySecurity)"/>. + /// </summary> + IDirectoryInfo CreateSubdirectory(string path, DirectorySecurity directorySecurity); + + /// <summary> + /// See <see cref="DirectoryInfo#Delete(bool)"/>. + /// </summary> + void Delete(bool recursive); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateDirectories"/>. + /// </summary> + IEnumerable<IDirectoryInfo> EnumerateDirectories(); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateDirectories(string)"/>. + /// </summary> + IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateDirectories(string, SearchOption)"/>. + /// </summary> + IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, SearchOption searchOption); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFiles"/>. + /// </summary> + IEnumerable<IFileInfo> EnumerateFiles(); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFiles(string)"/>. + /// </summary> + IEnumerable<IFileInfo> EnumerateFiles(string searchPattern); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFiles(string, SearchOption)"/>. + /// </summary> + IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, SearchOption searchOption); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFileSystemInfos"/>. + /// </summary> + IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFileSystemInfos(string)"/>. + /// </summary> + IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern); + + /// <summary> + /// See <see cref="DirectoryInfo#EnumerateFileSystemInfos(string, SearchOption)"/>. + /// </summary> + IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption); + + /// <summary> + /// See <see cref="DirectoryInfo#GetAccessControl"/>. + /// </summary> + DirectorySecurity GetAccessControl(); + + /// <summary> + /// See <see cref="DirectoryInfo#GetAccessControl(AccessControlSections)"/>. + /// </summary> + DirectorySecurity GetAccessControl(AccessControlSections includeSections); + + /// <summary> + /// See <see cref="DirectoryInfo#GetDirectories"/>. + /// </summary> + IDirectoryInfo[] GetDirectories(); + + /// <summary> + /// See <see cref="DirectoryInfo#GetDirectories(string)"/>. + /// </summary> + IDirectoryInfo[] GetDirectories(string searchPattern); + + /// <summary> + /// See <see cref="DirectoryInfo#GetDirectories(string, SearchOption)"/>. + /// </summary> + IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption); + + /// <summary> + /// See <see cref="DirectoryInfo#GetFiles"/>. + /// </summary> + IFileInfo[] GetFiles(); + + /// <summary> + /// See <see cref="DirectoryInfo#GetFiles(string)"/>. + /// </summary> + IFileInfo[] GetFiles(string searchPattern); + + /// <summary> + /// See <see cref="DirectoryInfo#GetFiles(string, SearchOption)"/>. + /// </summary> + IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption); + + /// <summary> + /// See <see cref="DirectoryInfo#GetFileSystemInfos"/>. + /// </summary> + IFileSystemInfo[] GetFileSystemInfos(); + + /// <summary> + /// See <see cref="DirectoryInfo#GetFileSystemInfos(string)"/>. + /// </summary> + IFileSystemInfo[] GetFileSystemInfos(string searchPattern); + + /// <summary> + /// See <see cref="DirectoryInfo#GetFileSystemInfos(string, SearchOption)"/>. + /// </summary> + IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption); + + /// <summary> + /// See <see cref="DirectoryInfo#MoveTo(string)"/>. + /// </summary> + void MoveTo(string destDirName); + + /// <summary> + /// See <see cref="DirectoryInfo#SetAccessControl(DirectorySecurity)"/>. + /// </summary> + void SetAccessControl(DirectorySecurity directorySecurity); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/reef/blob/cce59bbd/lang/cs/Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs new file mode 100644 index 0000000..ea258dc --- /dev/null +++ b/lang/cs/Org.Apache.REEF.IO/Files/IFIleSystemInfo.cs @@ -0,0 +1,96 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +using System; +using System.IO; + +namespace Org.Apache.REEF.IO.Files +{ + /// <summary> + /// This is meant only as a proxy interface for <see cref="FileSystemInfo"/> and has no + /// relation to classes in <see cref="Org.Apache.REEF.IO.FileSystem"/>. + /// To create an <see cref="IFileSystemInfo"/> object from a <see cref="FileSystemInfo"/> + /// object, please use the static factory method <see cref="FileSystemInfoFactory.FromFileSystemInfo"/>. + /// </summary> + public interface IFileSystemInfo + { + /// <summary> + /// See <see cref="FileSystemInfo#Attributes"/>. + /// </summary> + FileAttributes Attributes { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#CreationTime"/>. + /// </summary> + DateTime CreationTime { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#CreationTimeUtc"/>. + /// </summary> + DateTime CreationTimeUtc { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#Exists"/>. + /// </summary> + bool Exists { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#Extension"/>. + /// </summary> + string Extension { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#FullName"/>. + /// </summary> + string FullName { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#LastAccessTime"/>. + /// </summary> + DateTime LastAccessTime { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#LastAccessTimeUtc"/>. + /// </summary> + DateTime LastAccessTimeUtc { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#LastWriteTime"/>. + /// </summary> + DateTime LastWriteTime { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#LastWriteTimeUtc"/>. + /// </summary> + DateTime LastWriteTimeUtc { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#Name"/>. + /// </summary> + string Name { get; } + + /// <summary> + /// See <see cref="FileSystemInfo#Delete"/>. + /// </summary> + void Delete(); + + /// <summary> + /// See <see cref="FileSystemInfo#Refresh"/>. + /// </summary> + void Refresh(); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/reef/blob/cce59bbd/lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs b/lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs new file mode 100644 index 0000000..bcb43c0 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.IO/Files/IFileInfo.cs @@ -0,0 +1,126 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +using System.IO; +using System.Security.AccessControl; + +namespace Org.Apache.REEF.IO.Files +{ + /// <summary> + /// This is meant only as a proxy interface for <see cref="FileInfo"/> and has no + /// relation to classes in <see cref="Org.Apache.REEF.IO.FileSystem"/>. + /// To create an <see cref="IFileInfo"/> object from a <see cref="FileInfo"/> object, + /// please use the static factory method <see cref="DefaultFileInfo.FromFileInfo"/>. + /// </summary> + public interface IFileInfo : IFileSystemInfo + { + /// <summary> + /// See <see cref="FileInfo#Directory"/>. + /// </summary> + IDirectoryInfo Directory { get; } + + /// <summary> + /// See <see cref="FileInfo#DirectoryName"/>. + /// </summary> + string DirectoryName { get; } + + /// <summary> + /// See <see cref="FileInfo#IsReadOnly"/>. + /// </summary> + bool IsReadOnly { get; } + + /// <summary> + /// See <see cref="FileInfo#Length"/>. + /// </summary> + long Length { get; } + + /// <summary> + /// See <see cref="FileInfo#AppendText"/>. + /// </summary> + StreamWriter AppendText(); + + /// <summary> + /// See <see cref="FileInfo#CopyTo(string)"/>. + /// </summary> + IFileInfo CopyTo(string destFileName); + + /// <summary> + /// See <see cref="FileInfo#CopyTo(string, bool)"/>. + /// </summary> + IFileInfo CopyTo(string destFileName, bool overwrite); + + /// <summary> + /// See <see cref="FileInfo#Create"/>. + /// </summary> + FileStream Create(); + + /// <summary> + /// See <see cref="FileInfo#CreateText"/>. + /// </summary> + StreamWriter CreateText(); + + /// <summary> + /// See <see cref="FileInfo#MoveTo(string)"/>. + /// </summary> + void MoveTo(string destFileName); + + /// <summary> + /// See <see cref="FileInfo#Open(FileMode)"/>. + /// </summary> + FileStream Open(FileMode mode); + + /// <summary> + /// See <see cref="FileInfo#Open(FileMode, FileAccess)"/>. + /// </summary> + FileStream Open(FileMode mode, FileAccess access); + + /// <summary> + /// See <see cref="FileInfo#(FileMode, FileAccess, FileShare)"/>. + /// </summary> + FileStream Open(FileMode mode, FileAccess access, FileShare share); + + /// <summary> + /// See <see cref="FileInfo#OpenRead"/>. + /// </summary> + FileStream OpenRead(); + + /// <summary> + /// See <see cref="FileInfo#OpenText"/>. + /// </summary> + StreamReader OpenText(); + + /// <summary> + /// See <see cref="FileInfo#OpenWrite"/>. + /// </summary> + FileStream OpenWrite(); + + /// <summary> + /// See <see cref="FileInfo#Replace(string, string)"/>. + /// </summary> + IFileInfo Replace(string destinationFileName, string destinationBackupFileName); + + /// <summary> + /// See <see cref="FileInfo#Replace(string, string, bool)"/>. + /// </summary> + IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors); + + /// <summary> + /// See <see cref="FileInfo#SetAccessControl(FileSecurity)"/>. + /// </summary> + void SetAccessControl(FileSecurity fileSecurity); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/reef/blob/cce59bbd/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj b/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj index 2fda120..eedc6a9 100644 --- a/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj +++ b/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj @@ -98,6 +98,12 @@ under the License. <Compile Include="FileSystem\AzureBlob\ICloudBlobContainer.cs" /> <Compile Include="FileSystem\Local\LocalFileSystem.cs" /> <Compile Include="FileSystem\Local\LocalFileSystemConfiguration.cs" /> + <Compile Include="Files\DefaultDirectoryInfo.cs" /> + <Compile Include="Files\DefaultFileInfo.cs" /> + <Compile Include="Files\FileSystemInfoFactory.cs" /> + <Compile Include="Files\IDirectoryInfo.cs" /> + <Compile Include="Files\IFileInfo.cs" /> + <Compile Include="Files\IFileSystemInfo.cs" /> <Compile Include="PartitionedData\FileSystem\FileSystemInputPartition.cs" /> <Compile Include="PartitionedData\FileSystem\FileInputPartitionDescriptor.cs" /> <Compile Include="PartitionedData\FileSystem\Parameters\CopyToLocal.cs" />
