package pl.helion.j2mepp.odtwarzacz;

import javax.microedition.io.file.*;
import javax.microedition.io.*;
import java.util.*;
import java.io.*;
public class MenadzerPlikow 
{
	public MenadzerPlikow(OdtwarzaczMIDlet _m) throws Exception
	{
		m = _m;
		String v = System.getProperty("microedition.io.file.FileConnection.version");
		if (v==null) 
			throw new Exception("Brak obslugi systemu plikow!");
	}
	public String[] przerobEnumerationNaString(Enumeration e)
	{
		Vector lista = new Vector();
		while (e.hasMoreElements())
			lista.addElement(e.nextElement());
		String[] wyniki = new String[lista.size()];
		for (int i=0;i<wyniki.length;i++)
			wyniki[i] = (String)lista.elementAt(i);
		return wyniki;
	}
	public String pobierzSciezke()
	{
		return PRZED+sciezka;
	}
	public void odswiez()
	{
		sciezka = "/";
	}
	public void wyswietlKorzenie()
	{		
		new Thread(new Runnable(){
			public void run()
			{
				Enumeration zestaw = FileSystemRegistry.listRoots();
				String[] rooty = przerobEnumerationNaString(zestaw);
				m.wyswietlElementy(rooty);
			}
		}).start();
	}
	public void przejdzDo(String nazwa) throws Exception
	{
		sciezka += nazwa;
		this.ustalPlik();
	}
	public void wyjdzDoGory() throws Exception
	{
		if (sciezka.length()>1)
		{
			if (this.jestKatalog())
			{
				sciezka = sciezka.substring(0,sciezka.length()-1);
				int indeks = sciezka.lastIndexOf('/');
				sciezka = sciezka.substring(0,indeks+1);
			} else
			{
				int indeks = sciezka.lastIndexOf('/');
				sciezka = sciezka.substring(0,indeks+1);
			}
			if (sciezka.length()>1)
				this.ustalPlik();
		}
	}
	public boolean jestKatalog()
	{
		if (plik!=null)
			return plik.isDirectory();
		else
			return false;
	}
	public String[] zwrocZawartosc() throws IOException
	{
		if (sciezka.length()==1)
			return this.przerobEnumerationNaString(FileSystemRegistry.listRoots());
		this.ustalPlik();
		if (plik.isDirectory())
		{
			Enumeration list = plik.list();
			String[] wyniki = this.przerobEnumerationNaString(list);
			return wyniki;
		} else
			return null;
	}
	private void ustalPlik() throws IOException
	{
		if (plik!=null)
			plik.close();
		plik = (FileConnection)Connector.open(this.pobierzSciezke(),Connector.READ);
		if (!plik.exists())
			throw new IOException("Brak pliku!");
	}
	private FileConnection plik;
	private OdtwarzaczMIDlet m;
	private String sciezka = "/";
	private static final String PRZED = "file://";
}
