Package org.zkforge.ckez

Source Code of org.zkforge.ckez.FilebrowserController$ExplorerTreeitemRenderer

/* FilebrowserController.java

{{IS_NOTE
Purpose:
Description:
History:
Thu Nov 18 14:07:45     2010, Created by Jimmy Shiau
}}IS_NOTE

Copyright (C) 2009 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
}}IS_RIGHT
*/
package org.zkforge.ckez;
/**
*
* @author Jimmy Shiau
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.zkoss.lang.Strings;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.UiException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.DefaultTreeModel;
import org.zkoss.zul.DefaultTreeNode;
import org.zkoss.zul.Div;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.TreeitemRenderer;

public class FilebrowserController extends GenericForwardComposer {
 
  private static final String[] EXCLUDE_FOLDERS = {"WEB-INF","META-INF"};
  private static final String[] EXCLUDE_FILES = {};
  private static final String[] IMAGES = {"gif","jpg","jpeg","png"};
  private static final String[] FILES = {"htm", "html", "php", "php3",
                      "php5", "phtml", "asp", "aspx",
                      "ascx", "jsp", "cfm", "cfc", "pl",
                      "bat", "exe", "dll", "reg", "cgi", "asmx"};
  private static final String[] FLASH = {"swf"};
  private static final String[] MEDIA = {"swf", "fla", "jpg", "gif", "jpeg", "png", "avi", "mpg", "mpeg"};
 
  private String type = "";
  private Map fileFilterMap;
 
  private Tree tree;
  private Div cntDiv;
  private Toolbarbutton selBtn;
 
  public void doAfterCompose(Component comp) throws Exception {
    super.doAfterCompose(comp);
   
    type = ((String[])param.get("Type"))[0];
    fileFilterMap = initFileFilterMap();
   
    String url = ((String[]) param.get("url"))[0];
    if (Strings.isBlank(url)) return;
   
    url = getFolderUrl(url);
    if (application.getResourcePaths(url) == null)
      throw new UiException("Folder not found: " + url);
   
    Map rootFolderMap = new TreeMap();
    Map map = new TreeMap();
    rootFolderMap.put(url, map);
   
    parseFolders(url, map);
   
    tree.setItemRenderer(new ExplorerTreeitemRenderer());
    tree.setModel(new DefaultTreeModel(new DefaultTreeNode("ROOT",initTreeModel(rootFolderMap, new ArrayList()))));
   
    showImages(map);
  }

  /*package*/ static String getFolderUrl(String url) {
//    int index = url.lastIndexOf(";jsessionid");
//    if (index > 0)
//      url = url.substring(0, index);
   
    if (url.startsWith("./"))
      url = url.substring(1);
   
    if (!url.startsWith("/"))
      url = "/" + url;
    return url;
  }

  private List initTreeModel(Map parentFolderMap, List list) {
    for (Iterator it = parentFolderMap.entrySet().iterator(); it.hasNext();) {
      Map.Entry entry = (Map.Entry)it.next();
      Object value = entry.getValue();
     
      if (value instanceof Map) {
        Map map = (Map) value;
        if (map.size() == 0) continue;
        ArrayList al = new ArrayList();
        list.add(new DefaultTreeNode(entry, al));
        initTreeModel(map, al);
      }
    }
    return list;
  }
 
  private Map parseFolders(String path, Map parentFolderMap) {
   
    Iterator it = application.getResourcePaths(path).iterator();
    while (it.hasNext()) {
      String pagePath = String.valueOf(it.next());
      if (pagePath.endsWith("/")) {
        String folderName = pagePath.substring(0, pagePath.length() - 1);
        folderName = folderName.substring(folderName.lastIndexOf("/") + 1);
        if (shallShowFile(folderName))
          parentFolderMap.put(folderName, parseFolders(pagePath, new TreeMap()));
      } else {
        String fileName = pagePath.substring(pagePath.lastIndexOf("/") + 1);
        String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
        if (shallShowFile(fileName) || shallShowFile(extension))
          parentFolderMap.put(fileName, pagePath);
      }
    }
    return parentFolderMap;
  }
 
 
  private boolean shallShowFile(String folderName) {
    // B70-CKEZ-22: Ignore file extension case.
    return new Boolean((String) fileFilterMap.get(folderName.toLowerCase())).booleanValue();
  }
 
 
  private Map initFileFilterMap() {
    Map fileFilterMap = new HashMap();
   
    for (int i = 0, j = EXCLUDE_FOLDERS.length; i < j; i++)
      fileFilterMap.put(EXCLUDE_FOLDERS[i], "false");
    for (int i = 0, j = EXCLUDE_FILES.length; i < j; i++)
      fileFilterMap.put(EXCLUDE_FILES[i], "false");
   
   
    if (type.equals("Flash"))
      for (int i = 0, j = FLASH.length; i < j; i++)
        fileFilterMap.put(FLASH[i], "true");
    else if (type.equals("Images"))
      for (int i = 0, j = IMAGES.length; i < j; i++)
        fileFilterMap.put(IMAGES[i], "true");
    else if (type.equals("Files")) {
      for (int i = 0, j = FLASH.length; i < j; i++)
        fileFilterMap.put(FLASH[i], "true");
      for (int i = 0, j = IMAGES.length; i < j; i++)
        fileFilterMap.put(IMAGES[i], "true");
      for (int i = 0, j = FILES.length; i < j; i++)
        fileFilterMap.put(FILES[i], "true");
    }
   
    return fileFilterMap;
  }
 

  public void onSelect$tree(){
    cntDiv.getChildren().clear();
    Treeitem item = tree.getSelectedItem();
    Map map = (Map)item.getValue();
   
    showImages(map);
  }
 
 
  private void showImages(Map map) {
    for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
      Map.Entry me = (Map.Entry) it.next();
      Object value = me.getValue();
      if (value instanceof Map) continue;
      String path = String.valueOf(value);
      String swfPath = "";
      if (path.endsWith("swf"))
        swfPath = "~./ckez/img/flashIcon.jpg";
      Toolbarbutton tb = new Toolbarbutton(String.valueOf(me.getKey()), "".equals(swfPath)? path: swfPath);
      tb.addEventListener("onClick", new EventListener() {
        public void onEvent(Event event) throws Exception {
          if (selBtn !=null)
            selBtn.setSclass(null);
          selBtn = (Toolbarbutton) event.getTarget();
          selBtn.setSclass("sel");
        }
      });
      int CKEditorFuncNum = 1;
      CKEditorFuncNum = new Integer(((String[])param.get("CKEditorFuncNum"))[0]).intValue();
      String script = "window.opener.CKEDITOR.tools.callFunction("+
        CKEditorFuncNum+", '" + execution.encodeURL(path) + "'); window.close(); ";
      tb.setWidgetListener("onDoubleClick",script);
     
      cntDiv.appendChild(tb);
    }
   
  }
 
  private class ExplorerTreeitemRenderer implements TreeitemRenderer {
    public void render(Treeitem item, Object data) throws Exception {
      Map.Entry entry = (Map.Entry)((DefaultTreeNode)data).getData();
      item.setLabel(String.valueOf(entry.getKey()));
      Object value = entry.getValue();
      item.setValue(value);
      item.setOpen(true);
      if (item.getParentItem() == null)
        item.setSelected(true);
    }

    public void render(Treeitem item, Object data, int index)
        throws Exception {
      render(item, data);
    }
  }
}
TOP

Related Classes of org.zkforge.ckez.FilebrowserController$ExplorerTreeitemRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.