FsItemEx.java

package cn.bluejoe.elfinder.controller.executor;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import cn.bluejoe.elfinder.service.FsItem;
import cn.bluejoe.elfinder.service.FsService;
import cn.bluejoe.elfinder.service.FsVolume;

public class FsItemEx
{
	private FsItem _f;

	private FsService _s;

	private FsVolume _v;

	public FsItemEx(FsItem fsi, FsService fsService)
	{
		_f = fsi;
		_v = fsi.getVolume();
		_s = fsService;
	}

	public FsItemEx(FsItemEx parent, String name) throws IOException
	{
		_v = parent._v;
		_s = parent._s;
		_f = _v.fromPath(_v.getPath(parent._f) + "/" + name);
	}

	public FsItemEx createChild(String name) throws IOException
	{
		return new FsItemEx(this, name);
	}

	public void createFile() throws IOException
	{
		_v.createFile(_f);
	}

	public void createFolder() throws IOException
	{
		_v.createFolder(_f);
	}

	public boolean delete() throws IOException
	{
		if (_v.isFolder(_f))
		{
			return _v.deleteFolder(_f);
		}
		else
		{
			return _v.deleteFile(_f);
		}
	}

	public void deleteFile() throws IOException
	{
		_v.deleteFile(_f);
	}

	public void deleteFolder() throws IOException
	{
		_v.deleteFolder(_f);
	}

	public boolean exists()
	{
		return _v.exists(_f);
	}

	public String getHash() throws IOException
	{
		return _s.getHash(_f);
	}

	public long getLastModified()
	{
		return _v.getLastModified(_f);
	}

	public String getMimeType()
	{
		return _v.getMimeType(_f);
	}

	public String getName()
	{
		return _v.getName(_f);
	}

	public FsItemEx getParent()
	{
		return new FsItemEx(_v.getParent(_f), _s);
	}

	public String getPath() throws IOException
	{
		return _v.getPath(_f);
	}

	public long getSize()
	{
		return _v.getSize(_f);
	}

	public String getVolumeId()
	{
		return _s.getVolumeId(_v);
	}

	public String getVolumnName()
	{
		return _v.getName();
	}

	public boolean hasChildFolder()
	{
		return _v.hasChildFolder(_f);
	}

	public boolean isFolder()
	{
		return _v.isFolder(_f);
	}

	public boolean isLocked(FsItemEx fsi) throws IOException
	{
		return _s.getSecurityChecker().isLocked(_s, _f);
	}

	public boolean isReadable(FsItemEx fsi) throws IOException
	{
		return _s.getSecurityChecker().isReadable(_s, _f);
	}

	public boolean isRoot()
	{
		return _v.isRoot(_f);
	}

	public boolean isWritable(FsItemEx fsi) throws IOException
	{
		return _s.getSecurityChecker().isWritable(_s, _f);
	}

	public List<FsItemEx> listChildren()
	{
		List<FsItemEx> list = new ArrayList<FsItemEx>();
		for (FsItem child : _v.listChildren(_f))
		{
			list.add(new FsItemEx(child, _s));
		}
		return list;
	}

	public InputStream openInputStream() throws IOException
	{
		return _v.openInputStream(_f);
	}

	public OutputStream openOutputStream() throws IOException
	{
		return _v.openOutputStream(_f);
	}

	public void renameTo(FsItemEx dst) throws IOException
	{
		_v.rename(_f, dst._f);
	}

	/**
	 * JEEFF / WEBJET pridany getter na service
	 * @return
	 */
	public FsService getService()
	{
		return _s;
	}

	/**
	 * JEEFF / WEBJET vrati volume pre dane fsi
	 * @return
	 */
	public FsVolume getVolume()
	{
		return _v;
	}

	@Override
	public String toString() {
		return "FsItemEx [_f=" + _f + "]";
	}

}