17 package org.zkforge.ckez;
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.*;
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"};
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;
48 private Toolbarbutton selBtn;
52 super.doAfterCompose(comp);
54 type = ((String[]) param.get(
"Type"))[0];
55 fileFilterMap = initFileFilterMap();
57 String url = ((String[]) param.get(
"url"))[0];
58 if (Strings.isBlank(url)) {
62 url = getFolderUrl(url);
63 if (application.getResourcePaths(url) ==
null) {
64 throw new UiException(
"Folder not found: " + url);
67 Map rootFolderMap =
new TreeMap();
68 Map map =
new TreeMap();
69 rootFolderMap.put(url, map);
71 parseFolders(url, map);
73 tree.setItemRenderer(
new ExplorerTreeitemRenderer());
74 tree.setModel(
new DefaultTreeModel(
new DefaultTreeNode(
"ROOT", initTreeModel(rootFolderMap,
new ArrayList()))));
81 static String getFolderUrl(String url) {
86 if (url.startsWith(
"./")) {
87 url = url.substring(1);
90 if (!url.startsWith(
"/")) {
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();
101 if (value instanceof Map) {
102 Map map = (Map) value;
106 ArrayList al =
new ArrayList();
107 initTreeModel(map, al);
108 list.add(
new DefaultTreeNode(entry, al));
114 private Map parseFolders(String path, Map parentFolderMap) {
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);
123 parentFolderMap.put(folderName, parseFolders(pagePath,
new TreeMap()));
126 String fileName = pagePath.substring(pagePath.lastIndexOf(
"/") + 1);
127 if (shallShowFile(fileName)) {
128 parentFolderMap.put(fileName, pagePath);
132 return parentFolderMap;
135 private boolean shallShowFile(String folderName) {
136 return !folderName.endsWith(
".jsp") &&
137 !folderName.endsWith(
".zul") &&
138 !folderName.endsWith(
".zhtml") &&
139 !folderName.endsWith(
".php");
143 private Map initFileFilterMap() {
144 Map _fileFilterMap =
new HashMap();
146 for (
int i = 0, j = EXCLUDE_FOLDERS.length; i < j; i++) {
147 _fileFilterMap.put(EXCLUDE_FOLDERS[i],
"false");
149 for (
int i = 0, j = EXCLUDE_FILES.length; i < j; i++) {
150 _fileFilterMap.put(EXCLUDE_FILES[i],
"false");
154 if (type.equals(
"Flash")) {
155 for (
int i = 0, j = FLASH.length; i < j; i++) {
156 _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");
162 }
else if (type.equals(
"Files")) {
163 for (
int i = 0, j = FLASH.length; i < j; i++) {
164 _fileFilterMap.put(FLASH[i],
"true");
166 for (
int i = 0, j = IMAGES.length; i < j; i++) {
167 _fileFilterMap.put(IMAGES[i],
"true");
169 for (
int i = 0, j = FILES.length; i < j; i++) {
170 _fileFilterMap.put(FILES[i],
"true");
174 return _fileFilterMap;
178 cntDiv.getChildren().clear();
179 Treeitem item = tree.getSelectedItem();
180 Map map = (Map) item.getValue();
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) {
192 String path = String.valueOf(value);
194 if (path.endsWith(
"swf")) {
195 swfPath =
"~./ckez/img/flashIcon.jpg";
197 Toolbarbutton tb =
new Toolbarbutton(String.valueOf(me.getKey()),
"".equals(swfPath) ? path : swfPath);
198 tb.addEventListener(
"onClick",
new EventListener() {
201 public void onEvent(Event event)
throws Exception {
202 if (selBtn !=
null) {
203 selBtn.setSclass(
null);
205 selBtn = (Toolbarbutton) event.getTarget();
206 selBtn.setSclass(
"sel");
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);
215 cntDiv.appendChild(tb);
220 private class ExplorerTreeitemRenderer
implements TreeitemRenderer {
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);
229 if (item.getParentItem() ==
null) {
230 item.setSelected(
true);
void doAfterCompose(Component comp)