OsFile.java

package eu.javaexperience.file.fs.os;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import eu.javaexperience.file.AbstractFile;
import eu.javaexperience.file.AbstractFileSystem;
import eu.javaexperience.file.FileSystemTools;
import eu.javaexperience.semantic.references.MayNull;

public class OsFile implements AbstractFile
{
	protected final File file;
	
	public OsFile(File f)
	{
		this.file = f;
	}
	
	public OsFile(String f)
	{
		this.file = new File(f);
	}
	
	@Override
	public String getUrl()
	{
		return file.toString();
	}

	@Override
	public AbstractFileSystem getFileSystem()
	{
		return FileSystemTools.DEFAULT_FILESYSTEM;
	}

	@Override
	public AbstractFile getCanonicalFile() throws IOException
	{
		File ret = file.getCanonicalFile();
		if(null == ret)
		{
			return null;
		}
		
		return new OsFile(ret);
	}

	@Override
	public boolean isDirectory()
	{
		return file.isDirectory();
	}

	@Override
	public @MayNull AbstractFile[] listFiles()
	{
		File[] r = file.listFiles();
		if(null == r)
		{
			return null;
		}
		
		AbstractFile[] ret = new AbstractFile[r.length]; 
		for(int i=0;i<ret.length;++i)
		{
			ret[i] = new OsFile(r[i]); 
		}
		
		return ret;
	}

	@Override
	public boolean mkdir()
	{
		return file.mkdir();
	}

	@Override
	public boolean mkdirs()
	{
		return file.mkdirs();
	}

	@Override
	public long lastModified()
	{
		return file.lastModified();
	}
	
	@Override
	public boolean canRead()
	{
		return file.canRead();
	}

	@Override
	public boolean canWrite()
	{
		return file.canWrite();
	}

	@Override
	public boolean delete()
	{
		return file.delete();
	}

	@Override
	public boolean setLastModified(long time)
	{
		return file.setLastModified(time);
	}

	@Override
	public boolean createNewRegularFile() throws IOException
	{
		return file.createNewFile();
	}

	@Override
	public InputStream openRead() throws FileNotFoundException
	{
		return new FileInputStream(file);
	}

	@Override
	public OutputStream openWrite(boolean append) throws FileNotFoundException
	{
		return new FileOutputStream(file, append);
	}

	@Override
	public boolean exists()
	{
		return file.exists();
	}

	@Override
	public boolean isRegularFile()
	{
		return file.isFile();
	}

	@Override
	public long getSize()
	{
		return file.length();
	}

	@Override
	public String getFileName()
	{
		return file.getName();
	}

	@Override
	public AbstractFile getParentFile()
	{
		File p = file.getParentFile();
		if(null == p)
		{
			return null;
		}
		
		return new OsFile(p);
	}
	
	@Override
	public String toString()
	{
		return file.toString();/*"OsFile: "+*/
	}
	
	@Override
	public int hashCode()
	{
		return file.hashCode();
	}
	
	@Override
	public boolean equals(Object obj)
	{
		if(!(obj instanceof OsFile))
		{
			return false;
		}
		return file.equals(((OsFile)obj).file);
	}

	public File getFile()
	{
		return file;
	}

	@Override
	public long createTime()
	{
		return 0;
	}
}