import java.util.*;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import com.sun.lwuit.Form;
import com.sun.lwuit.Image;
import com.sun.lwuit.Form;
import com.sun.lwuit.Display;
import com.sun.lwuit.Label;
import com.sun.lwuit.Component;
import com.sun.lwuit.Command;
import com.sun.lwuit.Container;
import com.sun.lwuit.Button;
import com.sun.lwuit.events.*;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.List;
import com.sun.lwuit.Command;
import com.sun.lwuit.Component;
import com.sun.lwuit.Label;
import com.sun.lwuit.Button;
import com.sun.lwuit.events.*;
import com.sun.lwuit.list.*;
import com.sun.lwuit.*;
import javax.microedition.io.*;
import javax.bluetooth.*;
import java.io.*;
import java.util.Vector;
public class FileDialog extends Form implements ActionListener, Runnable {
private String currDirName;
private ConfigForm parent; //Where this form was started from
private int requestID;
private String ext;
private Command backCommand = null;
Form mySelf = null;
private List browser = new List();
private final static String UP_DIRECTORY = "..";
private final static String MEGA_ROOT = "/";
private final static String SEP_STR = "/";
private final static char SEP = '/';
public FileDialog(ConfigForm parent, String title, String path, String ext, int requestID) {
super(title);
this.parent = parent;
this.mySelf = this;
this.requestID=requestID;
this.addComponent(browser);
new Thread(this).start();
if (path == null || "".equals(path)) {
currDirName = MEGA_ROOT;
} else {
currDirName = getPath(path);
}
this.ext = ext;
if (System.getProperty(
"microedition.io.file.FileConnection.version") != null) {
showForm();
mySelf.show();
showCurrDir();
//
} else {
Dialog.show("No File System", "Sorry, but this mobile does not support file access", "Cancel", null);
}
}
public void run() {
try {
while (true) {
Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}
void showForm() {
this.addCommand(backCommand = new Command("Back"));
addCommandListener(this);
browser.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
final String currFile = browser.getSelectedItem().toString();
// new Thread(new Runnable() {
// public void run() {
if (currFile != null) {
if (currFile.endsWith(SEP_STR) ||
currFile.equals(UP_DIRECTORY)) {
traverseDirectory(currFile);
showCurrDir();
} else {
parent.setFileDialogResult("file://localhost/" +currDirName, currFile,requestID);
parent.showBack();
}
} else {
System.out.println("no filename read from list :-(");
}
// }
// });
}
});
System.out.println("Try to show filedialog form");
}
public void actionPerformed(ActionEvent ae) {
Command command = ae.getCommand();
if (command == backCommand) {
parent.setFileDialogResult(null, null,requestID);
parent.showBack();
}
}
void showCurrDir() {
Enumeration e;
FileConnection currDir = null;
while (browser.getModel().getSize() > 0) { // umständlicher gehts nicht...
browser.getModel().removeItem(0);
}
System.out.println("Try showCurrDir");
System.out.println("currDirName: " + currDirName);
try {
if (MEGA_ROOT.equals(currDirName)) {
e = FileSystemRegistry.listRoots();
} else {
currDir = (FileConnection) Connector.open(
"file://localhost/" + currDirName);
e = currDir.list();
browser.addItem(UP_DIRECTORY);
}
while (e.hasMoreElements()) {
String fileName = (String) e.nextElement();
System.out.println("Try showCurrDir found; " + fileName);
if (fileName.charAt(fileName.length() - 1) == SEP) {
browser.addItem(fileName);
} else {
browser.addItem(fileName);
}
}
if (currDir != null) {
currDir.close();
}
repaint();
} catch (IOException ioe) {
System.out.println(ioe.toString());
}
}
void traverseDirectory(String fileName) {
if (currDirName.equals(MEGA_ROOT)) {
if (fileName.equals(UP_DIRECTORY)) {
// can not go up from MEGA_ROOT
return;
}
currDirName = fileName;
} else if (fileName.equals(UP_DIRECTORY)) {
// Go up one directory
// TODO use setFileConnection when implemented
int i = currDirName.lastIndexOf(SEP, currDirName.length() - 2);
if (i != -1) {
currDirName = currDirName.substring(0, i + 1);
} else {
currDirName = MEGA_ROOT;
}
} else {
currDirName = currDirName + fileName;
}
showCurrDir();
}
String getPath(String filename) {
if (filename == null || "".equals(filename) || filename.equals(MEGA_ROOT)) {
return MEGA_ROOT;
} else {
//int i = filename.lastIndexOf(SEP, filename.length() - 2);
int i = filename.lastIndexOf(SEP);
if (i != -1) {
return filename.substring(0, i + 1);
} else {
return MEGA_ROOT;
}
}
}
}