BrightSide Workbench Full Report + Source Code
FilebrowserController_CK446.java
Go to the documentation of this file.
1 /* FilebrowserController_CK446.java
2 
3  {{IS_NOTE
4  Purpose:
5 
6  Description:
7 
8  History:
9  Thu Nov 18 14:07:45 2010, Created by Jimmy Shiau
10  }}IS_NOTE
11 
12  Copyright (C) 2009 Potix Corporation. All Rights Reserved.
13 
14  {{IS_RIGHT
15  }}IS_RIGHT
16  */
17 package org.zkforge.ckez;
22 import java.util.ArrayList;
23 import java.util.HashMap;
24 import java.util.Iterator;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Set;
28 import java.util.TreeMap;
29 import org.zkoss.lang.Strings;
30 import org.zkoss.zk.ui.Component;
31 import org.zkoss.zk.ui.UiException;
32 import org.zkoss.zk.ui.event.Event;
33 import org.zkoss.zk.ui.event.EventListener;
34 import org.zkoss.zk.ui.util.GenericForwardComposer;
35 import org.zkoss.zul.DefaultTreeModel;
36 import org.zkoss.zul.DefaultTreeNode;
37 import org.zkoss.zul.Div;
38 import org.zkoss.zul.Toolbarbutton;
39 import org.zkoss.zul.Tree;
40 import org.zkoss.zul.Treeitem;
41 import org.zkoss.zul.TreeitemRenderer;
42 
43 public class FilebrowserController_CK446 extends GenericForwardComposer {
44 
45  private static final String[] EXCLUDE_FOLDERS = {"WEB-INF","META-INF"};
46  private static final String[] EXCLUDE_FILES = {};
47  private static final String[] IMAGES = {"gif","jpg","jpeg","png"};
48  private static final String[] FILES = {"htm", "html", "pdf", "xls", "doc", "ppt"};
49  private static final String[] FLASH = {"swf"};
50  private static final String[] MEDIA = {"swf", "fla", "jpg", "gif", "jpeg", "png", "avi", "mpg", "mpeg"};
51 
52  private String type = "";
53  private Map fileFilterMap;
54 
55  private Tree tree;
56  private Div cntDiv;
57  private Toolbarbutton selBtn;
58 
59  @Override
60  public void doAfterCompose(Component comp) throws Exception {
61  super.doAfterCompose(comp);
62 
63  type = ((String[])param.get("Type"))[0];
64  fileFilterMap = initFileFilterMap();
65 
66  String url = ((String[]) param.get("url"))[0];
67  if (Strings.isBlank(url)) return;
68 
69  url = getFolderUrl(url);
70  if (application.getResourcePaths(url) == null)
71  throw new UiException("Folder not found: " + url);
72 
73  Map rootFolderMap = new TreeMap();
74  Map map = new TreeMap();
75  rootFolderMap.put(url, map);
76 
77  parseFolders(url, map);
78 
79  tree.setItemRenderer(new ExplorerTreeitemRenderer());
80  tree.setModel(new DefaultTreeModel(new DefaultTreeNode("ROOT",initTreeModel(rootFolderMap, new ArrayList()))));
81 
82  showImages(map);
83  }
84 
85  /*package*/ static String getFolderUrl(String url) {
86 // int index = url.lastIndexOf(";jsessionid");
87 // if (index > 0)
88 // url = url.substring(0, index);
89 
90  if (url.startsWith("./"))
91  url = url.substring(1);
92 
93  if (!url.startsWith("/"))
94  url = "/" + url;
95  return url;
96  }
97 
98  private List initTreeModel(Map parentFolderMap, List list) {
99  for (Iterator it = parentFolderMap.entrySet().iterator(); it.hasNext();) {
100  Map.Entry entry = (Map.Entry)it.next();
101  Object value = entry.getValue();
102 
103  if (value instanceof Map)
104  list.add(new DefaultTreeNode(entry, initTreeModel((Map) value, new ArrayList())));
105  }
106  return list;
107  }
108 
109  private Map parseFolders(String path, Map parentFolderMap) {
110 
111  if(path != null) {
112  Set<String> resPath = application.getResourcePaths(path);
113  if(resPath != null) {
114  Iterator it = resPath.iterator();
115  while (it.hasNext()) {
116  String pagePath = String.valueOf(it.next());
117  if(pagePath != null) {
118  if (pagePath.endsWith("/")) {
119  String folderName = pagePath.substring(0, pagePath.length() - 1);
120  folderName = folderName.substring(folderName.lastIndexOf("/") + 1);
121  if (shallShowFolder(folderName))
122  parentFolderMap.put(folderName, parseFolders(pagePath, new TreeMap()));
123  } else {
124  String fileName = pagePath.substring(pagePath.lastIndexOf("/") + 1);
125  String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
126  if (shallShowFile(fileName) || shallShowFile(extension))
127  parentFolderMap.put(fileName, pagePath);
128  }
129  }
130  }
131  }
132  }
133  return parentFolderMap;
134  }
135 
136  private boolean shallShowFolder(String folderName) {
137  Object obj = fileFilterMap.get(folderName);
138  return (obj == null) ? true : Boolean.valueOf((String) obj).booleanValue();
139  }
140 
141  private boolean shallShowFile(String folderName) {
142  // B70-CKEZ-22: Ignore file extension case.
143  return Boolean.valueOf((String) fileFilterMap.get(folderName.toLowerCase())).booleanValue();
144  }
145 
146  private Map initFileFilterMap() {
147  Map fileFilterMap = new HashMap();
148 
149  for (int i = 0, j = EXCLUDE_FOLDERS.length; i < j; i++)
150  fileFilterMap.put(EXCLUDE_FOLDERS[i], "false");
151  for (int i = 0, j = EXCLUDE_FILES.length; i < j; i++)
152  fileFilterMap.put(EXCLUDE_FILES[i], "false");
153 
154 
155  if (type.equals("Flash"))
156  for (int i = 0, j = FLASH.length; i < j; i++)
157  fileFilterMap.put(FLASH[i], "true");
158  else if (type.equals("Images"))
159  for (int i = 0, j = IMAGES.length; i < j; i++)
160  fileFilterMap.put(IMAGES[i], "true");
161  else if (type.equals("Files")) {
162  for (int i = 0, j = FLASH.length; i < j; i++)
163  fileFilterMap.put(FLASH[i], "true");
164  for (int i = 0, j = IMAGES.length; i < j; i++)
165  fileFilterMap.put(IMAGES[i], "true");
166  for (int i = 0, j = FILES.length; i < j; i++)
167  fileFilterMap.put(FILES[i], "true");
168  }
169 
170  return fileFilterMap;
171  }
172 
173 
174  public void onSelect$tree(){
175  cntDiv.getChildren().clear();
176  Treeitem item = tree.getSelectedItem();
177  Map map = (Map)item.getValue();
178 
179  showImages(map);
180  }
181 
182 
183  private void showImages(Map map) {
184  for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
185  Map.Entry me = (Map.Entry) it.next();
186  Object value = me.getValue();
187  if (value instanceof Map) continue;
188  String path = String.valueOf(value);
189  String swfPath = "";
190  if (path.endsWith("swf"))
191  swfPath = "~./ckez/img/flashIcon.jpg";
192  Toolbarbutton tb = new Toolbarbutton(String.valueOf(me.getKey()), "".equals(swfPath)? path: swfPath);
193  tb.addEventListener("onClick", new EventListener() {
194  @Override
195  public void onEvent(Event event) throws Exception {
196  if (selBtn !=null)
197  selBtn.setSclass(null);
198  selBtn = (Toolbarbutton) event.getTarget();
199  selBtn.setSclass("sel");
200  }
201  });
202  int CKEditorFuncNum = 1;
203  CKEditorFuncNum = new Integer(((String[])param.get("CKEditorFuncNum"))[0]).intValue();
204  String script = "window.opener.CKEDITOR.tools.callFunction("+
205  CKEditorFuncNum+", '" + execution.encodeURL(path) + "'); window.close(); ";
206  tb.setWidgetListener("onDoubleClick",script);
207 
208  cntDiv.appendChild(tb);
209  }
210 
211  }
212 
213  private class ExplorerTreeitemRenderer implements TreeitemRenderer {
214  public void render(Treeitem item, Object data) throws Exception {
215  Map.Entry entry = (Map.Entry)((DefaultTreeNode)data).getData();
216  item.setLabel(String.valueOf(entry.getKey()));
217  Object value = entry.getValue();
218  item.setValue(value);
219  item.setOpen(true);
220  if (item.getParentItem() == null)
221  item.setSelected(true);
222  }
223 
224  @Override
225  public void render(Treeitem item, Object data, int index)
226  throws Exception {
227  render(item, data);
228  }
229  }
230 }