Created
February 15, 2012 12:41
-
-
Save akihiro4chawon/1835424 to your computer and use it in GitHub Desktop.
ZK 6.0 FileExplorer Sample (in Scala/Java)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you! this was a very useful Scala sample code for me. but a little difficult for me.. ha ha (:D