Author: solomax
Date: Wed Aug 10 05:34:01 2016
New Revision: 1755671

URL: http://svn.apache.org/viewvc?rev=1755671&view=rev
Log:
[OPENMEETINGS-1030] file tree now works better (no visual glitches)

Added:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
Removed:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java
Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
 Wed Aug 10 05:34:01 2016
@@ -70,13 +70,13 @@ public abstract class AddFolderDialog ex
                                });
                        }
                };
-               add(form);
+               add(form.setOutputMarkupId(true));
        }
 
        @Override
        protected void onOpen(IPartialPageRequestHandler handler) {
                super.onOpen(handler);
-               
+               handler.add(form);
                setModelObject(name);
                getFeedbackMessages().clear();
        }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 Wed Aug 10 05:34:01 2016
@@ -34,31 +34,32 @@ import org.apache.wicket.markup.repeater
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
-public class FileItemTree<T extends FileItem> extends DefaultNestedTree<T> {
+public class FileItemTree extends DefaultNestedTree<FileItem> {
        private static final long serialVersionUID = 1L;
        private final FileTreePanel treePanel;
-       private final IModel<T> selectedItem = Model.of((T)null);
 
-       public FileItemTree(String id, FileTreePanel treePanel, 
ITreeProvider<T> tp) {
+       public FileItemTree(String id, FileTreePanel treePanel, 
ITreeProvider<FileItem> tp) {
                super(id, tp);
                this.treePanel = treePanel;
                setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
        }
        
        @Override
-       protected Component newContentComponent(String id, IModel<T> node) {
-               return new Folder<T>(id, this, node) {
+       protected Component newContentComponent(String id, IModel<FileItem> 
node) {
+               return new Folder<FileItem>(id, this, node) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       protected Component newLabelComponent(String id, final 
IModel<T> lm) {
+                       protected Component newLabelComponent(String id, final 
IModel<FileItem> lm) {
                                FileItem r = lm.getObject();
-                               return Type.Folder == r.getType() || r.getId() 
< 1 ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, treePanel);
+                               return Type.Folder == r.getType() || r.getId() 
== null ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, 
treePanel);
                        }
                        
                        @Override
                        protected boolean isSelected() {
-                               return 
getModelObject().getId().equals(treePanel.selectedFile.getObject().getId());
+                               FileItem f = getModelObject(), s = 
treePanel.getSelected();
+                               return (s.getId() == null && s.getId() == 
f.getId() && s.getHash().equals(f.getHash()))
+                                               || (s.getId() != null && 
s.getId().equals(f.getId()));
                        }
                        
                        @Override
@@ -68,28 +69,21 @@ public class FileItemTree<T extends File
                        
                        @Override
                        protected void onClick(AjaxRequestTarget target) {
-                               T r = getModelObject();
-                               treePanel.selected.resetSelected(target);
-                               selectedItem.setObject(r);
-                               treePanel.selectedFile.setObject(r);
-                               treePanel.selected = FileItemTree.this;
+                               FileItem r = getModelObject();
+                               treePanel.setSelected(r, target);
                                if (Type.Folder == r.getType()) {
                                        if (getState(r) == State.COLLAPSED) {
                                                super.onClick(target);
                                        }
-                                       updateBranch(r, target);
                                } else {
                                        treePanel.update(target, r);
-                                       updateNode(r, target);
                                }
                        }
                        
-                       private String getItemStyle(T f, String def) {
+                       private String getItemStyle(FileItem f, String def) {
                                String style;
-                               if (f.getId() == 0) {
-                                       style = "my file om-icon";
-                               } else if (f.getId() < 0) {
-                                       style = "public file om-icon";
+                               if (f.getId() == null) {
+                                       style = f.getHash().indexOf("my") > -1 
? "my file om-icon" : "public file om-icon";
                                } else {
                                        switch(f.getType()) {
                                                case Folder:
@@ -129,7 +123,7 @@ public class FileItemTree<T extends File
                        }
                        
                        @Override
-                       protected String getOtherStyleClass(T r) {
+                       protected String getOtherStyleClass(FileItem r) {
                                return getItemStyle(r, 
super.getOtherStyleClass(r));
                        }
                        
@@ -149,27 +143,9 @@ public class FileItemTree<T extends File
                        }
                        
                        @Override
-                       protected IModel<String> newLabelModel(IModel<T> model) 
{
+                       protected IModel<String> newLabelModel(IModel<FileItem> 
model) {
                                return Model.of(model.getObject().getName());
                        }
                };
        }
-
-       private void resetSelected(AjaxRequestTarget target) {
-               T _prev = selectedItem.getObject();
-               if (_prev != null) {
-                       if (Type.Folder == _prev.getType()) {
-                               updateBranch(_prev, target);
-                       } else {
-                               updateNode(_prev, target);
-                       }
-                       selectedItem.setObject(null);
-               }
-       }
-       
-       @Override
-       protected void onDetach() {
-               selectedItem.detach();
-               super.onDetach();
-       }
 }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
 Wed Aug 10 05:34:01 2016
@@ -37,9 +37,7 @@
                </div>
                <div wicket:id="tree-container" class="trees">
                        <div id="tree-anchor" style="height: 2px; width: 
2px;"></div>
-                       <div wicket:id="tree">
-                               <div wicket:id="item"></div>
-                       </div>
+                       <div wicket:id="tree"></div>
                </div>
                <div class="sizes" wicket:id="sizes">
                        <table>

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 Wed Aug 10 05:34:01 2016
@@ -21,7 +21,6 @@ package org.apache.openmeetings.web.comm
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.UUID;
 
@@ -39,12 +38,9 @@ import org.apache.wicket.ajax.AjaxEventB
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.CallbackParameter;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
@@ -61,41 +57,28 @@ public abstract class FileTreePanel exte
        private static final long serialVersionUID = 1L;
        final WebMarkupContainer trees = new 
WebMarkupContainer("tree-container");
        private final WebMarkupContainer sizes = new 
WebMarkupContainer("sizes");
-       protected final IModel<FileItem> selectedFile = new 
CompoundPropertyModel<FileItem>((FileItem)null);
+       private final IModel<FileItem> selected = new 
CompoundPropertyModel<FileItem>((FileItem)null);
        protected final IModel<String> homeSize = Model.of((String)null);
        protected final IModel<String> publicSize = Model.of((String)null);
        final ConvertingErrorsDialog errorsDialog = new 
ConvertingErrorsDialog("errors", Model.of((Recording)null));
-       protected FileItemTree<? extends FileItem> selected;
-       protected ListView<ITreeProvider<? extends FileItem>> treesView = new 
ListView<ITreeProvider<? extends FileItem>>("tree", new 
ArrayList<ITreeProvider<? extends FileItem>>()) {
-               private static final long serialVersionUID = 1L;
-
-               @Override
-               protected void populateItem(ListItem<ITreeProvider<? extends 
FileItem>> item) {
-                       @SuppressWarnings({ "unchecked", "rawtypes" }) //TODO 
investigate this
-                       FileItemTree<? extends FileItem> fit = new 
FileItemTree("item", FileTreePanel.this, item.getModelObject());
-                       if (selected == null) {
-                               selected = fit;
-                       }
-                       item.add(fit);
-               }
-       };
+       final FileItemTree tree;
 
-       public FileTreePanel(String id) {
+       public FileTreePanel(String id, Long roomId) {
                super(id);
+               OmTreeProvider tp = new OmTreeProvider(roomId);
+               setSelected(tp.getRoot(), null);
+               add(tree = new FileItemTree("tree", this, tp));
        }
        
        @Override
        protected void onInitialize() {
                super.onInitialize();
-               defineTrees();
-               selectedFile.getObject().setId(Long.MIN_VALUE);
                final AddFolderDialog addFolder = new 
AddFolderDialog("addFolder", Application.getString(712)) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target) {
-                               createFolder(getModelObject());
-                               target.add(trees); //FIXME add correct refresh
+                               createFolder(target, getModelObject());
                        }
                };
                add(addFolder);
@@ -163,7 +146,7 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               target.add(trees); //FIXME add correct refresh
+                               target.add(trees);
                        }
                }));
                trashToolbar.add(new ConfirmableAjaxBorder("trash", 
getString("80"), getString("713")) {
@@ -171,7 +154,7 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               FileItem f = selectedFile.getObject();
+                               FileItem f = selected.getObject();
                                if (f != null && f.getId() > 0) {
                                        super.onEvent(target);
                                }
@@ -179,11 +162,11 @@ public abstract class FileTreePanel exte
                        
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
-                               delete(selectedFile.getObject(), target);
+                               delete(selected.getObject(), target);
                        }
                });
                
-               add(trees.add(treesView).setOutputMarkupId(true));
+               add(trees.add(tree).setOutputMarkupId(true));
                updateSizes();
                add(sizes.add(new Label("homeSize", homeSize), new 
Label("publicSize", publicSize)).setOutputMarkupId(true));
                add(errorsDialog);
@@ -206,40 +189,61 @@ public abstract class FileTreePanel exte
                                
getBean(FileExplorerItemDao.class).delete((FileExplorerItem)f);
                        }
                }
-               handler.add(trees); //FIXME add correct refresh
+               handler.add(trees);
        }
        
-       public void createRecordingFolder(String name) {
-               Recording f = new Recording();
+       protected abstract void update(AjaxRequestTarget target, FileItem f);
+
+       protected void createFolder(AjaxRequestTarget target, String name) {
+               FileItem p = selected.getObject();
+               boolean isRecording = p instanceof Recording;
+               if (Type.Folder != p.getType()) {
+                       
+               }
+               FileItem f = isRecording ? new Recording() : new 
FileExplorerItem();
                f.setName(name);
                f.setInsertedBy(getUserId());
                f.setInserted(new Date());
-               f.setType(Type.Folder);;
-               Recording p = (Recording)selectedFile.getObject();
-               long parentId = p.getId();
-               if (Type.Folder == p.getType()) {
-                       f.setParentId(parentId);
-               }
+               f.setType(Type.Folder);
                f.setOwnerId(p.getOwnerId());
-               f.setGroupId(p.getGroupId());
-               getBean(RecordingDao.class).update(f);
+               f.setParentId(Type.Folder == p.getType() ? p.getId() : null);
+               if (isRecording) {
+                       Recording r = (Recording)f;
+                       r.setGroupId(((Recording)p).getGroupId());
+                       getBean(RecordingDao.class).update(r);
+               } else {
+                       f.setRoomId(p.getRoomId());
+                       
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+               }
+               target.add(trees);
        }
-       
-       public abstract void defineTrees();
-       
-       public abstract void update(AjaxRequestTarget target, FileItem f);
-
-       public abstract void createFolder(String name);
 
        public abstract void updateSizes();
        
-       public FileItem getSelectedFile() {
-               return selectedFile.getObject();
+       public FileItem getSelected() {
+               return selected.getObject();
+       }
+       
+       void updateNode(AjaxRequestTarget target, FileItem fi) {
+               if (fi != null && target != null) {
+                       if (Type.Folder == fi.getType()) {
+                               tree.updateBranch(fi, target);
+                       } else {
+                               tree.updateNode(fi, target);
+                       }
+               }
+       }
+       
+       public void setSelected(FileItem fi, AjaxRequestTarget target) {
+               FileItem _prev = selected.getObject();
+               updateNode(target, _prev);
+               selected.setObject(fi);
+               updateNode(target, fi);
        }
        
        @Override
        protected void onDetach() {
-               selectedFile.detach();
+               selected.detach();
                homeSize.detach();
                publicSize.detach();
                super.onDetach();

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
 Wed Aug 10 05:34:01 2016
@@ -66,12 +66,12 @@ public class FolderPanel extends Panel {
                                if (o instanceof FileItem) {
                                        FileItem p = 
(FileItem)drop.getDefaultModelObject();
                                        FileItem f = (FileItem)o;
-                                       long pid = p.getId();
+                                       Long pid = p.getId();
                                        //FIXME parent should not be moved to 
child !!!!!!!
-                                       if (pid == f.getId()) {
+                                       if (pid != null && 
pid.equals(f.getId())) {
                                                return;
                                        }
-                                       f.setParentId(pid > 0 ? pid : null);
+                                       f.setParentId(pid);
                                        f.setOwnerId(p.getOwnerId());
                                        f.setRoomId(p.getRoomId());
                                        if (f instanceof Recording) {
@@ -81,11 +81,13 @@ public class FolderPanel extends Panel {
                                        } else {
                                                
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
                                        }
+                                       treePanel.updateNode(target, p);
+                                       treePanel.updateNode(target, f);
                                }
-                               target.add(treePanel.trees); //FIXME add 
correct refresh
+                               target.add(treePanel.trees);
                        }
                } : new WebMarkupContainer("drop");
-               if (r.getId() < 1) {
+               if (r.getId() == null) {
                        drag = new WebMarkupContainer("drag");
                } else {
                        drag = new Draggable<FileItem>("drag", Model.of(r)) {
@@ -101,7 +103,7 @@ public class FolderPanel extends Panel {
                        }.setContainment(treePanel.getContainment());
                        drag.add(AttributeAppender.append("class", r instanceof 
Recording ? "recorditem" : "fileitem"));
                }
-               drag.add(r.getId() < 1 ? new Label("name", r.getName()) : new 
AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
+               drag.add(r.getId() == null ? new Label("name", r.getName()) : 
new AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
                        private static final long serialVersionUID = 1L;
                        
                        @Override

Added: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java?rev=1755671&view=auto
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 (added)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 Wed Aug 10 05:34:01 2016
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common.tree;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.RecordingDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.record.Recording;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class OmTreeProvider implements ITreeProvider<FileItem> {
+       private static final long serialVersionUID = 1L;
+       public static String RECORDINGS_MY = "recordings-my";
+       public static String RECORDINGS_PUBLIC = "recordings-public";
+       public static String RECORDINGS_GROUP = "recordings-group-%s";
+       public static String FILES_MY = "files-my";
+       public static String FILES_ROOM = "files-room";
+       private Long roomId = null;
+       private final List<FileItem> roots = new ArrayList<>();
+
+       public OmTreeProvider(Long roomId) {
+               this.roomId = roomId;
+               if (roomId != null) {
+                       roots.add(createFileRoot(null));
+                       roots.add(createFileRoot(roomId));
+               }
+               final String PUBLIC = Application.getString(861);
+               {
+                       Recording r = createRecRoot(Application.getString(860), 
RECORDINGS_MY);
+                       r.setOwnerId(getUserId());
+                       roots.add(r);
+               }
+               {
+                       Recording r = createRecRoot(PUBLIC, RECORDINGS_PUBLIC);
+                       roots.add(r);
+               }
+               for (GroupUser gu : 
getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
+                       Group g = gu.getGroup();
+                       
+                       Recording r = createRecRoot(String.format("%s (%s)", 
PUBLIC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()));
+                       r.setGroupId(g.getId());
+                       roots.add(r);
+               }
+       }
+       
+       static Recording createRecRoot(String name, String hash) {
+               Recording r = new Recording();
+               r.setType(Type.Folder);
+               r.setName(name);
+               r.setHash(hash);
+               return r;
+       }
+       
+       static FileExplorerItem createFileRoot(Long roomId) {
+               FileExplorerItem f = new FileExplorerItem();
+               f.setRoomId(roomId);
+               f.setType(Type.Folder);
+               if (roomId == null) {
+                       f.setOwnerId(getUserId());
+                       f.setName(Application.getString(706));
+                       f.setHash(FILES_MY);
+               } else {
+                       f.setName(Application.getString(707));
+                       f.setHash(FILES_ROOM);
+               }
+               return f;
+       }
+       
+       public FileItem getRoot() {
+               return roots.get(0);
+       }
+       
+       @Override
+       public Iterator<FileItem> getRoots() {
+               return roots.iterator();
+       }
+
+       @Override
+       public Iterator<FileItem> getChildren(FileItem node) {
+               List<FileItem> list = new ArrayList<>();
+               if (node instanceof Recording) {
+                       Recording rec = (Recording)node;
+                       RecordingDao dao = getBean(RecordingDao.class);
+                       List<Recording> _list;
+                       if (node.getId() == null) {
+                               if (node.getOwnerId() == null) {
+                                       _list = 
dao.getRootByPublic(rec.getGroupId());
+                               } else {
+                                       _list = 
dao.getRootByOwner(node.getOwnerId());
+                               }
+                       } else {
+                               _list = dao.getByParent(node.getId());
+                       }
+                       for (Recording r : _list) {
+                               list.add(r);
+                       }
+               } else {
+                       FileExplorerItemDao dao = 
getBean(FileExplorerItemDao.class);
+                       List<FileExplorerItem> _list;
+                       if (node.getId() == null) {
+                               if (roomId == null) {
+                                       _list = dao.getByRoom(roomId);
+                               } else {
+                                       _list = 
dao.getByOwner(node.getOwnerId());
+                               }
+                       } else {
+                               _list = dao.getByParent(node.getId());
+                       }
+                       for (FileExplorerItem r : _list) {
+                               list.add(r);
+                       }
+               }
+               return list.iterator();
+       }
+
+       @Override
+       public boolean hasChildren(FileItem node) {
+               return node.getId() == null || Type.Folder == node.getType();
+       }
+
+       @Override
+       public IModel<FileItem> model(FileItem object) {
+               // TODO LDM should be used
+               return Model.of(object);
+       }
+
+       @Override
+       public void detach() {
+               // TODO LDM should be used
+       }
+}

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
 Wed Aug 10 05:34:01 2016
@@ -18,40 +18,19 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
-import org.apache.openmeetings.db.entity.record.Recording;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.tree.FileTreePanel;
-import org.apache.openmeetings.web.common.tree.MyRecordingTreeProvider;
-import org.apache.openmeetings.web.common.tree.PublicRecordingTreeProvider;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 
 public class RoomFilePanel extends FileTreePanel {
        private static final long serialVersionUID = 1L;
        private final RoomPanel room;
 
        public RoomFilePanel(String id, RoomPanel room) {
-               super(id);
+               super(id, room.getRoom().getId());
                this.room = room;
        }
        
@@ -62,7 +41,7 @@ public class RoomFilePanel extends FileT
        }
        
        @Override
-       public void update(AjaxRequestTarget target, FileItem f) {
+       protected void update(AjaxRequestTarget target, FileItem f) {
                // TODO Auto-generated method stub
                
        }
@@ -86,93 +65,4 @@ public class RoomFilePanel extends FileT
                });
                return u;
        }
-       
-       @Override
-       public void defineTrees() {
-               FileExplorerItem f = new FileExplorerItem();
-               f.setOwnerId(getUserId());
-               selectedFile.setObject(f);
-               treesView.getList().add(new FilesTreeProvider(null));
-               treesView.getList().add(new 
FilesTreeProvider(room.getRoom().getId()));
-               treesView.getList().add(new MyRecordingTreeProvider());
-               treesView.getList().add(new PublicRecordingTreeProvider(null, 
null));
-               for (GroupUser ou : 
getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-                       Group o = ou.getGroup();
-                       treesView.getList().add(new 
PublicRecordingTreeProvider(o.getId(), o.getName()));
-               }
-       }
-       
-       @Override
-       public void createFolder(String name) {
-               if (selectedFile.getObject() instanceof Recording) {
-                       createRecordingFolder(name);
-               } else {
-                       FileExplorerItem f = new FileExplorerItem();
-                       f.setName(name);
-                       f.setInsertedBy(getUserId());
-                       f.setInserted(new Date());
-                       f.setType(Type.Folder);;
-                       FileItem p = selectedFile.getObject();
-                       long parentId = p.getId();
-                       f.setParentId(Type.Folder == p.getType() && parentId > 
0 ? parentId : null);
-                       f.setOwnerId(p.getOwnerId());
-                       f.setRoomId(p.getRoomId());
-                       getBean(FileExplorerItemDao.class).update(f);
-               }
-       }
-
-       static class FilesTreeProvider implements 
ITreeProvider<FileExplorerItem> {
-               private static final long serialVersionUID = 1L;
-               Long roomId = null;
-
-               FilesTreeProvider(Long roomId) {
-                       this.roomId = roomId;
-               }
-               
-               @Override
-               public void detach() {
-                       // TODO LDM should be used
-               }
-
-               @Override
-               public boolean hasChildren(FileExplorerItem node) {
-                       return node.getId() <= 0 || Type.Folder == 
node.getType();
-               }
-
-               @Override
-               public Iterator<? extends FileExplorerItem> 
getChildren(FileExplorerItem node) {
-                       FileExplorerItemDao dao = 
getBean(FileExplorerItemDao.class);
-                       List<FileExplorerItem> list = null;
-                       if (node.getId() == 0) {
-                               list = dao.getByOwner(node.getOwnerId());
-                       } else if (node.getId() < 0) {
-                               list = dao.getByRoom(roomId);
-                       } else {
-                               list = dao.getByParent(node.getId());
-                       }
-                       return list.iterator();
-               }
-
-               @Override
-               public IModel<FileExplorerItem> model(FileExplorerItem object) {
-                       // TODO LDM should be used
-                       return Model.of(object);
-               }
-
-               @Override
-               public Iterator<? extends FileExplorerItem> getRoots() {
-                       FileExplorerItem f = new FileExplorerItem();
-                       f.setRoomId(roomId);
-                       f.setType(Type.Folder);
-                       if (roomId == null) {
-                               f.setId(0L);
-                               f.setOwnerId(getUserId());
-                               f.setName(Application.getString(706));
-                       } else {
-                               f.setId(-roomId);
-                               f.setName(Application.getString(707));
-                       }
-                       return Arrays.asList(f).iterator();
-               }
-       }
 }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 Wed Aug 10 05:34:01 2016
@@ -161,7 +161,7 @@ public class UploadDialog extends Abstra
                        FileExplorerItem f = new FileExplorerItem();
                        f.setSize(fu.getSize());
                        f.setName(fu.getClientFileName());
-                       FileItem parent = roomFiles.getSelectedFile();
+                       FileItem parent = roomFiles.getSelected();
                        if (parent == null || !(parent instanceof 
FileExplorerItem)) {
                                f.setOwnerId(getUserId());
                        } else {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
 Wed Aug 10 05:34:01 2016
@@ -23,16 +23,11 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
 import org.apache.openmeetings.db.dao.record.RecordingDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.record.RecordingContainerData;
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.web.common.UserPanel;
 import org.apache.openmeetings.web.common.tree.FileTreePanel;
-import org.apache.openmeetings.web.common.tree.MyRecordingTreeProvider;
-import org.apache.openmeetings.web.common.tree.PublicRecordingTreeProvider;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
 public class RecordingsPanel extends UserPanel {
@@ -42,21 +37,10 @@ public class RecordingsPanel extends Use
        
        public RecordingsPanel(String id) {
                super(id);
-               add(new FileTreePanel("tree") {
+               add(new FileTreePanel("tree", null) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public void defineTrees() {
-                               selectedFile.setObject(new Recording());
-                               treesView.getList().add(new 
MyRecordingTreeProvider());
-                               treesView.getList().add(new 
PublicRecordingTreeProvider(null, null));
-                               for (GroupUser ou : 
getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-                                       Group o = ou.getGroup();
-                                       treesView.getList().add(new 
PublicRecordingTreeProvider(o.getId(), o.getName()));
-                               }
-                       }
-                       
-                       @Override
                        public void updateSizes() {
                                RecordingContainerData sizeData = 
getBean(RecordingDao.class).getContainerData(getUserId());
                                if (sizeData != null) {
@@ -66,15 +50,10 @@ public class RecordingsPanel extends Use
                        }
                        
                        @Override
-                       public void update(AjaxRequestTarget target, FileItem 
f) {
+                       protected void update(AjaxRequestTarget target, 
FileItem f) {
                                video.update(target, (Recording)f);
                                info.update(target, (Recording)f);
                        }
-                       
-                       @Override
-                       public void createFolder(String name) {
-                               createRecordingFolder(name);
-                       }
                });
                add(video, info);
        }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
 Wed Aug 10 05:34:01 2016
@@ -70,13 +70,13 @@ public abstract class AddFolderDialog ex
                                });
                        }
                };
-               add(form);
+               add(form.setOutputMarkupId(true));
        }
 
        @Override
        protected void onOpen(IPartialPageRequestHandler handler) {
                super.onOpen(handler);
-               
+               handler.add(form);
                setModelObject(name);
                getFeedbackMessages().clear();
        }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
 Wed Aug 10 05:34:01 2016
@@ -34,31 +34,32 @@ import org.apache.wicket.markup.repeater
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
-public class FileItemTree<T extends FileItem> extends DefaultNestedTree<T> {
+public class FileItemTree extends DefaultNestedTree<FileItem> {
        private static final long serialVersionUID = 1L;
        private final FileTreePanel treePanel;
-       private final IModel<T> selectedItem = Model.of((T)null);
 
-       public FileItemTree(String id, FileTreePanel treePanel, 
ITreeProvider<T> tp) {
+       public FileItemTree(String id, FileTreePanel treePanel, 
ITreeProvider<FileItem> tp) {
                super(id, tp);
                this.treePanel = treePanel;
                setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
        }
        
        @Override
-       protected Component newContentComponent(String id, IModel<T> node) {
-               return new Folder<T>(id, this, node) {
+       protected Component newContentComponent(String id, IModel<FileItem> 
node) {
+               return new Folder<FileItem>(id, this, node) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       protected Component newLabelComponent(String id, final 
IModel<T> lm) {
+                       protected Component newLabelComponent(String id, final 
IModel<FileItem> lm) {
                                FileItem r = lm.getObject();
-                               return Type.Folder == r.getType() || r.getId() 
< 1 ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, treePanel);
+                               return Type.Folder == r.getType() || r.getId() 
== null ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, 
treePanel);
                        }
                        
                        @Override
                        protected boolean isSelected() {
-                               return 
getModelObject().getId().equals(treePanel.selectedFile.getObject().getId());
+                               FileItem f = getModelObject(), s = 
treePanel.getSelected();
+                               return (s.getId() == null && s.getId() == 
f.getId() && s.getHash().equals(f.getHash()))
+                                               || (s.getId() != null && 
s.getId().equals(f.getId()));
                        }
                        
                        @Override
@@ -68,28 +69,21 @@ public class FileItemTree<T extends File
                        
                        @Override
                        protected void onClick(AjaxRequestTarget target) {
-                               T r = getModelObject();
-                               treePanel.selected.resetSelected(target);
-                               selectedItem.setObject(r);
-                               treePanel.selectedFile.setObject(r);
-                               treePanel.selected = FileItemTree.this;
+                               FileItem r = getModelObject();
+                               treePanel.setSelected(r, target);
                                if (Type.Folder == r.getType()) {
                                        if (getState(r) == State.COLLAPSED) {
                                                super.onClick(target);
                                        }
-                                       updateBranch(r, target);
                                } else {
                                        treePanel.update(target, r);
-                                       updateNode(r, target);
                                }
                        }
                        
-                       private String getItemStyle(T f, String def) {
+                       private String getItemStyle(FileItem f, String def) {
                                String style;
-                               if (f.getId() == 0) {
-                                       style = "my file om-icon";
-                               } else if (f.getId() < 0) {
-                                       style = "public file om-icon";
+                               if (f.getId() == null) {
+                                       style = f.getHash().indexOf("my") > -1 
? "my file om-icon" : "public file om-icon";
                                } else {
                                        switch(f.getType()) {
                                                case Folder:
@@ -129,7 +123,7 @@ public class FileItemTree<T extends File
                        }
                        
                        @Override
-                       protected String getOtherStyleClass(T r) {
+                       protected String getOtherStyleClass(FileItem r) {
                                return getItemStyle(r, 
super.getOtherStyleClass(r));
                        }
                        
@@ -149,27 +143,9 @@ public class FileItemTree<T extends File
                        }
                        
                        @Override
-                       protected IModel<String> newLabelModel(IModel<T> model) 
{
+                       protected IModel<String> newLabelModel(IModel<FileItem> 
model) {
                                return Model.of(model.getObject().getName());
                        }
                };
        }
-
-       private void resetSelected(AjaxRequestTarget target) {
-               T _prev = selectedItem.getObject();
-               if (_prev != null) {
-                       if (Type.Folder == _prev.getType()) {
-                               updateBranch(_prev, target);
-                       } else {
-                               updateNode(_prev, target);
-                       }
-                       selectedItem.setObject(null);
-               }
-       }
-       
-       @Override
-       protected void onDetach() {
-               selectedItem.detach();
-               super.onDetach();
-       }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
 Wed Aug 10 05:34:01 2016
@@ -37,9 +37,7 @@
                </div>
                <div wicket:id="tree-container" class="trees">
                        <div id="tree-anchor" style="height: 2px; width: 
2px;"></div>
-                       <div wicket:id="tree">
-                               <div wicket:id="item"></div>
-                       </div>
+                       <div wicket:id="tree"></div>
                </div>
                <div class="sizes" wicket:id="sizes">
                        <table>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 Wed Aug 10 05:34:01 2016
@@ -21,7 +21,6 @@ package org.apache.openmeetings.web.comm
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.UUID;
 
@@ -39,12 +38,9 @@ import org.apache.wicket.ajax.AjaxEventB
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.CallbackParameter;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
@@ -61,41 +57,28 @@ public abstract class FileTreePanel exte
        private static final long serialVersionUID = 1L;
        final WebMarkupContainer trees = new 
WebMarkupContainer("tree-container");
        private final WebMarkupContainer sizes = new 
WebMarkupContainer("sizes");
-       protected final IModel<FileItem> selectedFile = new 
CompoundPropertyModel<FileItem>((FileItem)null);
+       private final IModel<FileItem> selected = new 
CompoundPropertyModel<FileItem>((FileItem)null);
        protected final IModel<String> homeSize = Model.of((String)null);
        protected final IModel<String> publicSize = Model.of((String)null);
        final ConvertingErrorsDialog errorsDialog = new 
ConvertingErrorsDialog("errors", Model.of((Recording)null));
-       protected FileItemTree<? extends FileItem> selected;
-       protected ListView<ITreeProvider<? extends FileItem>> treesView = new 
ListView<ITreeProvider<? extends FileItem>>("tree", new 
ArrayList<ITreeProvider<? extends FileItem>>()) {
-               private static final long serialVersionUID = 1L;
-
-               @Override
-               protected void populateItem(ListItem<ITreeProvider<? extends 
FileItem>> item) {
-                       @SuppressWarnings({ "unchecked", "rawtypes" }) //TODO 
investigate this
-                       FileItemTree<? extends FileItem> fit = new 
FileItemTree("item", FileTreePanel.this, item.getModelObject());
-                       if (selected == null) {
-                               selected = fit;
-                       }
-                       item.add(fit);
-               }
-       };
+       final FileItemTree tree;
 
-       public FileTreePanel(String id) {
+       public FileTreePanel(String id, Long roomId) {
                super(id);
+               OmTreeProvider tp = new OmTreeProvider(roomId);
+               setSelected(tp.getRoot(), null);
+               add(tree = new FileItemTree("tree", this, tp));
        }
        
        @Override
        protected void onInitialize() {
                super.onInitialize();
-               defineTrees();
-               selectedFile.getObject().setId(Long.MIN_VALUE);
                final AddFolderDialog addFolder = new 
AddFolderDialog("addFolder", Application.getString(712)) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target) {
-                               createFolder(getModelObject());
-                               target.add(trees); //FIXME add correct refresh
+                               createFolder(target, getModelObject());
                        }
                };
                add(addFolder);
@@ -163,7 +146,7 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               target.add(trees); //FIXME add correct refresh
+                               target.add(trees);
                        }
                }));
                trashToolbar.add(new ConfirmableAjaxBorder("trash", 
getString("80"), getString("713")) {
@@ -171,7 +154,7 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               FileItem f = selectedFile.getObject();
+                               FileItem f = selected.getObject();
                                if (f != null && f.getId() > 0) {
                                        super.onEvent(target);
                                }
@@ -179,11 +162,11 @@ public abstract class FileTreePanel exte
                        
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
-                               delete(selectedFile.getObject(), target);
+                               delete(selected.getObject(), target);
                        }
                });
                
-               add(trees.add(treesView).setOutputMarkupId(true));
+               add(trees.add(tree).setOutputMarkupId(true));
                updateSizes();
                add(sizes.add(new Label("homeSize", homeSize), new 
Label("publicSize", publicSize)).setOutputMarkupId(true));
                add(errorsDialog);
@@ -206,40 +189,61 @@ public abstract class FileTreePanel exte
                                
getBean(FileExplorerItemDao.class).delete((FileExplorerItem)f);
                        }
                }
-               handler.add(trees); //FIXME add correct refresh
+               handler.add(trees);
        }
        
-       public void createRecordingFolder(String name) {
-               Recording f = new Recording();
+       protected abstract void update(AjaxRequestTarget target, FileItem f);
+
+       protected void createFolder(AjaxRequestTarget target, String name) {
+               FileItem p = selected.getObject();
+               boolean isRecording = p instanceof Recording;
+               if (Type.Folder != p.getType()) {
+                       
+               }
+               FileItem f = isRecording ? new Recording() : new 
FileExplorerItem();
                f.setName(name);
                f.setInsertedBy(getUserId());
                f.setInserted(new Date());
-               f.setType(Type.Folder);;
-               Recording p = (Recording)selectedFile.getObject();
-               long parentId = p.getId();
-               if (Type.Folder == p.getType()) {
-                       f.setParentId(parentId);
-               }
+               f.setType(Type.Folder);
                f.setOwnerId(p.getOwnerId());
-               f.setGroupId(p.getGroupId());
-               getBean(RecordingDao.class).update(f);
+               f.setParentId(Type.Folder == p.getType() ? p.getId() : null);
+               if (isRecording) {
+                       Recording r = (Recording)f;
+                       r.setGroupId(((Recording)p).getGroupId());
+                       getBean(RecordingDao.class).update(r);
+               } else {
+                       f.setRoomId(p.getRoomId());
+                       
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+               }
+               target.add(trees);
        }
-       
-       public abstract void defineTrees();
-       
-       public abstract void update(AjaxRequestTarget target, FileItem f);
-
-       public abstract void createFolder(String name);
 
        public abstract void updateSizes();
        
-       public FileItem getSelectedFile() {
-               return selectedFile.getObject();
+       public FileItem getSelected() {
+               return selected.getObject();
+       }
+       
+       void updateNode(AjaxRequestTarget target, FileItem fi) {
+               if (fi != null && target != null) {
+                       if (Type.Folder == fi.getType()) {
+                               tree.updateBranch(fi, target);
+                       } else {
+                               tree.updateNode(fi, target);
+                       }
+               }
+       }
+       
+       public void setSelected(FileItem fi, AjaxRequestTarget target) {
+               FileItem _prev = selected.getObject();
+               updateNode(target, _prev);
+               selected.setObject(fi);
+               updateNode(target, fi);
        }
        
        @Override
        protected void onDetach() {
-               selectedFile.detach();
+               selected.detach();
                homeSize.detach();
                publicSize.detach();
                super.onDetach();

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
 Wed Aug 10 05:34:01 2016
@@ -66,12 +66,12 @@ public class FolderPanel extends Panel {
                                if (o instanceof FileItem) {
                                        FileItem p = 
(FileItem)drop.getDefaultModelObject();
                                        FileItem f = (FileItem)o;
-                                       long pid = p.getId();
+                                       Long pid = p.getId();
                                        //FIXME parent should not be moved to 
child !!!!!!!
-                                       if (pid == f.getId()) {
+                                       if (pid != null && 
pid.equals(f.getId())) {
                                                return;
                                        }
-                                       f.setParentId(pid > 0 ? pid : null);
+                                       f.setParentId(pid);
                                        f.setOwnerId(p.getOwnerId());
                                        f.setRoomId(p.getRoomId());
                                        if (f instanceof Recording) {
@@ -81,11 +81,13 @@ public class FolderPanel extends Panel {
                                        } else {
                                                
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
                                        }
+                                       treePanel.updateNode(target, p);
+                                       treePanel.updateNode(target, f);
                                }
-                               target.add(treePanel.trees); //FIXME add 
correct refresh
+                               target.add(treePanel.trees);
                        }
                } : new WebMarkupContainer("drop");
-               if (r.getId() < 1) {
+               if (r.getId() == null) {
                        drag = new WebMarkupContainer("drag");
                } else {
                        drag = new Draggable<FileItem>("drag", Model.of(r)) {
@@ -101,7 +103,7 @@ public class FolderPanel extends Panel {
                        }.setContainment(treePanel.getContainment());
                        drag.add(AttributeAppender.append("class", r instanceof 
Recording ? "recorditem" : "fileitem"));
                }
-               drag.add(r.getId() < 1 ? new Label("name", r.getName()) : new 
AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
+               drag.add(r.getId() == null ? new Label("name", r.getName()) : 
new AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
                        private static final long serialVersionUID = 1L;
                        
                        @Override

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java?rev=1755671&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 Wed Aug 10 05:34:01 2016
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common.tree;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.RecordingDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.record.Recording;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class OmTreeProvider implements ITreeProvider<FileItem> {
+       private static final long serialVersionUID = 1L;
+       public static String RECORDINGS_MY = "recordings-my";
+       public static String RECORDINGS_PUBLIC = "recordings-public";
+       public static String RECORDINGS_GROUP = "recordings-group-%s";
+       public static String FILES_MY = "files-my";
+       public static String FILES_ROOM = "files-room";
+       private Long roomId = null;
+       private final List<FileItem> roots = new ArrayList<>();
+
+       public OmTreeProvider(Long roomId) {
+               this.roomId = roomId;
+               if (roomId != null) {
+                       roots.add(createFileRoot(null));
+                       roots.add(createFileRoot(roomId));
+               }
+               final String PUBLIC = Application.getString(861);
+               {
+                       Recording r = createRecRoot(Application.getString(860), 
RECORDINGS_MY);
+                       r.setOwnerId(getUserId());
+                       roots.add(r);
+               }
+               {
+                       Recording r = createRecRoot(PUBLIC, RECORDINGS_PUBLIC);
+                       roots.add(r);
+               }
+               for (GroupUser gu : 
getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
+                       Group g = gu.getGroup();
+                       
+                       Recording r = createRecRoot(String.format("%s (%s)", 
PUBLIC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()));
+                       r.setGroupId(g.getId());
+                       roots.add(r);
+               }
+       }
+       
+       static Recording createRecRoot(String name, String hash) {
+               Recording r = new Recording();
+               r.setType(Type.Folder);
+               r.setName(name);
+               r.setHash(hash);
+               return r;
+       }
+       
+       static FileExplorerItem createFileRoot(Long roomId) {
+               FileExplorerItem f = new FileExplorerItem();
+               f.setRoomId(roomId);
+               f.setType(Type.Folder);
+               if (roomId == null) {
+                       f.setOwnerId(getUserId());
+                       f.setName(Application.getString(706));
+                       f.setHash(FILES_MY);
+               } else {
+                       f.setName(Application.getString(707));
+                       f.setHash(FILES_ROOM);
+               }
+               return f;
+       }
+       
+       public FileItem getRoot() {
+               return roots.get(0);
+       }
+       
+       @Override
+       public Iterator<FileItem> getRoots() {
+               return roots.iterator();
+       }
+
+       @Override
+       public Iterator<FileItem> getChildren(FileItem node) {
+               List<FileItem> list = new ArrayList<>();
+               if (node instanceof Recording) {
+                       Recording rec = (Recording)node;
+                       RecordingDao dao = getBean(RecordingDao.class);
+                       List<Recording> _list;
+                       if (node.getId() == null) {
+                               if (node.getOwnerId() == null) {
+                                       _list = 
dao.getRootByPublic(rec.getGroupId());
+                               } else {
+                                       _list = 
dao.getRootByOwner(node.getOwnerId());
+                               }
+                       } else {
+                               _list = dao.getByParent(node.getId());
+                       }
+                       for (Recording r : _list) {
+                               list.add(r);
+                       }
+               } else {
+                       FileExplorerItemDao dao = 
getBean(FileExplorerItemDao.class);
+                       List<FileExplorerItem> _list;
+                       if (node.getId() == null) {
+                               if (roomId == null) {
+                                       _list = dao.getByRoom(roomId);
+                               } else {
+                                       _list = 
dao.getByOwner(node.getOwnerId());
+                               }
+                       } else {
+                               _list = dao.getByParent(node.getId());
+                       }
+                       for (FileExplorerItem r : _list) {
+                               list.add(r);
+                       }
+               }
+               return list.iterator();
+       }
+
+       @Override
+       public boolean hasChildren(FileItem node) {
+               return node.getId() == null || Type.Folder == node.getType();
+       }
+
+       @Override
+       public IModel<FileItem> model(FileItem object) {
+               // TODO LDM should be used
+               return Model.of(object);
+       }
+
+       @Override
+       public void detach() {
+               // TODO LDM should be used
+       }
+}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
 Wed Aug 10 05:34:01 2016
@@ -18,40 +18,19 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
-import org.apache.openmeetings.db.entity.file.FileItem.Type;
-import org.apache.openmeetings.db.entity.record.Recording;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.tree.FileTreePanel;
-import org.apache.openmeetings.web.common.tree.MyRecordingTreeProvider;
-import org.apache.openmeetings.web.common.tree.PublicRecordingTreeProvider;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 
 public class RoomFilePanel extends FileTreePanel {
        private static final long serialVersionUID = 1L;
        private final RoomPanel room;
 
        public RoomFilePanel(String id, RoomPanel room) {
-               super(id);
+               super(id, room.getRoom().getId());
                this.room = room;
        }
        
@@ -62,7 +41,7 @@ public class RoomFilePanel extends FileT
        }
        
        @Override
-       public void update(AjaxRequestTarget target, FileItem f) {
+       protected void update(AjaxRequestTarget target, FileItem f) {
                // TODO Auto-generated method stub
                
        }
@@ -86,93 +65,4 @@ public class RoomFilePanel extends FileT
                });
                return u;
        }
-       
-       @Override
-       public void defineTrees() {
-               FileExplorerItem f = new FileExplorerItem();
-               f.setOwnerId(getUserId());
-               selectedFile.setObject(f);
-               treesView.getList().add(new FilesTreeProvider(null));
-               treesView.getList().add(new 
FilesTreeProvider(room.getRoom().getId()));
-               treesView.getList().add(new MyRecordingTreeProvider());
-               treesView.getList().add(new PublicRecordingTreeProvider(null, 
null));
-               for (GroupUser ou : 
getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-                       Group o = ou.getGroup();
-                       treesView.getList().add(new 
PublicRecordingTreeProvider(o.getId(), o.getName()));
-               }
-       }
-       
-       @Override
-       public void createFolder(String name) {
-               if (selectedFile.getObject() instanceof Recording) {
-                       createRecordingFolder(name);
-               } else {
-                       FileExplorerItem f = new FileExplorerItem();
-                       f.setName(name);
-                       f.setInsertedBy(getUserId());
-                       f.setInserted(new Date());
-                       f.setType(Type.Folder);;
-                       FileItem p = selectedFile.getObject();
-                       long parentId = p.getId();
-                       f.setParentId(Type.Folder == p.getType() && parentId > 
0 ? parentId : null);
-                       f.setOwnerId(p.getOwnerId());
-                       f.setRoomId(p.getRoomId());
-                       getBean(FileExplorerItemDao.class).update(f);
-               }
-       }
-
-       static class FilesTreeProvider implements 
ITreeProvider<FileExplorerItem> {
-               private static final long serialVersionUID = 1L;
-               Long roomId = null;
-
-               FilesTreeProvider(Long roomId) {
-                       this.roomId = roomId;
-               }
-               
-               @Override
-               public void detach() {
-                       // TODO LDM should be used
-               }
-
-               @Override
-               public boolean hasChildren(FileExplorerItem node) {
-                       return node.getId() <= 0 || Type.Folder == 
node.getType();
-               }
-
-               @Override
-               public Iterator<? extends FileExplorerItem> 
getChildren(FileExplorerItem node) {
-                       FileExplorerItemDao dao = 
getBean(FileExplorerItemDao.class);
-                       List<FileExplorerItem> list = null;
-                       if (node.getId() == 0) {
-                               list = dao.getByOwner(node.getOwnerId());
-                       } else if (node.getId() < 0) {
-                               list = dao.getByRoom(roomId);
-                       } else {
-                               list = dao.getByParent(node.getId());
-                       }
-                       return list.iterator();
-               }
-
-               @Override
-               public IModel<FileExplorerItem> model(FileExplorerItem object) {
-                       // TODO LDM should be used
-                       return Model.of(object);
-               }
-
-               @Override
-               public Iterator<? extends FileExplorerItem> getRoots() {
-                       FileExplorerItem f = new FileExplorerItem();
-                       f.setRoomId(roomId);
-                       f.setType(Type.Folder);
-                       if (roomId == null) {
-                               f.setId(0L);
-                               f.setOwnerId(getUserId());
-                               f.setName(Application.getString(706));
-                       } else {
-                               f.setId(-roomId);
-                               f.setName(Application.getString(707));
-                       }
-                       return Arrays.asList(f).iterator();
-               }
-       }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 Wed Aug 10 05:34:01 2016
@@ -161,7 +161,7 @@ public class UploadDialog extends Abstra
                        FileExplorerItem f = new FileExplorerItem();
                        f.setSize(fu.getSize());
                        f.setName(fu.getClientFileName());
-                       FileItem parent = roomFiles.getSelectedFile();
+                       FileItem parent = roomFiles.getSelected();
                        if (parent == null || !(parent instanceof 
FileExplorerItem)) {
                                f.setOwnerId(getUserId());
                        } else {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java?rev=1755671&r1=1755670&r2=1755671&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
 Wed Aug 10 05:34:01 2016
@@ -23,16 +23,11 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
 import org.apache.openmeetings.db.dao.record.RecordingDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.record.RecordingContainerData;
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.web.common.UserPanel;
 import org.apache.openmeetings.web.common.tree.FileTreePanel;
-import org.apache.openmeetings.web.common.tree.MyRecordingTreeProvider;
-import org.apache.openmeetings.web.common.tree.PublicRecordingTreeProvider;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
 public class RecordingsPanel extends UserPanel {
@@ -42,21 +37,10 @@ public class RecordingsPanel extends Use
        
        public RecordingsPanel(String id) {
                super(id);
-               add(new FileTreePanel("tree") {
+               add(new FileTreePanel("tree", null) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
-                       public void defineTrees() {
-                               selectedFile.setObject(new Recording());
-                               treesView.getList().add(new 
MyRecordingTreeProvider());
-                               treesView.getList().add(new 
PublicRecordingTreeProvider(null, null));
-                               for (GroupUser ou : 
getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-                                       Group o = ou.getGroup();
-                                       treesView.getList().add(new 
PublicRecordingTreeProvider(o.getId(), o.getName()));
-                               }
-                       }
-                       
-                       @Override
                        public void updateSizes() {
                                RecordingContainerData sizeData = 
getBean(RecordingDao.class).getContainerData(getUserId());
                                if (sizeData != null) {
@@ -66,15 +50,10 @@ public class RecordingsPanel extends Use
                        }
                        
                        @Override
-                       public void update(AjaxRequestTarget target, FileItem 
f) {
+                       protected void update(AjaxRequestTarget target, 
FileItem f) {
                                video.update(target, (Recording)f);
                                info.update(target, (Recording)f);
                        }
-                       
-                       @Override
-                       public void createFolder(String name) {
-                               createRecordingFolder(name);
-                       }
                });
                add(video, info);
        }


Reply via email to