/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.examples.resources.server;
import java.io.File;
import java.io.FilenameFilter;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.sencha.gxt.examples.resources.client.FileService;
import com.sencha.gxt.examples.resources.client.model.FileModel;
import com.sencha.gxt.examples.resources.client.model.FolderModel;
public class FileServiceImpl extends RemoteServiceServlet implements FileService {
private File root;
private FilenameFilter filter;
private HashMap<File, String> idMap = new HashMap<File, String>();
private int counter = 0;
public FileServiceImpl() {
URL rootUrl = getClass().getClassLoader().getResource("com/sencha");
try {
// %20 will be converted to a space
root = new File(rootUrl.toURI());
} catch (URISyntaxException e) {
// fallback
root = new File(rootUrl.getFile());
}
filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return !name.startsWith(".");
}
};
}
@Override
public List<FileModel> getFolderChildren(FileModel folder) {
File[] files = null;
if (folder == null) {
files = root.listFiles(filter);
} else {
File f = new File(folder.getPath());
files = f.listFiles(filter);
}
List<FileModel> models = new ArrayList<FileModel>();
for (File f : files) {
FileModel m = null;
if (f.isDirectory()) {
m = new FolderModel(f.getName(), f.getAbsolutePath());
} else {
m = new FileModel(f.getName(), f.getAbsolutePath());
m.setSize(f.length());
m.setLastModified(new Date(f.lastModified()));
}
if (idMap.containsKey(f)) {
m.setId(idMap.get(f));
} else {
String id = String.valueOf(counter++);
idMap.put(f, id);
m.setId(id);
}
models.add(m);
}
Collections.sort(models, new Comparator<FileModel>() {
public int compare(FileModel o1, FileModel o2) {
return o1.getName().compareTo(o2.getName());
}
});
return models;
}
}