You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/01/19 16:54:11 UTC

svn commit: r1779496 - in /openmeetings/application: branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/ branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ branches/3.2.x/openmeetings-we...

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;
 	}