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;
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;
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"};
52 private String type =
"";
53 private Map fileFilterMap;
57 private Toolbarbutton selBtn;
61 super.doAfterCompose(comp);
63 type = ((String[])param.get(
"Type"))[0];
64 fileFilterMap = initFileFilterMap();
66 String url = ((String[]) param.get(
"url"))[0];
67 if (Strings.isBlank(url))
return;
69 url = getFolderUrl(url);
70 if (application.getResourcePaths(url) ==
null)
71 throw new UiException(
"Folder not found: " + url);
73 Map rootFolderMap =
new TreeMap();
74 Map map =
new TreeMap();
75 rootFolderMap.put(url, map);
77 parseFolders(url, map);
79 tree.setItemRenderer(
new ExplorerTreeitemRenderer());
80 tree.setModel(
new DefaultTreeModel(
new DefaultTreeNode(
"ROOT",initTreeModel(rootFolderMap,
new ArrayList()))));
85 static String getFolderUrl(String url) {
90 if (url.startsWith(
"./"))
91 url = url.substring(1);
93 if (!url.startsWith(
"/"))
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();
103 if (value instanceof Map)
104 list.add(
new DefaultTreeNode(entry, initTreeModel((Map) value,
new ArrayList())));
109 private Map parseFolders(String path, Map parentFolderMap) {
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()));
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);
133 return parentFolderMap;
136 private boolean shallShowFolder(String folderName) {
137 Object obj = fileFilterMap.get(folderName);
138 return (obj ==
null) ? true : Boolean.valueOf((String) obj).booleanValue();
141 private boolean shallShowFile(String folderName) {
143 return Boolean.valueOf((String) fileFilterMap.get(folderName.toLowerCase())).booleanValue();
146 private Map initFileFilterMap() {
147 Map fileFilterMap =
new HashMap();
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");
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");
170 return fileFilterMap;
175 cntDiv.getChildren().clear();
176 Treeitem item = tree.getSelectedItem();
177 Map map = (Map)item.getValue();
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);
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() {
195 public void onEvent(Event event)
throws Exception {
197 selBtn.setSclass(
null);
198 selBtn = (Toolbarbutton) event.getTarget();
199 selBtn.setSclass(
"sel");
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);
208 cntDiv.appendChild(tb);
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);
220 if (item.getParentItem() ==
null)
221 item.setSelected(
true);
225 public void render(Treeitem item, Object data,
int index)
void doAfterCompose(Component comp)