Skip to content

Instantly share code, notes, and snippets.

@akihiro4chawon
Created February 15, 2012 12:41
Show Gist options
  • Save akihiro4chawon/1835424 to your computer and use it in GitHub Desktop.
Save akihiro4chawon/1835424 to your computer and use it in GitHub Desktop.
ZK 6.0 FileExplorer Sample (in Scala/Java)
package zkthisisanexam.fileexplorer;
import java.io.File;
import java.io.FileFilter;
import java.text.SimpleDateFormat;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.GenericForwardComposer;
//import org.zkoss.zkex.zul.West;
import org.zkoss.zul.West;
import org.zkoss.zul.AbstractTreeModel;
import org.zkoss.zul.Button;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treecell;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.TreeitemRenderer;
import org.zkoss.zul.Treerow;
public class FileExplorerComposer extends GenericForwardComposer{
Tree explorerTree;
Listbox explorerBox;
West west;
String root = "C:/";
public FileExplorerComposer(){
}
public String getRoot(){
return root;
}
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
explorerTree.setModel(new ExploerTreeModel(new File(root)));
explorerTree.setItemRenderer(new ExploerTreeRenderer());
explorerTree.addEventListener(Events.ON_SELECT, new DirectorySelectListener());
explorerBox.setItemRenderer(new ExploerBoxRenderer());
west.setTitle(root);
}
class ExploerTreeModel extends AbstractTreeModel{
public ExploerTreeModel(File root) {
super(root);
}
public Object getChild(Object parent, int index) {
File fs[] = ((File)parent).listFiles(new DirectoryOnlyFilter());
return fs==null?null:fs[index];
}
public int getChildCount(Object parent) {
File fs[] = ((File)parent).listFiles(new DirectoryOnlyFilter());
return fs==null?0:fs.length;
}
public boolean isLeaf(Object node) {
return getChildCount(node)==0;
}
}
class ExploerTreeRenderer implements TreeitemRenderer{
public void render(Treeitem item, Object data, int i) throws Exception {
File f = (File)data;
Treerow row = new Treerow();
row.setParent(item);
Treecell cell1 = new Treecell(f.getName(),"folder.png");
File fs[] = f.listFiles(new FileOnlyFilter());
Treecell cell2 = new Treecell(Integer.toString((fs==null?0:fs.length)));
cell1.setParent(row);
cell2.setParent(row);
item.setValue(data);
}
}
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
class ExploerBoxRenderer implements ListitemRenderer{
public void render(Listitem item, Object data, int i) throws Exception {
File f = (File)data;
new Listcell(f.getName()).setParent(item);
new Listcell(Long.toString(f.length())).setParent(item);
new Listcell(format.format(f.lastModified())).setParent(item);
Listcell actCell = new Listcell();
Button btn = new Button("Download");
btn.setParent(actCell);
btn.addEventListener(Events.ON_CLICK,new FileDownloadListener(f));
actCell.setParent(item);
}
}
class DirectorySelectListener implements EventListener{
public void onEvent(Event event) throws Exception {
File f = (File)explorerTree.getSelectedItem().getValue();
File[] fs = f.listFiles(new FileOnlyFilter());
explorerBox.setModel(new ListModelList(fs));
}
}
class FileDownloadListener implements EventListener{
File file;
public FileDownloadListener(File file){
this.file = file;
}
public void onEvent(Event event) throws Exception {
Filedownload.save(file,null);
}
}
class FileOnlyFilter implements FileFilter{
public boolean accept(File f) {
return f.isFile() && !f.isHidden();
}
}
class DirectoryOnlyFilter implements FileFilter{
public boolean accept(File f) {
return f.isDirectory() && !f.isHidden();
}
}
}
package zkthisisanexam.fileexplorer
import java.io.File
import java.io.FileFilter
import java.text.SimpleDateFormat
import org.zkoss.zk.ui.Component
import org.zkoss.zk.ui.event.Event
import org.zkoss.zk.ui.event.EventListener
import org.zkoss.zk.ui.event.Events
import org.zkoss.zk.ui.util.GenericForwardComposer
import org.zkoss.zul.West
import org.zkoss.zul.AbstractTreeModel
import org.zkoss.zul.Button
import org.zkoss.zul.Filedownload
import org.zkoss.zul.ListModelList
import org.zkoss.zul.Listbox
import org.zkoss.zul.Listcell
import org.zkoss.zul.Listitem
import org.zkoss.zul.ListitemRenderer
import org.zkoss.zul.Tree
import org.zkoss.zul.Treecell
import org.zkoss.zul.Treeitem
import org.zkoss.zul.TreeitemRenderer
import org.zkoss.zul.Treerow
import scala.reflect.BeanProperty
class FileExplorerComposerScala extends GenericForwardComposer[Component] {
// zk auto wire
var explorerTree: Tree = _
var explorerBox: Listbox = _
var west: West = _
@BeanProperty
val root = "C:/"
override def doAfterCompose(comp: Component) {
super.doAfterCompose(comp)
explorerTree.setModel(new ExplorerTreeModel(new File(root)))
explorerTree.setItemRenderer(new ExploerTreeRenderer())
explorerTree.addEventListener(Events.ON_SELECT, new DirectorySelectListener())
explorerBox.setItemRenderer(new ExploerBoxRenderer())
west.setTitle(root)
}
class ExplorerTreeModel(root: File) extends AbstractTreeModel[File](root) {
def getChild(parent: File, index: Int) = {
val fs = parent.listFiles(new DirectoryOnlyFilter)
if (fs == null) null else fs(index)
}
def getChildCount(parent: File) = {
val fs = parent.listFiles(new DirectoryOnlyFilter)
if (fs == null) 0 else fs.length
}
def isLeaf(node: File) = getChildCount(node) == 0
}
class ExploerTreeRenderer extends TreeitemRenderer[File] {
def render(item: Treeitem, file: File, i: Int) {
val row = new Treerow
row.setParent(item)
val cell1 = new Treecell(file.getName, "folder.png")
val fs = file.listFiles(new FileOnlyFilter)
val cell2 = new Treecell((if (fs == null) 0 else fs.length).toString)
cell1.setParent(row)
cell2.setParent(row)
item.setValue(file)
}
}
val fmt = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
class ExploerBoxRenderer extends ListitemRenderer[File] {
def render(item: Listitem, file: File, i: Int) {
new Listcell(file.getName).setParent(item)
new Listcell(file.length.toString).setParent(item)
new Listcell(fmt format file.lastModified).setParent(item)
val actCell = new Listcell()
val btn = new Button("Download")
btn.setParent(actCell)
btn.addEventListener(Events.ON_CLICK, new FileDownloadListener(file))
actCell.setParent(item)
}
}
class DirectorySelectListener extends EventListener[Event] {
def onEvent(evnet: Event) {
val file = explorerTree.getSelectedItem.getValue[File]
val fs = file.listFiles(new FileOnlyFilter)
explorerBox.setModel(new ListModelList(fs))
}
}
class FileDownloadListener(file: File) extends EventListener[Event] {
def onEvent(event: Event) {
Filedownload.save(file, null)
}
}
class FileOnlyFilter extends FileFilter {
def accept(f: File) = f.isFile && !f.isHidden
}
class DirectoryOnlyFilter extends FileFilter {
def accept(f: File) = f.isDirectory && !f.isHidden
}
}
package zkthisisanexam.fileexplorer
import java.io.File
import java.io.FileFilter
import java.text.SimpleDateFormat
import org.zkoss.zk.ui.Component
import org.zkoss.zk.ui.event.Event
import org.zkoss.zk.ui.event.EventListener
import org.zkoss.zk.ui.event.Events
import org.zkoss.zk.ui.util.GenericForwardComposer
import org.zkoss.zul.West
import org.zkoss.zul.AbstractTreeModel
import org.zkoss.zul.Button
import org.zkoss.zul.Filedownload
import org.zkoss.zul.ListModelList
import org.zkoss.zul.Listbox
import org.zkoss.zul.Listcell
import org.zkoss.zul.Listitem
import org.zkoss.zul.ListitemRenderer
import org.zkoss.zul.Tree
import org.zkoss.zul.Treecell
import org.zkoss.zul.Treeitem
import org.zkoss.zul.TreeitemRenderer
import org.zkoss.zul.Treerow
import scala.reflect.BeanProperty
import scalaz._
import Scalaz._
class FileExplorerComposerScalaZ extends GenericForwardComposer[Component] with MyImplicits {
// zk auto wire
var explorerTree: Tree = _
var explorerBox: Listbox = _
var west: West = _
@BeanProperty
val root = "C:/"
override def doAfterCompose(comp: Component) {
super.doAfterCompose(comp)
explorerTree.setModel(new ExplorerTreeModel(new File(root)))
explorerTree.setItemRenderer(new ExploerTreeRenderer())
explorerTree.addEventListener(Events.ON_SELECT, new DirectorySelectListener())
explorerBox.setItemRenderer(new ExploerBoxRenderer())
west.setTitle(root)
}
class ExplorerTreeModel(root: File) extends AbstractTreeModel[File](root) {
private def childrenOf(parent: File) =
parent.listFiles(directoryOnly _) ?? Array()
def getChild(parent: File, index: Int) =
childrenOf(parent)(index)
def getChildCount(parent: File) =
childrenOf(parent).length
def isLeaf(node: File) =
getChildCount(node) == 0
}
class ExploerTreeRenderer extends TreeitemRenderer[File] {
def render(item: Treeitem, file: File, i: Int) {
val row = new Treerow
row.setParent(item)
val cell1 = new Treecell(file.getName, "folder.png")
val fs = file.listFiles(fileOnly _)
val cell2 = new Treecell((~Option(fs)).length.toString)
cell1.setParent(row)
cell2.setParent(row)
item.setValue(file)
}
}
val fmt = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
class ExploerBoxRenderer extends ListitemRenderer[File] {
def render(item: Listitem, file: File, i: Int) {
new Listcell(file.getName).setParent(item)
new Listcell(file.length.toString).setParent(item)
new Listcell(fmt format file.lastModified).setParent(item)
val actCell = new Listcell()
val btn = new Button("Download")
btn.setParent(actCell)
btn.addEventListener(Events.ON_CLICK, new FileDownloadListener(file))
actCell.setParent(item)
}
}
class DirectorySelectListener extends EventListener[Event] {
def onEvent(evnet: Event) {
val file = explorerTree.getSelectedItem.getValue[File]
val fs = file.listFiles(fileOnly _)
explorerBox.setModel(new ListModelList(fs))
}
}
class FileDownloadListener(file: File) extends EventListener[Event] {
def onEvent(event: Event) {
Filedownload.save(file, null)
}
}
def fileOnly(f: File) = f.isFile && !f.isHidden()
def directoryOnly(f: File) = f.isDirectory && !f.isHidden
}
trait MyImplicits {
implicit def FunctionToFileFilter(pred: File => Boolean): FileFilter = new FileFilter {
def accept(file: File) = pred(file)
}
}
@hiroxpepe
Copy link

Thank you! this was a very useful Scala sample code for me. but a little difficult for me.. ha ha (:D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment