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