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 2016/08/10 10:35:29 UTC

svn commit: r1755713 - in /openmeetings/application: branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/ branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/ branches/3.2.x/openmeetings-util/s...

Author: solomax
Date: Wed Aug 10 10:35:29 2016
New Revision: 1755713

URL: http://svn.apache.org/viewvc?rev=1755713&view=rev
Log:
[OPENMEETINGS-1030] file type detection is changed, upload to WB is implemented

Added:
    openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java
    openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/
    openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/META-INF/
    openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/META-INF/services/
    openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector
    openmeetings/application/branches/3.2.x/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java
    openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java
    openmeetings/application/trunk/openmeetings-util/src/main/resources/
    openmeetings/application/trunk/openmeetings-util/src/main/resources/META-INF/
    openmeetings/application/trunk/openmeetings-util/src/main/resources/META-INF/services/
    openmeetings/application/trunk/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector
    openmeetings/application/trunk/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java
Modified:
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
    openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.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/room/RoomPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
    openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.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/room/RoomPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java Wed Aug 10 10:35:29 2016
@@ -394,7 +394,7 @@ public class UserManager implements IUse
 				}
 				log.debug("Added user-Id " + u.getId());
 
-				if (adr.getId() > 0 && u.getId() > 0) {
+				if (adr.getId() != null && u.getId() != null) {
 					return u.getId();
 				} else {
 					return -16L;

Added: openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java?rev=1755713&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java Wed Aug 10 10:35:29 2016
@@ -0,0 +1,38 @@
+/*
+ * 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.util;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.spi.FileTypeDetector;
+
+public class OmFileDetector extends FileTypeDetector {
+	private final static String[] KNOWN_EXTS = {"dpx", "exr", "pcd", "pcds", "xcf", "wpg", "tga"};
+	private final static String OTHER = "image/other";
+
+	@Override
+	public String probeContentType(Path path) throws IOException {
+		for (String ext : KNOWN_EXTS) {
+			if (("" + path).endsWith(ext)) {
+				return OTHER;
+			}
+		}
+		return null;
+	}
+}

Modified: openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java Wed Aug 10 10:35:29 2016
@@ -18,35 +18,31 @@
  */
 package org.apache.openmeetings.util;
 
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
+import javax.activation.MimetypesFileTypeMap;
+
 import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.util.string.Strings;
 
 public class StoredFile {
+	private final static MimetypesFileTypeMap MIMES_MAP = new MimetypesFileTypeMap();
+	private final static String MIME_AUDIO = "audio";
+	private final static String MIME_VIDEO = "video";
+	private final static String MIME_IMAGE = "image";
 	private static final Set<String> convertExtensions = new HashSet<>(
 			Arrays.asList("ppt", "odp", "odt", "sxw", "wpd", "doc", "rtf", "txt", "ods", "sxc", "xls", "sxi", "pptx", "docx", "xlsx"));
 
 	private static final Set<String> pdfExtensions = new HashSet<>(Arrays.asList("pdf", "ps"));
 
-	private static final Set<String> imageExtensions = new HashSet<>(Arrays.asList("png", "gif", "svg", "dpx", "exr",
-			"pcd", // PhotoCD
-			"pcds", // PhotoCD
-			"psd", // Adobe Photoshop
-			"tiff", // Tagged Image File Format
-			"ttf", // TrueType font
-			"xcf", // GIMP image
-			"wpg", // Word Perfect Graphics
-			"bmp", "ico", // Microsoft Icon
-			"tga", // Truevision Targa
-			"jpg", "jpeg"));
-
 	private static final Set<String> chartExtensions = new HashSet<>(Arrays.asList("xchart"));
 
-	private static final Set<String> videoExtensions = new HashSet<>(Arrays.asList("avi", "mov", "flv", "mp4"));
-
 	private static final Set<String> asIsExtensions = new HashSet<>(Arrays.asList("jpg", "xchart"));
 
 	private final String name;
@@ -63,26 +59,13 @@ public class StoredFile {
 		this.ext = ext != null ? ext.toLowerCase() : "";
 	}
 
-	public static String[] getExtensions() {
-		Set<String> extensions = new HashSet<>();
-		extensions.addAll(convertExtensions);
-		extensions.addAll(pdfExtensions);
-		extensions.addAll(imageExtensions);
-		extensions.addAll(chartExtensions);
-		extensions.addAll(videoExtensions);
-		extensions.addAll(asIsExtensions);
-
-		return extensions.toArray(new String[extensions.size()]);
-	}
-
 	public static String getAcceptAttr() {
 		Set<String> ext = new LinkedHashSet<>();
 		ext.addAll(convertExtensions);
 		ext.addAll(pdfExtensions);
 		ext.addAll(chartExtensions);
-		StringBuilder sb = new StringBuilder("video/*,image/*,."); // TODO add audio/*,
-		sb.append(StringUtils.join(ext, ",."));
-		// TODO java8 String.join("|.", ext);
+		StringBuilder sb = new StringBuilder("audio/*,video/*,image/*,.");
+		sb.append(StringUtils.join(ext, ",.")); // TODO java8 String.join("|.", ext);
 		return sb.toString();
 	}
 
@@ -98,12 +81,29 @@ public class StoredFile {
 		return pdfExtensions.contains(ext);
 	}
 
+	private static String getMimeType(StoredFile f) {
+		String filename = String.format("%s%s%s", f.name, Strings.isEmpty(f.ext) ? "" : ".", f.ext);
+		String type = "";
+		try {
+			type = Files.probeContentType(new File(filename).toPath());
+		} catch (IOException e) {
+			//no-op
+		}
+		if (Strings.isEmpty(type)) {
+			type = MIMES_MAP.getContentType(filename);
+		}
+		String[] mime = type.split("/");
+		return mime[0];
+	}
+	
 	public boolean isImage() {
-		return imageExtensions.contains(ext);
+		String mime = getMimeType(this);
+		return MIME_IMAGE.equals(mime);
 	}
 
 	public boolean isVideo() {
-		return videoExtensions.contains(ext);
+		String mime = getMimeType(this);
+		return MIME_AUDIO.equals(mime) || MIME_VIDEO.equals(mime);
 	}
 
 	public boolean isChart() {

Added: openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector?rev=1755713&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector Wed Aug 10 10:35:29 2016
@@ -0,0 +1,12 @@
+#   Licensed 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.
+org.apache.openmeetings.util.OmFileDetector
\ No newline at end of file

Added: openmeetings/application/branches/3.2.x/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java?rev=1755713&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java Wed Aug 10 10:35:29 2016
@@ -0,0 +1,67 @@
+/*
+ * 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.util.crypt;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import org.apache.openmeetings.util.StoredFile;
+import org.junit.Test;
+
+public class TestStoredFile {
+
+	@Test
+	public void testAudio() {
+		final String[] exts = {"aif", "aifc", "aiff", "au", "mp3", "flac", "wav"}; //TODO enlarge
+		for (String ext : exts) {
+			StoredFile sf = new StoredFile("test", ext);
+			assertTrue(String.format("Files of type '%s' should be treated as Video", ext), sf.isVideo());
+			assertFalse(String.format("Files of type '%s' should NOT be treated as Image", ext), sf.isImage());
+		}
+	}
+
+	@Test
+	public void testVideo() {
+		final String[] exts = {"avi", "mov", "flv", "mp4"}; //TODO enlarge
+		for (String ext : exts) {
+			StoredFile sf = new StoredFile("test", ext);
+			assertTrue(String.format("Files of type '%s' should be treated as Video", ext), sf.isVideo());
+			assertFalse(String.format("Files of type '%s' should NOT be treated as Image", ext), sf.isImage());
+		}
+	}
+
+	@Test
+	public void testImage() {
+		final String[] exts = {"png", "gif", "svg", "dpx", "exr",
+				"pcd", // PhotoCD
+				"pcds", // PhotoCD
+				"psd", // Adobe Photoshop
+				"tiff", // Tagged Image File Format
+				"xcf", // GIMP image
+				"wpg", // Word Perfect Graphics
+				"bmp", "ico", // Microsoft Icon
+				"tga", // Truevision Targa
+				"jpg", "jpeg"}; //TODO enlarge
+		for (String ext : exts) {
+			StoredFile sf = new StoredFile("test", ext);
+			assertTrue(String.format("Files of type '%s' should be treated as Image", ext), sf.isImage());
+			assertFalse(String.format("Files of type '%s' should NOT be treated as Video", ext), sf.isVideo());
+		}
+	}
+}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java Wed Aug 10 10:35:29 2016
@@ -92,7 +92,7 @@ public class LdapForm extends AdminBaseF
 	@Override
 	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
 		LdapConfig ldapConfig = this.getModelObject();
-		if (ldapConfig.getId() <= 0) {
+		if (ldapConfig.getId() != null) {
 			ldapConfig = getBean(LdapConfigDao.class).get(ldapConfig.getId());
 		} else {
 			ldapConfig = new LdapConfig();

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java Wed Aug 10 10:35:29 2016
@@ -99,7 +99,7 @@ public class OAuthForm extends AdminBase
 	@Override
 	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
 		OAuthServer server = this.getModelObject();
-		if (server.getId() <= 0) {
+		if (server.getId() != null) {
 			server = Application.getBean(OAuth2Dao.class).get(getModelObject().getId());
 		} else {
 			server = new OAuthServer();

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java Wed Aug 10 10:35:29 2016
@@ -99,7 +99,7 @@ public class ServerForm extends AdminBas
 	@Override
 	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
 		Server server = getModelObject();
-		if (server.getId() > 0) {
+		if (server.getId() != null) {
 			server = Application.getBean(ServerDao.class).get(server.getId());
 		} else {
 			server = new Server();

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=1755713&r1=1755712&r2=1755713&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 10:35:29 2016
@@ -146,7 +146,7 @@ public abstract class FileTreePanel exte
 
 			@Override
 			protected void onEvent(AjaxRequestTarget target) {
-				target.add(trees);
+				update(target);
 			}
 		}));
 		trashToolbar.add(new ConfirmableAjaxBorder("trash", getString("80"), getString("713")) {
@@ -155,7 +155,7 @@ public abstract class FileTreePanel exte
 			@Override
 			protected void onEvent(AjaxRequestTarget target) {
 				FileItem f = selected.getObject();
-				if (f != null && f.getId() > 0) {
+				if (f != null && f.getId() != null) {
 					super.onEvent(target);
 				}
 			}
@@ -189,7 +189,7 @@ public abstract class FileTreePanel exte
 				getBean(FileExplorerItemDao.class).delete((FileExplorerItem)f);
 			}
 		}
-		handler.add(trees);
+		update(handler);
 	}
 	
 	protected abstract void update(AjaxRequestTarget target, FileItem f);
@@ -215,7 +215,7 @@ public abstract class FileTreePanel exte
 			f.setRoomId(p.getRoomId());
 			getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
 		}
-		target.add(trees);
+		update(target);
 	}
 
 	public abstract void updateSizes();
@@ -223,7 +223,11 @@ public abstract class FileTreePanel exte
 	public FileItem getSelected() {
 		return selected.getObject();
 	}
-	
+
+	public void update(IPartialPageRequestHandler handler) {
+		handler.add(trees);
+	}
+
 	void updateNode(AjaxRequestTarget target, FileItem fi) {
 		if (fi != null && target != null) {
 			if (Type.Folder == fi.getType()) {

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=1755713&r1=1755712&r2=1755713&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 Wed Aug 10 10:35:29 2016
@@ -170,13 +170,7 @@ public class RoomPanel extends BasePanel
 			public void onDrop(AjaxRequestTarget target, Component component) {
 				Object o = component.getDefaultModelObject();
 				if (activeWbId > -1 && o instanceof FileItem) {
-					FileItem fi = (FileItem)o;
-					if (fi.getType() == FileItem.Type.WmlFile) {
-						getBean(ConferenceLibrary.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi);
-					} else {
-						String url = urlFor(new RoomResourceReference(), new PageParameters().add("id", fi.getId())).toString();
-						getBean(ScopeApplicationAdapter.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi, url);
-					}
+					sendFileToWb((FileItem)o);
 				}
 			}
 		};
@@ -534,4 +528,15 @@ public class RoomPanel extends BasePanel
 	public String getPublishingUser() {
 		return publishingUser;
 	}
+
+	public void sendFileToWb(FileItem fi) {
+		if (activeWbId > -1) {
+			if (fi.getType() == FileItem.Type.WmlFile) {
+				getBean(ConferenceLibrary.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi);
+			} else {
+				String url = urlFor(new RoomResourceReference(), new PageParameters().add("id", fi.getId())).toString();
+				getBean(ScopeApplicationAdapter.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi, url);
+			}
+		}
+	}
 }

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=1755713&r1=1755712&r2=1755713&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 Wed Aug 10 10:35:29 2016
@@ -203,7 +203,7 @@ public class RoomSidebar extends Panel {
 	private void updateShowFiles() {
 		showFiles = !room.getRoom().isHidden(RoomElement.Files) && room.getClient().hasRight(Right.whiteBoard);
 	}
-	
+
 	public void updateUsers(IPartialPageRequestHandler handler) {
 		updateShowFiles();
 		updateUsers();
@@ -212,6 +212,10 @@ public class RoomSidebar extends Panel {
 		handler.add(tabs);
 	}
 
+	public void updateFiles(IPartialPageRequestHandler handler) {
+		roomFiles.update(handler);
+	}
+
 	public boolean isShowFiles() {
 		return showFiles;
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html Wed Aug 10 10:35:29 2016
@@ -31,7 +31,7 @@
 		</div>
 		<div wicket:id="feedback"></div>
 		<span wicket:id="progress">[progressbar]</span>
-		<div style="margin-top: 30px;"><input type="checkbox"/><label><wicket:message key="1312"/></label></div>
+		<div style="margin-top: 30px;"><input wicket:id="to-wb" type="checkbox"/><label wicket:for="to-wb"><wicket:message key="1312"/></label></div>
 	</form>
 	<form wicket:id="name-form">
 		<input type="hidden" wicket:id="name"/>

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=1755713&r1=1755712&r2=1755713&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 10:35:29 2016
@@ -41,6 +41,7 @@ import org.apache.wicket.extensions.ajax
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.HiddenField;
 import org.apache.wicket.markup.html.form.upload.FileUpload;
@@ -64,6 +65,7 @@ public class UploadDialog extends Abstra
 	private final DialogButton cancel;
 	private final FileUploadField uploadField;
 	private final HiddenField<String> fileName;
+	private final CheckBox toWb = new CheckBox("to-wb", Model.of(false));
 	private final RoomFilePanel roomFiles;
 	private final RoomPanel room;
 
@@ -81,7 +83,7 @@ public class UploadDialog extends Abstra
 			}
 		};
 		cancel = new DialogButton("close", Application.getString(85));
-		form.add(feedback.setOutputMarkupId(true));
+		form.add(feedback.setOutputMarkupId(true), toWb);
 	
 		form.setMultiPart(true);
 		form.setMaxSize(Bytes.bytes(getBean(ConfigurationDao.class).getMaxUploadSize()));
@@ -167,7 +169,7 @@ public class UploadDialog extends Abstra
 			} else {
 				f.setRoomId(parent.getRoomId());
 				f.setOwnerId(parent.getOwnerId());
-				if (parent.getId() > 0) {
+				if (parent.getId() != null) {
 					f.setParentId(FileItem.Type.Folder == parent.getType() ? parent.getId() : parent.getParentId());
 				}
 			}
@@ -175,9 +177,13 @@ public class UploadDialog extends Abstra
 			
 			try {
 				ConverterProcessResultList result = getBean(FileProcessor.class).processFile(getUserId(), f, fu.getInputStream());
+				room.getSidebar().updateFiles(target);
 				if (result.hasError()) {
 					error(result.getLogMessage());
 				} else {
+					if (toWb.getModelObject()) {
+						room.sendFileToWb(f);
+					}
 					close(target, null);
 				}
 			} catch (Exception e) {

Modified: openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java (original)
+++ openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java Wed Aug 10 10:35:29 2016
@@ -394,7 +394,7 @@ public class UserManager implements IUse
 				}
 				log.debug("Added user-Id " + u.getId());
 
-				if (adr.getId() > 0 && u.getId() > 0) {
+				if (adr.getId() != null && u.getId() != null) {
 					return u.getId();
 				} else {
 					return -16L;

Added: openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java?rev=1755713&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java (added)
+++ openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileDetector.java Wed Aug 10 10:35:29 2016
@@ -0,0 +1,38 @@
+/*
+ * 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.util;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.spi.FileTypeDetector;
+
+public class OmFileDetector extends FileTypeDetector {
+	private final static String[] KNOWN_EXTS = {"dpx", "exr", "pcd", "pcds", "xcf", "wpg", "tga"};
+	private final static String OTHER = "image/other";
+
+	@Override
+	public String probeContentType(Path path) throws IOException {
+		for (String ext : KNOWN_EXTS) {
+			if (("" + path).endsWith(ext)) {
+				return OTHER;
+			}
+		}
+		return null;
+	}
+}

Modified: openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java (original)
+++ openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java Wed Aug 10 10:35:29 2016
@@ -18,35 +18,31 @@
  */
 package org.apache.openmeetings.util;
 
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
+import javax.activation.MimetypesFileTypeMap;
+
 import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.util.string.Strings;
 
 public class StoredFile {
+	private final static MimetypesFileTypeMap MIMES_MAP = new MimetypesFileTypeMap();
+	private final static String MIME_AUDIO = "audio";
+	private final static String MIME_VIDEO = "video";
+	private final static String MIME_IMAGE = "image";
 	private static final Set<String> convertExtensions = new HashSet<>(
 			Arrays.asList("ppt", "odp", "odt", "sxw", "wpd", "doc", "rtf", "txt", "ods", "sxc", "xls", "sxi", "pptx", "docx", "xlsx"));
 
 	private static final Set<String> pdfExtensions = new HashSet<>(Arrays.asList("pdf", "ps"));
 
-	private static final Set<String> imageExtensions = new HashSet<>(Arrays.asList("png", "gif", "svg", "dpx", "exr",
-			"pcd", // PhotoCD
-			"pcds", // PhotoCD
-			"psd", // Adobe Photoshop
-			"tiff", // Tagged Image File Format
-			"ttf", // TrueType font
-			"xcf", // GIMP image
-			"wpg", // Word Perfect Graphics
-			"bmp", "ico", // Microsoft Icon
-			"tga", // Truevision Targa
-			"jpg", "jpeg"));
-
 	private static final Set<String> chartExtensions = new HashSet<>(Arrays.asList("xchart"));
 
-	private static final Set<String> videoExtensions = new HashSet<>(Arrays.asList("avi", "mov", "flv", "mp4"));
-
 	private static final Set<String> asIsExtensions = new HashSet<>(Arrays.asList("jpg", "xchart"));
 
 	private final String name;
@@ -63,26 +59,13 @@ public class StoredFile {
 		this.ext = ext != null ? ext.toLowerCase() : "";
 	}
 
-	public static String[] getExtensions() {
-		Set<String> extensions = new HashSet<>();
-		extensions.addAll(convertExtensions);
-		extensions.addAll(pdfExtensions);
-		extensions.addAll(imageExtensions);
-		extensions.addAll(chartExtensions);
-		extensions.addAll(videoExtensions);
-		extensions.addAll(asIsExtensions);
-
-		return extensions.toArray(new String[extensions.size()]);
-	}
-
 	public static String getAcceptAttr() {
 		Set<String> ext = new LinkedHashSet<>();
 		ext.addAll(convertExtensions);
 		ext.addAll(pdfExtensions);
 		ext.addAll(chartExtensions);
-		StringBuilder sb = new StringBuilder("video/*,image/*,."); // TODO add audio/*,
-		sb.append(StringUtils.join(ext, ",."));
-		// TODO java8 String.join("|.", ext);
+		StringBuilder sb = new StringBuilder("audio/*,video/*,image/*,.");
+		sb.append(StringUtils.join(ext, ",.")); // TODO java8 String.join("|.", ext);
 		return sb.toString();
 	}
 
@@ -98,12 +81,29 @@ public class StoredFile {
 		return pdfExtensions.contains(ext);
 	}
 
+	private static String getMimeType(StoredFile f) {
+		String filename = String.format("%s%s%s", f.name, Strings.isEmpty(f.ext) ? "" : ".", f.ext);
+		String type = "";
+		try {
+			type = Files.probeContentType(new File(filename).toPath());
+		} catch (IOException e) {
+			//no-op
+		}
+		if (Strings.isEmpty(type)) {
+			type = MIMES_MAP.getContentType(filename);
+		}
+		String[] mime = type.split("/");
+		return mime[0];
+	}
+	
 	public boolean isImage() {
-		return imageExtensions.contains(ext);
+		String mime = getMimeType(this);
+		return MIME_IMAGE.equals(mime);
 	}
 
 	public boolean isVideo() {
-		return videoExtensions.contains(ext);
+		String mime = getMimeType(this);
+		return MIME_AUDIO.equals(mime) || MIME_VIDEO.equals(mime);
 	}
 
 	public boolean isChart() {

Added: openmeetings/application/trunk/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector?rev=1755713&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector (added)
+++ openmeetings/application/trunk/openmeetings-util/src/main/resources/META-INF/services/java.nio.file.spi.FileTypeDetector Wed Aug 10 10:35:29 2016
@@ -0,0 +1,12 @@
+#   Licensed 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.
+org.apache.openmeetings.util.OmFileDetector
\ No newline at end of file

Added: openmeetings/application/trunk/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java?rev=1755713&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java (added)
+++ openmeetings/application/trunk/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestStoredFile.java Wed Aug 10 10:35:29 2016
@@ -0,0 +1,67 @@
+/*
+ * 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.util.crypt;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+import org.apache.openmeetings.util.StoredFile;
+import org.junit.Test;
+
+public class TestStoredFile {
+
+	@Test
+	public void testAudio() {
+		final String[] exts = {"aif", "aifc", "aiff", "au", "mp3", "flac", "wav"}; //TODO enlarge
+		for (String ext : exts) {
+			StoredFile sf = new StoredFile("test", ext);
+			assertTrue(String.format("Files of type '%s' should be treated as Video", ext), sf.isVideo());
+			assertFalse(String.format("Files of type '%s' should NOT be treated as Image", ext), sf.isImage());
+		}
+	}
+
+	@Test
+	public void testVideo() {
+		final String[] exts = {"avi", "mov", "flv", "mp4"}; //TODO enlarge
+		for (String ext : exts) {
+			StoredFile sf = new StoredFile("test", ext);
+			assertTrue(String.format("Files of type '%s' should be treated as Video", ext), sf.isVideo());
+			assertFalse(String.format("Files of type '%s' should NOT be treated as Image", ext), sf.isImage());
+		}
+	}
+
+	@Test
+	public void testImage() {
+		final String[] exts = {"png", "gif", "svg", "dpx", "exr",
+				"pcd", // PhotoCD
+				"pcds", // PhotoCD
+				"psd", // Adobe Photoshop
+				"tiff", // Tagged Image File Format
+				"xcf", // GIMP image
+				"wpg", // Word Perfect Graphics
+				"bmp", "ico", // Microsoft Icon
+				"tga", // Truevision Targa
+				"jpg", "jpeg"}; //TODO enlarge
+		for (String ext : exts) {
+			StoredFile sf = new StoredFile("test", ext);
+			assertTrue(String.format("Files of type '%s' should be treated as Image", ext), sf.isImage());
+			assertFalse(String.format("Files of type '%s' should NOT be treated as Video", ext), sf.isVideo());
+		}
+	}
+}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java Wed Aug 10 10:35:29 2016
@@ -92,7 +92,7 @@ public class LdapForm extends AdminBaseF
 	@Override
 	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
 		LdapConfig ldapConfig = this.getModelObject();
-		if (ldapConfig.getId() <= 0) {
+		if (ldapConfig.getId() != null) {
 			ldapConfig = getBean(LdapConfigDao.class).get(ldapConfig.getId());
 		} else {
 			ldapConfig = new LdapConfig();

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java Wed Aug 10 10:35:29 2016
@@ -99,7 +99,7 @@ public class OAuthForm extends AdminBase
 	@Override
 	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
 		OAuthServer server = this.getModelObject();
-		if (server.getId() <= 0) {
+		if (server.getId() != null) {
 			server = Application.getBean(OAuth2Dao.class).get(getModelObject().getId());
 		} else {
 			server = new OAuthServer();

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java Wed Aug 10 10:35:29 2016
@@ -99,7 +99,7 @@ public class ServerForm extends AdminBas
 	@Override
 	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
 		Server server = getModelObject();
-		if (server.getId() > 0) {
+		if (server.getId() != null) {
 			server = Application.getBean(ServerDao.class).get(server.getId());
 		} else {
 			server = new Server();

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=1755713&r1=1755712&r2=1755713&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 10:35:29 2016
@@ -146,7 +146,7 @@ public abstract class FileTreePanel exte
 
 			@Override
 			protected void onEvent(AjaxRequestTarget target) {
-				target.add(trees);
+				update(target);
 			}
 		}));
 		trashToolbar.add(new ConfirmableAjaxBorder("trash", getString("80"), getString("713")) {
@@ -155,7 +155,7 @@ public abstract class FileTreePanel exte
 			@Override
 			protected void onEvent(AjaxRequestTarget target) {
 				FileItem f = selected.getObject();
-				if (f != null && f.getId() > 0) {
+				if (f != null && f.getId() != null) {
 					super.onEvent(target);
 				}
 			}
@@ -189,7 +189,7 @@ public abstract class FileTreePanel exte
 				getBean(FileExplorerItemDao.class).delete((FileExplorerItem)f);
 			}
 		}
-		handler.add(trees);
+		update(handler);
 	}
 	
 	protected abstract void update(AjaxRequestTarget target, FileItem f);
@@ -215,7 +215,7 @@ public abstract class FileTreePanel exte
 			f.setRoomId(p.getRoomId());
 			getBean(FileExplorerItemDao.class).update((FileExplorerItem)f);
 		}
-		target.add(trees);
+		update(target);
 	}
 
 	public abstract void updateSizes();
@@ -223,7 +223,11 @@ public abstract class FileTreePanel exte
 	public FileItem getSelected() {
 		return selected.getObject();
 	}
-	
+
+	public void update(IPartialPageRequestHandler handler) {
+		handler.add(trees);
+	}
+
 	void updateNode(AjaxRequestTarget target, FileItem fi) {
 		if (fi != null && target != null) {
 			if (Type.Folder == fi.getType()) {

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=1755713&r1=1755712&r2=1755713&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 Wed Aug 10 10:35:29 2016
@@ -137,6 +137,7 @@ public class RoomPanel extends BasePanel
 	private String sharingUser = null;
 	private String recordingUser = null;
 	private String publishingUser = null; //TODO add
+	private long activeWbId = -1;
 	
 	public RoomPanel(String id, Room r) {
 		super(id);
@@ -167,7 +168,8 @@ public class RoomPanel extends BasePanel
 			@Override
 			public void onDrop(AjaxRequestTarget target, Component component) {
 				Object o = component.getDefaultModelObject();
-				if (o instanceof FileItem) {
+				if (activeWbId > -1 && o instanceof FileItem) {
+					sendFileToWb((FileItem)o);
 				}
 			}
 		};
@@ -538,4 +540,15 @@ public class RoomPanel extends BasePanel
 	public String getPublishingUser() {
 		return publishingUser;
 	}
+
+	public void sendFileToWb(FileItem fi) {
+		if (activeWbId > -1) {
+			if (fi.getType() == FileItem.Type.WmlFile) {
+				getBean(ConferenceLibrary.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi);
+			} else {
+				String url = urlFor(new RoomResourceReference(), new PageParameters().add("id", fi.getId())).toString();
+				getBean(ScopeApplicationAdapter.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi, url);
+			}
+		}
+	}
 }

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=1755713&r1=1755712&r2=1755713&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 Wed Aug 10 10:35:29 2016
@@ -203,7 +203,7 @@ public class RoomSidebar extends Panel {
 	private void updateShowFiles() {
 		showFiles = !room.getRoom().isHidden(RoomElement.Files) && room.getClient().hasRight(Right.whiteBoard);
 	}
-	
+
 	public void updateUsers(IPartialPageRequestHandler handler) {
 		updateShowFiles();
 		updateUsers();
@@ -212,6 +212,10 @@ public class RoomSidebar extends Panel {
 		handler.add(tabs);
 	}
 
+	public void updateFiles(IPartialPageRequestHandler handler) {
+		roomFiles.update(handler);
+	}
+
 	public boolean isShowFiles() {
 		return showFiles;
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html?rev=1755713&r1=1755712&r2=1755713&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.html Wed Aug 10 10:35:29 2016
@@ -31,7 +31,7 @@
 		</div>
 		<div wicket:id="feedback"></div>
 		<span wicket:id="progress">[progressbar]</span>
-		<div style="margin-top: 30px;"><input type="checkbox"/><label><wicket:message key="1312"/></label></div>
+		<div style="margin-top: 30px;"><input wicket:id="to-wb" type="checkbox"/><label wicket:for="to-wb"><wicket:message key="1312"/></label></div>
 	</form>
 	<form wicket:id="name-form">
 		<input type="hidden" wicket:id="name"/>

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=1755713&r1=1755712&r2=1755713&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 10:35:29 2016
@@ -41,6 +41,7 @@ import org.apache.wicket.extensions.ajax
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.HiddenField;
 import org.apache.wicket.markup.html.form.upload.FileUpload;
@@ -64,6 +65,7 @@ public class UploadDialog extends Abstra
 	private final DialogButton cancel;
 	private final FileUploadField uploadField;
 	private final HiddenField<String> fileName;
+	private final CheckBox toWb = new CheckBox("to-wb", Model.of(false));
 	private final RoomFilePanel roomFiles;
 	private final RoomPanel room;
 
@@ -81,7 +83,7 @@ public class UploadDialog extends Abstra
 			}
 		};
 		cancel = new DialogButton("close", Application.getString(85));
-		form.add(feedback.setOutputMarkupId(true));
+		form.add(feedback.setOutputMarkupId(true), toWb);
 	
 		form.setMultiPart(true);
 		form.setMaxSize(Bytes.bytes(getBean(ConfigurationDao.class).getMaxUploadSize()));
@@ -167,7 +169,7 @@ public class UploadDialog extends Abstra
 			} else {
 				f.setRoomId(parent.getRoomId());
 				f.setOwnerId(parent.getOwnerId());
-				if (parent.getId() > 0) {
+				if (parent.getId() != null) {
 					f.setParentId(FileItem.Type.Folder == parent.getType() ? parent.getId() : parent.getParentId());
 				}
 			}
@@ -175,9 +177,13 @@ public class UploadDialog extends Abstra
 			
 			try {
 				ConverterProcessResultList result = getBean(FileProcessor.class).processFile(getUserId(), f, fu.getInputStream());
+				room.getSidebar().updateFiles(target);
 				if (result.hasError()) {
 					error(result.getLogMessage());
 				} else {
+					if (toWb.getModelObject()) {
+						room.sendFileToWb(f);
+					}
 					close(target, null);
 				}
 			} catch (Exception e) {