2,94 → 2,103 |
|
import java.io.File; |
import java.io.FileFilter; |
import java.lang.reflect.Method; |
import java.util.ArrayList; |
import java.util.List; |
|
import javax.ws.rs.core.GenericEntity; |
import javax.ws.rs.core.HttpHeaders; |
import javax.ws.rs.core.Response; |
|
import org.apache.jcs.JCS; |
import org.apache.jcs.access.exception.CacheException; |
|
import net.brutex.xservices.security.StandardSecurityManager; |
import net.brutex.xservices.security.UserIdentity; |
import net.brutex.xservices.types.FileInfoType; |
|
import org.apache.jcs.JCS; |
import org.apache.jcs.access.exception.CacheException; |
|
/** |
* @author Brian Rosenberger, bru(at)brutex.de |
* @author Brian Rosenberger |
* |
*/ |
public class FileInfoImpl implements FileInfo |
{ |
public Response getFiles(HttpHeaders h, String dir, boolean withDir, boolean withFiles, int level, String search, int count, int page) |
{ |
StandardSecurityManager sec = new StandardSecurityManager(); |
UserIdentity id = new UserIdentity(); |
public class FileInfoImpl implements FileInfo { |
|
if (!sec.canExecute(java.lang.Thread.currentThread().getStackTrace()[1].getMethodName(), id)) { |
return null; |
} |
public Response getFiles(HttpHeaders h, String dir, boolean withDir, |
boolean withFiles, int level, String search, int count, int page) { |
|
StandardSecurityManager sec = new StandardSecurityManager(); |
UserIdentity id = new UserIdentity(); |
|
System.out.println("Listing directory: " + dir); |
if (level <= 0) level = 1; |
if (level > 3) level = 3; |
if ((!withDir) && (!withFiles)) withFiles = true; |
String cachekey = level + "||" + withFiles + "||" + withDir + "||" + search + "||" + dir; |
try { |
JCS jcs = JCS.getInstance("FileCache"); |
|
if( ! sec.canExecute(Thread.currentThread().getStackTrace()[1].getMethodName(), id)) { |
return null; |
} |
|
List list = (List)jcs.get(cachekey); |
if (list == null) { |
list = setDirectory(dir, withDir, withFiles, level, search); |
jcs.put(cachekey, list); |
System.out.println("Stored in Cache: " + list.toString()); |
} else { |
System.out.println("Got from Cache: " + list.toString()); |
} |
|
System.out.println("Listing directory: " + dir); |
if(level <= 0) level = 1; |
if(level > 3) level = 3; |
if(!withDir && !withFiles) withFiles = true; |
String cachekey = level +"||"+ withFiles +"||"+ withDir +"||" + search + "||" + dir; |
try { |
JCS jcs = JCS.getInstance("FileCache"); |
|
List<FileInfoType> list = (List<FileInfoType>) jcs.get(cachekey); |
if(list == null) { |
list = setDirectory(dir, withDir, withFiles, level, search); |
jcs.put(cachekey, list); |
System.out.println("Stored in Cache: " + list.toString()); |
} else { |
System.out.println("Got from Cache: " + list.toString()); |
} |
|
int fromIndex = 0; |
int toIndex = 0; |
fromIndex = (page - 1) * count; |
toIndex = page * count; |
if (toIndex > list.size()) toIndex = list.size(); |
if (fromIndex > toIndex) fromIndex = toIndex; |
GenericEntity sublist = new GenericEntity(list.subList(fromIndex, toIndex)) |
{ |
}; |
return Response.ok(sublist).build(); |
} catch (CacheException e) { |
Response.serverError().build(); |
} |
return null; |
} |
|
int fromIndex = 0; |
int toIndex = 0; |
fromIndex = (page-1) * count; |
toIndex = (page*count); |
if(toIndex>list.size()) toIndex = list.size(); |
if(fromIndex>toIndex) fromIndex=toIndex; |
GenericEntity<List<FileInfoType>> sublist = new GenericEntity<List<FileInfoType>>(list.subList(fromIndex, toIndex) ){}; |
return Response.ok( sublist ).build(); |
} catch (CacheException e) { |
Response.serverError().build(); |
} |
return null; |
} |
|
private void setDirectory(List<FileInfoType> list, File dir, boolean withDirectories, boolean withFiles, final int depth, final String search) |
{ |
if (depth <= 0) return; |
|
File[] files = dir.listFiles(new FileFilter() |
{ |
public boolean accept(File pathname) { |
if ((pathname.isDirectory()) && (depth > 1)) return true; |
if ((search == null) || (search.equals(""))) return true; |
if (!pathname.getAbsolutePath().contains(search)) return false; |
return true; |
} |
}); |
if ((dir.getParentFile() != null) && (withDirectories)) list.add(new FileInfoType(dir.getParentFile())); |
if (files == null) return; |
|
for (File e : files) { |
if (e.isDirectory()) setDirectory(list, e, withDirectories, withFiles, depth - 1, search); |
if (((withDirectories) && (e.isDirectory())) || ( |
(withFiles) && (e.isFile()))) |
list.add(new FileInfoType(e)); |
} |
} |
|
private List<FileInfoType> setDirectory(String dir, boolean withDirectories, boolean withFiles, int depth, String search) |
{ |
List list = new ArrayList(); |
setDirectory(list, new File(dir), withDirectories, withFiles, depth, search); |
return list; |
} |
} |
|
private void setDirectory(List<FileInfoType> list, File dir, final boolean withDirectories, final boolean withFiles, final int depth, final String search) { |
if(depth <=0) return; |
|
File[] files = dir.listFiles(new FileFilter() { |
|
public boolean accept(File pathname) { |
if(pathname.isDirectory() && depth > 1) return true; |
if(search == null || search.equals("")) return true; |
if(!pathname.getAbsolutePath().contains(search)) return false; |
return true; |
} |
}); |
if(dir.getParentFile() != null && withDirectories==true) list.add(new FileInfoType(dir.getParentFile())); |
if(files==null) return; |
|
for( File e : files) { |
if(e.isDirectory()) setDirectory(list, e, withDirectories, withFiles, depth-1, search); |
if( (withDirectories && e.isDirectory()) |
|| (withFiles && e.isFile()) ) { |
list.add(new FileInfoType(e)); |
} |
} |
} |
|
private List<FileInfoType> setDirectory(String dir, final boolean withDirectories, final boolean withFiles, int depth, String search) { |
List<FileInfoType> list = new ArrayList<FileInfoType>(); |
setDirectory( list, (new File(dir)), withDirectories, withFiles, depth, search); |
return list; |
} |
|
|
|
} |