Skip to content
Snippets Groups Projects
Commit 2341e54e authored by srosse's avatar srosse
Browse files

OO-531: replce the SelectionTree of the file chooser by the MenuTree

parent bc374855
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,8 @@ import org.olat.core.util.vfs.VFSItem; ...@@ -35,6 +35,8 @@ import org.olat.core.util.vfs.VFSItem;
*/ */
public class FileChoosenEvent extends Event { public class FileChoosenEvent extends Event {
private static final long serialVersionUID = 6650009491560019373L;
public static final String COMMAND = "fileSelected"; public static final String COMMAND = "fileSelected";
private VFSItem selectedItem; private VFSItem selectedItem;
......
...@@ -22,8 +22,10 @@ package org.olat.core.commons.controllers.filechooser; ...@@ -22,8 +22,10 @@ package org.olat.core.commons.controllers.filechooser;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.tree.SelectionTree; import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.tree.MenuTree;
import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.tree.TreeEvent;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.controller.BasicController;
...@@ -59,7 +61,8 @@ import org.olat.core.util.vfs.filters.VFSItemFilter; ...@@ -59,7 +61,8 @@ import org.olat.core.util.vfs.filters.VFSItemFilter;
public class FileChooserController extends BasicController { public class FileChooserController extends BasicController {
private Link cancelLink, selectLink; private Link cancelLink, selectLink;
private SelectionTree selectionTree; private MenuTree selectionTree;
private VelocityContainer mainVC;
private FolderTreeModel treeModel; private FolderTreeModel treeModel;
private VFSItem selectedItem; private VFSItem selectedItem;
...@@ -88,11 +91,16 @@ public class FileChooserController extends BasicController { ...@@ -88,11 +91,16 @@ public class FileChooserController extends BasicController {
this.onlyLeafsSelectable = onlyLeafsSelectable; this.onlyLeafsSelectable = onlyLeafsSelectable;
treeModel = new FolderTreeModel(ureq.getLocale(), rootContainer, false, true, !onlyLeafsSelectable, false, customItemFilter); treeModel = new FolderTreeModel(ureq.getLocale(), rootContainer, false, true, !onlyLeafsSelectable, false, customItemFilter);
selectionTree = new SelectionTree("stTree", getTranslator()); selectionTree = new MenuTree("stTree");
selectionTree.setTreeModel(treeModel); selectionTree.setTreeModel(treeModel);
selectionTree.addListener(this); selectionTree.addListener(this);
selectionTree.setFormButtonKey("select");
putInitialPanel(selectionTree); mainVC = createVelocityContainer("filechooserajax");
mainVC.put("treeCtr", selectionTree);
selectLink = LinkFactory.createButton("select", mainVC, this);
cancelLink = LinkFactory.createButton("cancel", mainVC, this);
putInitialPanel(mainVC);
} }
/** /**
...@@ -118,16 +126,9 @@ public class FileChooserController extends BasicController { ...@@ -118,16 +126,9 @@ public class FileChooserController extends BasicController {
} }
} else if (source == selectionTree) { } else if (source == selectionTree) {
TreeEvent te = (TreeEvent) event; TreeEvent te = (TreeEvent) event;
if (te.getCommand().equals(TreeEvent.COMMAND_TREENODE_CLICKED)) { if (te.getCommand().equals(MenuTree.COMMAND_TREENODE_CLICKED)) {
String selectedPath = treeModel.getSelectedPath(selectionTree.getSelectedNode()); String selectedPath = treeModel.getSelectedPath(selectionTree.getSelectedNode());
selectedItem = rootContainer.resolve(selectedPath); selectedItem = rootContainer.resolve(selectedPath);
if (selectedItem != null) {
fireEvent(ureq, new FileChoosenEvent(selectedItem));
} else {
fireEvent(ureq, Event.FAILED_EVENT);
}
} else if (te.getCommand().equals(TreeEvent.COMMAND_CANCELLED)) {
fireEvent(ureq, Event.CANCELLED_EVENT);
} }
} }
} }
...@@ -135,9 +136,5 @@ public class FileChooserController extends BasicController { ...@@ -135,9 +136,5 @@ public class FileChooserController extends BasicController {
@Override @Override
protected void doDispose() { protected void doDispose() {
// Controllers auto disposed by basic controller. NULL composite objects to help GC // Controllers auto disposed by basic controller. NULL composite objects to help GC
cancelLink = null;
selectLink = null;
treeModel = null;
selectionTree = null;
} }
} }
\ No newline at end of file
#if($showTitle) #if($showTitle)
<h4>$r.translate("filechooser.tree.select.title")</h4> <h4>$r.translate("filechooser.tree.select.title")</h4>
<p> <p>$r.translate("filechooser.tree.select.intro")</p>
$r.translate("filechooser.tree.select.intro")
</p>
#end #end
$r.render("treeCtr") $r.render("treeCtr")
<div class="b_button_group"> <div class="b_button_group">
......
...@@ -30,6 +30,7 @@ package org.olat.core.gui.control.generic.folder; ...@@ -30,6 +30,7 @@ package org.olat.core.gui.control.generic.folder;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale; import java.util.Locale;
import java.util.Set;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
...@@ -46,14 +47,14 @@ import org.olat.core.util.Util; ...@@ -46,14 +47,14 @@ import org.olat.core.util.Util;
public class FolderHelper { public class FolderHelper {
private static final String FILETYPES = "avi bat bmp css doc docx dvi exe gif gz htm html jpeg jpg log midi mov mp3 mpeg mpg pdf png ppt pptx ps ra ram readme rtf tar tgz txt wav xls xlsx xml xsl zip"; private static final String FILETYPES = "avi bat bmp css doc docx dvi exe gif gz htm html jpeg jpg log midi mov mp3 mpeg mpg pdf png ppt pptx ps ra ram readme rtf tar tgz txt wav xls xlsx xml xsl zip";
private static HashSet knownFileTypes; private static Set<String> knownFileTypes;
static { static {
// initialize known filetypes for faster access // initialize known filetypes for faster access
FolderHelper.knownFileTypes = new HashSet(); FolderHelper.knownFileTypes = new HashSet<String>();
StringTokenizer st = new StringTokenizer(FILETYPES, " "); StringTokenizer st = new StringTokenizer(FILETYPES, " ");
while (st.hasMoreElements()) { while (st.hasMoreElements()) {
FolderHelper.knownFileTypes.add(st.nextElement()); FolderHelper.knownFileTypes.add(st.nextToken());
} }
} }
......
...@@ -48,6 +48,8 @@ import org.olat.core.util.vfs.filters.VFSItemFilter; ...@@ -48,6 +48,8 @@ import org.olat.core.util.vfs.filters.VFSItemFilter;
*/ */
public class FolderTreeModel extends GenericTreeModel { public class FolderTreeModel extends GenericTreeModel {
private static final long serialVersionUID = 7930807550759664872L;
private boolean foldersOnly = false; private boolean foldersOnly = false;
private boolean selectableFiles = false; private boolean selectableFiles = false;
private boolean selectableFolders = true; private boolean selectableFolders = true;
...@@ -96,19 +98,19 @@ public class FolderTreeModel extends GenericTreeModel { ...@@ -96,19 +98,19 @@ public class FolderTreeModel extends GenericTreeModel {
} }
private boolean buildTree(TreeNode tParent, VFSContainer parentContainer, String parentPath) { private boolean buildTree(TreeNode tParent, VFSContainer parentContainer, String parentPath) {
List children = parentContainer.getItems(fileFilter); List<VFSItem> children = parentContainer.getItems(fileFilter);
if (children.size() == 0) return false; if (children.size() == 0) return false;
// sort the children // sort the children
Collections.sort(children, new Comparator(){ Collections.sort(children, new Comparator<VFSItem>(){
final Collator c = collator; final Collator c = collator;
public int compare(final Object o1, final Object o2) { public int compare(final VFSItem o1, final VFSItem o2) {
return c.compare(((VFSItem)o1).getName(), ((VFSItem)o2).getName()); return c.compare(o1.getName(), o2.getName());
}}); }});
boolean addedAtLeastOneChild = false; boolean addedAtLeastOneChild = false;
for (Iterator iter = children.iterator(); iter.hasNext();) { for (Iterator<VFSItem> iter = children.iterator(); iter.hasNext();) {
VFSItem child = (VFSItem) iter.next(); VFSItem child = iter.next();
String childName = child.getName(); String childName = child.getName();
if (child instanceof VFSContainer) { if (child instanceof VFSContainer) {
// container node // container node
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment