Author: solomax
Date: Thu Jan 19 16:54:11 2017
New Revision: 1779496

URL: http://svn.apache.org/viewvc?rev=1779496&view=rev
Log:
[OPENMEETINGS-1527] multiselect seems to work as expected

Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
    
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/common/tree/OmTreeProvider.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
    
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/common/tree/OmTreeProvider.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
 Thu Jan 19 16:54:11 2017
@@ -41,7 +41,7 @@ import org.springframework.transaction.a
 
 /**
  * @author sebastianwagner
- * 
+ *
  */
 @Transactional
 public class FileExplorerItemDao {
@@ -95,10 +95,7 @@ public class FileExplorerItemDao {
 
        public List<FileExplorerItem> getByRoom(Long roomId) {
                log.debug("getFileExplorerItemsByRoom roomId :: " + roomId);
-               TypedQuery<FileExplorerItem> query = 
em.createNamedQuery("getFilesByRoom", FileExplorerItem.class);
-               query.setParameter("roomId", roomId);
-
-               return query.getResultList();
+               return em.createNamedQuery("getFilesByRoom", 
FileExplorerItem.class).setParameter("roomId", roomId).getResultList();
        }
 
        public List<FileExplorerItem> getByOwner(Long ownerId) {
@@ -272,7 +269,7 @@ public class FileExplorerItemDao {
                }
                return size;
        }
-       
+
        public long getSize(FileExplorerItem f) {
                long size = 0;
                try {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 Thu Jan 19 16:54:11 2017
@@ -40,7 +40,7 @@ public class DownloadMenuItem extends Me
        @Override
        public boolean isEnabled() {
                File f = null;
-               if (tree.selectedCount() == 1) {
+               if (tree.getSelected().size() == 1) {
                        f = tree.getLastSelected().getFile(ext);
                }
                return f != null && f.exists();

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=1779496&r1=1779495&r2=1779496&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
 Thu Jan 19 16:54:11 2017
@@ -79,9 +79,11 @@ public abstract class FileTreePanel exte
        private final AddFolderDialog addFolder;
        private final ConfirmableBorderDialog trashConfirm;
        private ConfirmableAjaxBorder trashBorder;
+       private final Long roomId;
 
        public FileTreePanel(String id, Long roomId, AddFolderDialog addFolder, 
ConfirmableBorderDialog trashConfirm) {
                super(id);
+               this.roomId = roomId;
                this.addFolder = addFolder;
                this.trashConfirm = trashConfirm;
                OmTreeProvider tp = new OmTreeProvider(roomId);
@@ -103,7 +105,6 @@ public abstract class FileTreePanel exte
                                super.onConfigure(behavior);
                                behavior.setOption("hoverClass", 
Options.asString("ui-state-hover trash-toolbar-hover"));
                                behavior.setOption("accept", 
Options.asString(".recorditem, .fileitem"));
-                               behavior.setOption("drop", "function(event, ui) 
{$(this).append(ui.helper.children());}");
                        }
 
                        @Override
@@ -141,7 +142,12 @@ public abstract class FileTreePanel exte
                        public void onDrop(AjaxRequestTarget target, Component 
component) {
                                Object o = component.getDefaultModelObject();
                                if (o instanceof FileItem) {
-                                       delete((FileItem)o, target);
+                                       FileItem f = (FileItem)o;
+                                       if (isSelected(f)) {
+                                               deleteAll(target);
+                                       } else {
+                                               delete(f, target);
+                                       }
                                }
                        }
                };
@@ -178,9 +184,7 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
-                               for (Entry<String, FileItem> e : 
selected.entrySet()) {
-                                       delete(e.getValue(), target);
-                               }
+                               deleteAll(target);
                        }
                });
 
@@ -198,6 +202,13 @@ public abstract class FileTreePanel exte
                return new WebMarkupContainer(id).setVisible(false);
        }
 
+       private void deleteAll(AjaxRequestTarget target) {
+               for (Entry<String, FileItem> e : selected.entrySet()) {
+                       delete(e.getValue(), target);
+               }
+               selected.clear();
+       }
+
        void delete(FileItem f, IPartialPageRequestHandler handler) {
                Long id = f.getId();
                if (id != null) {
@@ -241,8 +252,8 @@ public abstract class FileTreePanel exte
                return selected.containsKey(f.getHash());
        }
 
-       public int selectedCount() {
-               return selected.size();
+       public Map<String, FileItem> getSelected() {
+               return selected;
        }
 
        public FileItem getLastSelected() {
@@ -270,7 +281,7 @@ public abstract class FileTreePanel exte
                }
        }
 
-       private static boolean sameParent(FileItem f1, FileItem f2) {
+       private static boolean sameParent(Long roomId, FileItem f1, FileItem 
f2) {
                if (f1 instanceof Recording && f2 instanceof FileExplorerItem) {
                        return false;
                }
@@ -284,7 +295,7 @@ public abstract class FileTreePanel exte
                        if (f1.getRoomId() != null && 
f1.getRoomId().equals(f2.getRoomId())) {
                                return true;
                        }
-                       if (f1.getRoomId() == null && f2.getRoomId() == null && 
f1.getOwnerId() == null && f2.getOwnerId() == null) {
+                       if (f2 instanceof FileExplorerItem && roomId != null && 
f1.getRoomId() == null && f2.getRoomId() == null && f1.getOwnerId() == null && 
f2.getOwnerId() == null) {
                                return true;
                        }
                }
@@ -300,7 +311,7 @@ public abstract class FileTreePanel exte
                                selected.put(fi.getHash(), fi);
                        }
                        lastSelected = fi;
-               } else if (shift && lastSelected != null && 
!lastSelected.getHash().equals(fi.getHash()) && sameParent(fi, lastSelected)) {
+               } else if (shift && lastSelected != null && 
!lastSelected.getHash().equals(fi.getHash()) && sameParent(roomId, fi, 
lastSelected)) {
                        selected.clear();
                        String lastHash = null;
                        for (FileItem f : 
((OmTreeProvider)tree.getProvider()).getByParent(fi, fi.getParentId())) {

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=1779496&r1=1779495&r2=1779496&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
 Thu Jan 19 16:54:11 2017
@@ -20,6 +20,8 @@ package org.apache.openmeetings.web.comm
 
 import static org.apache.openmeetings.web.app.Application.getBean;
 
+import java.util.Map.Entry;
+
 import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.entity.file.FileExplorerItem;
@@ -58,7 +60,6 @@ public class FolderPanel extends Panel {
                                super.onConfigure(behavior);
                                behavior.setOption("hoverClass", 
Options.asString("ui-state-hover"));
                                behavior.setOption("accept", 
Options.asString(getDefaultModelObject() instanceof Recording ? ".recorditem" : 
".fileitem"));
-                               behavior.setOption("drop", "function(event, ui) 
{$(this).append(ui.helper.children());}");
                        }
 
                        @Override
@@ -67,23 +68,12 @@ public class FolderPanel extends Panel {
                                if (o instanceof FileItem) {
                                        FileItem p = 
(FileItem)drop.getDefaultModelObject();
                                        FileItem f = (FileItem)o;
-                                       Long pid = p.getId();
-                                       //FIXME parent should not be moved to 
child !!!!!!!
-                                       if (pid != null && 
pid.equals(f.getId())) {
-                                               return;
-                                       }
-                                       f.setParentId(pid);
-                                       f.setOwnerId(p.getOwnerId());
-                                       f.setRoomId(p.getRoomId());
-                                       if (f instanceof Recording) {
-                                               Recording r = (Recording)f;
-                                               
r.setGroupId(((Recording)p).getGroupId());
-                                               
getBean(RecordingDao.class).update(r);
+                                       if (treePanel.isSelected(f)) {
+                                               moveAll(treePanel, target, p);
                                        } else {
-                                               
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+                                               move(treePanel, target, p, f);
                                        }
                                        treePanel.updateNode(target, p);
-                                       treePanel.updateNode(target, f);
                                }
                                target.add(treePanel.trees);
                        }
@@ -131,4 +121,29 @@ public class FolderPanel extends Panel {
                });
                add(drop.add(drag).setOutputMarkupId(true));
        }
+
+       private void moveAll(final FileTreePanel treePanel, AjaxRequestTarget 
target, FileItem p) {
+               for (Entry<String, FileItem> e : 
treePanel.getSelected().entrySet()) {
+                       move(treePanel, target, p, e.getValue());
+               }
+       }
+
+       private void move(final FileTreePanel treePanel, AjaxRequestTarget 
target, FileItem p, FileItem f) {
+               Long pid = p.getId();
+               //FIXME parent should not be moved to child !!!!!!!
+               if (pid != null && pid.equals(f.getId())) {
+                       return;
+               }
+               f.setParentId(pid);
+               f.setOwnerId(p.getOwnerId());
+               f.setRoomId(p.getRoomId());
+               if (f instanceof Recording) {
+                       Recording r = (Recording)f;
+                       r.setGroupId(((Recording)p).getGroupId());
+                       getBean(RecordingDao.class).update(r);
+               } else {
+                       
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+               }
+               treePanel.updateNode(target, f);
+       }
 }

Modified: 
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=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 Thu Jan 19 16:54:11 2017
@@ -126,10 +126,10 @@ public class OmTreeProvider implements I
                        FileExplorerItemDao dao = 
getBean(FileExplorerItemDao.class);
                        List<FileExplorerItem> _list;
                        if (id == null) {
-                               if (roomId == null) {
-                                       _list = dao.getByRoom(roomId);
-                               } else {
+                               if (node.getRoomId() == null) {
                                        _list = 
dao.getByOwner(node.getOwnerId());
+                               } else {
+                                       _list = dao.getByRoom(node.getRoomId());
                                }
                        } else {
                                _list = dao.getByParent(id);

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 Thu Jan 19 16:54:11 2017
@@ -31,6 +31,7 @@ import static org.apache.wicket.ajax.att
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Calendar;
+import java.util.Map.Entry;
 import java.util.UUID;
 
 import org.apache.directory.api.util.Strings;
@@ -174,14 +175,20 @@ public class RoomPanel extends BasePanel
                                super.onConfigure(behavior);
                                behavior.setOption("hoverClass", 
Options.asString("ui-state-hover"));
                                behavior.setOption("accept", 
Options.asString(".recorditem, .fileitem"));
-                               behavior.setOption("drop", "function(event, ui) 
{$(this).append(ui.helper.children());}");
                        }
 
                        @Override
                        public void onDrop(AjaxRequestTarget target, Component 
component) {
                                Object o = component.getDefaultModelObject();
                                if (activeWbId > -1 && o instanceof FileItem) {
-                                       sendFileToWb((FileItem)o, false);
+                                       FileItem f = (FileItem)o;
+                                       if 
(sidebar.getFilesPanel().isSelected(f)) {
+                                               for (Entry<String, FileItem> e 
: sidebar.getFilesPanel().getSelected().entrySet()) {
+                                                       
sendFileToWb(e.getValue(), false);
+                                               }
+                                       } else {
+                                               sendFileToWb(f, false);
+                                       }
                                }
                        }
                };

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 Thu Jan 19 16:54:11 2017
@@ -365,6 +365,10 @@ public class RoomSidebar extends Panel {
                roomFiles.update(handler);
        }
 
+       public RoomFilePanel getFilesPanel() {
+               return roomFiles;
+       }
+
        public boolean isShowFiles() {
                return showFiles;
        }

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
 Thu Jan 19 16:54:11 2017
@@ -41,7 +41,7 @@ import org.springframework.transaction.a
 
 /**
  * @author sebastianwagner
- * 
+ *
  */
 @Transactional
 public class FileExplorerItemDao {
@@ -95,10 +95,7 @@ public class FileExplorerItemDao {
 
        public List<FileExplorerItem> getByRoom(Long roomId) {
                log.debug("getFileExplorerItemsByRoom roomId :: " + roomId);
-               TypedQuery<FileExplorerItem> query = 
em.createNamedQuery("getFilesByRoom", FileExplorerItem.class);
-               query.setParameter("roomId", roomId);
-
-               return query.getResultList();
+               return em.createNamedQuery("getFilesByRoom", 
FileExplorerItem.class).setParameter("roomId", roomId).getResultList();
        }
 
        public List<FileExplorerItem> getByOwner(Long ownerId) {
@@ -272,7 +269,7 @@ public class FileExplorerItemDao {
                }
                return size;
        }
-       
+
        public long getSize(FileExplorerItem f) {
                long size = 0;
                try {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 Thu Jan 19 16:54:11 2017
@@ -40,7 +40,7 @@ public class DownloadMenuItem extends Me
        @Override
        public boolean isEnabled() {
                File f = null;
-               if (tree.selectedCount() == 1) {
+               if (tree.getSelected().size() == 1) {
                        f = tree.getLastSelected().getFile(ext);
                }
                return f != null && f.exists();

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=1779496&r1=1779495&r2=1779496&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
 Thu Jan 19 16:54:11 2017
@@ -79,9 +79,11 @@ public abstract class FileTreePanel exte
        private final AddFolderDialog addFolder;
        private final ConfirmableBorderDialog trashConfirm;
        private ConfirmableAjaxBorder trashBorder;
+       private final Long roomId;
 
        public FileTreePanel(String id, Long roomId, AddFolderDialog addFolder, 
ConfirmableBorderDialog trashConfirm) {
                super(id);
+               this.roomId = roomId;
                this.addFolder = addFolder;
                this.trashConfirm = trashConfirm;
                OmTreeProvider tp = new OmTreeProvider(roomId);
@@ -103,7 +105,6 @@ public abstract class FileTreePanel exte
                                super.onConfigure(behavior);
                                behavior.setOption("hoverClass", 
Options.asString("ui-state-hover trash-toolbar-hover"));
                                behavior.setOption("accept", 
Options.asString(".recorditem, .fileitem"));
-                               behavior.setOption("drop", "function(event, ui) 
{$(this).append(ui.helper.children());}");
                        }
 
                        @Override
@@ -141,7 +142,12 @@ public abstract class FileTreePanel exte
                        public void onDrop(AjaxRequestTarget target, Component 
component) {
                                Object o = component.getDefaultModelObject();
                                if (o instanceof FileItem) {
-                                       delete((FileItem)o, target);
+                                       FileItem f = (FileItem)o;
+                                       if (isSelected(f)) {
+                                               deleteAll(target);
+                                       } else {
+                                               delete(f, target);
+                                       }
                                }
                        }
                };
@@ -178,9 +184,7 @@ public abstract class FileTreePanel exte
 
                        @Override
                        protected void onSubmit(AjaxRequestTarget target, 
Form<?> form) {
-                               for (Entry<String, FileItem> e : 
selected.entrySet()) {
-                                       delete(e.getValue(), target);
-                               }
+                               deleteAll(target);
                        }
                });
 
@@ -198,6 +202,13 @@ public abstract class FileTreePanel exte
                return new WebMarkupContainer(id).setVisible(false);
        }
 
+       private void deleteAll(AjaxRequestTarget target) {
+               for (Entry<String, FileItem> e : selected.entrySet()) {
+                       delete(e.getValue(), target);
+               }
+               selected.clear();
+       }
+
        void delete(FileItem f, IPartialPageRequestHandler handler) {
                Long id = f.getId();
                if (id != null) {
@@ -241,8 +252,8 @@ public abstract class FileTreePanel exte
                return selected.containsKey(f.getHash());
        }
 
-       public int selectedCount() {
-               return selected.size();
+       public Map<String, FileItem> getSelected() {
+               return selected;
        }
 
        public FileItem getLastSelected() {
@@ -270,7 +281,7 @@ public abstract class FileTreePanel exte
                }
        }
 
-       private static boolean sameParent(FileItem f1, FileItem f2) {
+       private static boolean sameParent(Long roomId, FileItem f1, FileItem 
f2) {
                if (f1 instanceof Recording && f2 instanceof FileExplorerItem) {
                        return false;
                }
@@ -284,7 +295,7 @@ public abstract class FileTreePanel exte
                        if (f1.getRoomId() != null && 
f1.getRoomId().equals(f2.getRoomId())) {
                                return true;
                        }
-                       if (f1.getRoomId() == null && f2.getRoomId() == null && 
f1.getOwnerId() == null && f2.getOwnerId() == null) {
+                       if (f2 instanceof FileExplorerItem && roomId != null && 
f1.getRoomId() == null && f2.getRoomId() == null && f1.getOwnerId() == null && 
f2.getOwnerId() == null) {
                                return true;
                        }
                }
@@ -300,7 +311,7 @@ public abstract class FileTreePanel exte
                                selected.put(fi.getHash(), fi);
                        }
                        lastSelected = fi;
-               } else if (shift && lastSelected != null && 
!lastSelected.getHash().equals(fi.getHash()) && sameParent(fi, lastSelected)) {
+               } else if (shift && lastSelected != null && 
!lastSelected.getHash().equals(fi.getHash()) && sameParent(roomId, fi, 
lastSelected)) {
                        selected.clear();
                        String lastHash = null;
                        for (FileItem f : 
((OmTreeProvider)tree.getProvider()).getByParent(fi, fi.getParentId())) {

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=1779496&r1=1779495&r2=1779496&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
 Thu Jan 19 16:54:11 2017
@@ -20,6 +20,8 @@ package org.apache.openmeetings.web.comm
 
 import static org.apache.openmeetings.web.app.Application.getBean;
 
+import java.util.Map.Entry;
+
 import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.entity.file.FileExplorerItem;
@@ -58,7 +60,6 @@ public class FolderPanel extends Panel {
                                super.onConfigure(behavior);
                                behavior.setOption("hoverClass", 
Options.asString("ui-state-hover"));
                                behavior.setOption("accept", 
Options.asString(getDefaultModelObject() instanceof Recording ? ".recorditem" : 
".fileitem"));
-                               behavior.setOption("drop", "function(event, ui) 
{$(this).append(ui.helper.children());}");
                        }
 
                        @Override
@@ -67,23 +68,12 @@ public class FolderPanel extends Panel {
                                if (o instanceof FileItem) {
                                        FileItem p = 
(FileItem)drop.getDefaultModelObject();
                                        FileItem f = (FileItem)o;
-                                       Long pid = p.getId();
-                                       //FIXME parent should not be moved to 
child !!!!!!!
-                                       if (pid != null && 
pid.equals(f.getId())) {
-                                               return;
-                                       }
-                                       f.setParentId(pid);
-                                       f.setOwnerId(p.getOwnerId());
-                                       f.setRoomId(p.getRoomId());
-                                       if (f instanceof Recording) {
-                                               Recording r = (Recording)f;
-                                               
r.setGroupId(((Recording)p).getGroupId());
-                                               
getBean(RecordingDao.class).update(r);
+                                       if (treePanel.isSelected(f)) {
+                                               moveAll(treePanel, target, p);
                                        } else {
-                                               
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+                                               move(treePanel, target, p, f);
                                        }
                                        treePanel.updateNode(target, p);
-                                       treePanel.updateNode(target, f);
                                }
                                target.add(treePanel.trees);
                        }
@@ -131,4 +121,29 @@ public class FolderPanel extends Panel {
                });
                add(drop.add(drag).setOutputMarkupId(true));
        }
+
+       private void moveAll(final FileTreePanel treePanel, AjaxRequestTarget 
target, FileItem p) {
+               for (Entry<String, FileItem> e : 
treePanel.getSelected().entrySet()) {
+                       move(treePanel, target, p, e.getValue());
+               }
+       }
+
+       private void move(final FileTreePanel treePanel, AjaxRequestTarget 
target, FileItem p, FileItem f) {
+               Long pid = p.getId();
+               //FIXME parent should not be moved to child !!!!!!!
+               if (pid != null && pid.equals(f.getId())) {
+                       return;
+               }
+               f.setParentId(pid);
+               f.setOwnerId(p.getOwnerId());
+               f.setRoomId(p.getRoomId());
+               if (f instanceof Recording) {
+                       Recording r = (Recording)f;
+                       r.setGroupId(((Recording)p).getGroupId());
+                       getBean(RecordingDao.class).update(r);
+               } else {
+                       
getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
+               }
+               treePanel.updateNode(target, f);
+       }
 }

Modified: 
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=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
 Thu Jan 19 16:54:11 2017
@@ -126,10 +126,10 @@ public class OmTreeProvider implements I
                        FileExplorerItemDao dao = 
getBean(FileExplorerItemDao.class);
                        List<FileExplorerItem> _list;
                        if (id == null) {
-                               if (roomId == null) {
-                                       _list = dao.getByRoom(roomId);
-                               } else {
+                               if (node.getRoomId() == null) {
                                        _list = 
dao.getByOwner(node.getOwnerId());
+                               } else {
+                                       _list = dao.getByRoom(node.getRoomId());
                                }
                        } else {
                                _list = dao.getByParent(id);

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 Thu Jan 19 16:54:11 2017
@@ -29,6 +29,7 @@ import static org.apache.openmeetings.we
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Calendar;
+import java.util.Map.Entry;
 import java.util.UUID;
 
 import org.apache.directory.api.util.Strings;
@@ -175,14 +176,20 @@ public class RoomPanel extends BasePanel
                                super.onConfigure(behavior);
                                behavior.setOption("hoverClass", 
Options.asString("ui-state-hover"));
                                behavior.setOption("accept", 
Options.asString(".recorditem, .fileitem"));
-                               behavior.setOption("drop", "function(event, ui) 
{$(this).append(ui.helper.children());}");
                        }
 
                        @Override
                        public void onDrop(AjaxRequestTarget target, Component 
component) {
                                Object o = component.getDefaultModelObject();
                                if (activeWbId > -1 && o instanceof FileItem) {
-                                       sendFileToWb((FileItem)o, false);
+                                       FileItem f = (FileItem)o;
+                                       if 
(sidebar.getFilesPanel().isSelected(f)) {
+                                               for (Entry<String, FileItem> e 
: sidebar.getFilesPanel().getSelected().entrySet()) {
+                                                       
sendFileToWb(e.getValue(), false);
+                                               }
+                                       } else {
+                                               sendFileToWb(f, false);
+                                       }
                                }
                        }
                };

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1779496&r1=1779495&r2=1779496&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 Thu Jan 19 16:54:11 2017
@@ -365,6 +365,10 @@ public class RoomSidebar extends Panel {
                roomFiles.update(handler);
        }
 
+       public RoomFilePanel getFilesPanel() {
+               return roomFiles;
+       }
+
        public boolean isShowFiles() {
                return showFiles;
        }


Reply via email to