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) {


Reply via email to