[OPENMEETINGS-1030] more work of files section: files drop

git-svn-id: https://svn.apache.org/repos/asf/openmeetings/application/trunk@1753586 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
index 7d55d0d..8dab317 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
@@ -123,7 +123,9 @@
 
 	@Override
 	public void resultReceived(IPendingServiceCall arg0) {
-		// TODO Auto-generated method stub
+		if (log.isTraceEnabled()) {
+			log.trace("resultReceived:: {}", arg0);
+		}
 	}
 
 	@Override
@@ -1367,12 +1369,22 @@
 		String fuid = UUID.randomUUID().toString();
 		Client client = sessionManager.getClientByPublicSIDAnyServer(uid).getRcl();
 		
+		String type = "n/a";
+		switch (fi.getType()) {
+			case Image:
+				type = "image";
+				break;
+			case Presentation:
+				type = "swf";
+				break;
+			default:
+		}
 		sendToWhiteboard(client, Arrays.asList(
 				"whiteboard"
 				, new Date()
 				, "draw"
 				, Arrays.asList(
-					"swf" // 0
+					type // 0
 					, url // urlname
 					, "--dummy--" // baseurl
 					, fi.getHash() // fileName //3
@@ -1661,8 +1673,7 @@
 							if (filter(conn)) {
 								continue;
 							}
-							Object[] msg = newMessage instanceof Object[] ? (Object[])newMessage : new Object[] { newMessage };
-							((IServiceCapableConnection) conn).invoke(remoteMethodName, msg, ScopeApplicationAdapter.this);
+							((IServiceCapableConnection) conn).invoke(remoteMethodName, new Object[] { newMessage }, ScopeApplicationAdapter.this);
 							count++;
 						}
 					}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index ae0e823..ae0bedf 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -55,7 +55,7 @@
 import org.apache.openmeetings.web.pages.SwfPage;
 import org.apache.openmeetings.web.pages.auth.SignInPage;
 import org.apache.openmeetings.web.pages.install.InstallWizardPage;
-import org.apache.openmeetings.web.room.RoomSwfResourceReference;
+import org.apache.openmeetings.web.room.RoomResourceReference;
 import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
@@ -150,7 +150,7 @@
 		mountResource("/recordings/mp4/${id}", new Mp4RecordingResourceReference());
 		mountResource("/recordings/ogg/${id}", new OggRecordingResourceReference());
 		mountResource("/recordings/jpg/${id}", new JpgRecordingResourceReference()); //should be in sync with VideoPlayer
-		mountResource("/room/swf/${id}", new RoomSwfResourceReference());
+		mountResource("/room/file/${id}", new RoomResourceReference());
 		mountResource("/profile/${id}", new ProfileImageResourceReference());
 	}
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java
index 8dcf2d1..903d241 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomFileResourceReference.java
@@ -31,7 +31,7 @@
 	}
 
 	@Override
-	protected String getMimeType() {
+	protected String getMimeType(FileExplorerItem r) {
 		return "application/octet-stream";
 	}
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java
index 7eb0e02..113c98a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPdfResourceReference.java
@@ -30,7 +30,7 @@
 	}
 
 	@Override
-	protected String getMimeType() {
+	protected String getMimeType(FileExplorerItem r) {
 		return "application/pdf";
 	}
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
index 880ae36..70deed7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
@@ -33,14 +33,35 @@
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 
-public abstract class RoomResourceReference extends FileItemResourceReference<FileExplorerItem> {
+public class RoomResourceReference extends FileItemResourceReference<FileExplorerItem> {
 	private static final long serialVersionUID = 1L;
+	public static final String DEFAULT_NAME = "wb-room-file";
+
+	public RoomResourceReference() {
+		super(DEFAULT_NAME);
+	}
 
 	public RoomResourceReference(String name) {
 		super(name);
 	}
 
 	@Override
+	protected String getMimeType(FileExplorerItem r) {
+		String mime = null;
+		switch (r.getType()) {
+			case Image:
+				mime = "image/jpeg";
+				break;
+			case Presentation:
+				mime = "application/x-shockwave-flash";
+				break;
+			default:
+				throw new RuntimeException("Not supported");
+		}
+		return mime;
+	}
+	
+	@Override
 	protected FileExplorerItem getFileItem(Attributes attributes) {
 		PageParameters params = attributes.getParameters();
 		StringValue _id = params.get("id");
@@ -53,14 +74,38 @@
 		}
 		WebSession ws = WebSession.get();
 		if (id != null && ws.isSignedIn() && !Strings.isEmpty(uid) && getOnlineClient(uid) != null) {
-			//TODO ADDITIONALLY CHECK Rights !! and room !!
+			//FIXME TODO ADDITIONALLY CHECK Rights !! and room !!
 			return getBean(FileExplorerItemDao.class).get(id);
 		}
 		return null;
 	}
 
 	protected File getFile(FileExplorerItem r, String ext) {
-		File d = new File(OmFileHelper.getUploadFilesDir(), r.getHash());
-		return new File(d, String.format("%s.%s", r.getHash(), ext));
+		File result = null;
+		switch (r.getType()) {
+			case Image: {
+				result = new File(OmFileHelper.getUploadFilesDir(), String.format("%s.%s", r.getHash(), ext == null ? "jpg" : ext));
+			}
+				break;
+			case Presentation: {
+				File d = new File(OmFileHelper.getUploadFilesDir(), r.getHash());
+				result = new File(d, String.format("%s.%s", r.getHash(), ext == null ? "swf" : ext));
+			}
+				break;
+			default:
+				throw new RuntimeException("Not supported");
+		}
+		return result;
+	}
+
+	@Override
+	protected File getFile(FileExplorerItem r) {
+		return getFile(r, null);
+	}
+	
+	@Override
+	protected String getFileName(FileExplorerItem r) {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomSwfResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomSwfResourceReference.java
deleted file mode 100644
index dd631ec..0000000
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomSwfResourceReference.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.room;
-
-import java.io.File;
-
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
-
-public class RoomSwfResourceReference extends RoomResourceReference {
-	private static final long serialVersionUID = 1L;
-
-	public RoomSwfResourceReference() {
-		super("swf-room-file");
-	}
-
-	@Override
-	protected String getMimeType() {
-		return "application/x-shockwave-flash";
-	}
-
-	@Override
-	protected String getFileName(FileExplorerItem r) {
-		return r.getName();
-	}
-
-	@Override
-	protected File getFile(FileExplorerItem r) {
-		return getFile(r, "swf");
-	}
-}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
index 39ab2b7..7566d01 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
@@ -264,8 +264,8 @@
 		boolean notExternalUser = u.getType() != User.Type.external && u.getType() != User.Type.contact;
 		exitMenuItem.setEnabled(notExternalUser);//TODO check this
 		filesMenu.setEnabled(room.getSidebar().isShowFiles());
-		actionsMenu.setEnabled(!r.isHidden(RoomElement.ActionMenu) && r.isAllowUserQuestions());
 		boolean moder = room.getClient().hasRight(Room.Right.moderator);
+		actionsMenu.setEnabled((moder &&!r.isHidden(RoomElement.ActionMenu)) || (!moder && r.isAllowUserQuestions()));
 		inviteMenuItem.setEnabled(notExternalUser && moder);
 		//TODO add check "sharing started"
 		boolean shareVisible = room.screenShareAllowed();
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
index 67ba4d0..d397ff9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
@@ -46,6 +46,13 @@
 	}
 
 	@Override
+	public String getMimeType(Recording r) {
+		return getMimeType();
+	}
+	
+	public abstract String getMimeType();
+	
+	@Override
 	protected Recording getFileItem(Attributes attributes) {
 		PageParameters params = attributes.getParameters();
 		StringValue _id = params.get("id");
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
index 439179b..ad3ab9f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
@@ -46,15 +46,16 @@
 		return new FileSystemResource() {
 			private static final long serialVersionUID = 1L;
 			private File file;
+			private T r;
 			
 			@Override
 			protected String getMimeType() throws IOException {
-				return FileItemResourceReference.this.getMimeType();
+				return FileItemResourceReference.this.getMimeType(r);
 			}
 			
 			@Override
 			protected ResourceResponse newResourceResponse(Attributes attributes) {
-				T r = getFileItem(attributes);
+				r = getFileItem(attributes);
 				if (r != null) {
 					file = getFile(r);
 					ResourceResponse rr = createResourceResponse(file.toPath());
@@ -70,7 +71,7 @@
 		};
 	}
 	
-	protected abstract String getMimeType();
+	protected abstract String getMimeType(T r);
 	protected abstract String getFileName(T r);
 	protected abstract File getFile(T r);
 	protected abstract T getFileItem(Attributes attributes);
diff --git a/openmeetings-web/src/main/webapp/css/room.css b/openmeetings-web/src/main/webapp/css/room.css
index efdef4d..72172d4 100644
--- a/openmeetings-web/src/main/webapp/css/room.css
+++ b/openmeetings-web/src/main/webapp/css/room.css
@@ -34,8 +34,12 @@
 .ui-icon.status-mod {
 	background-image: url(images/status-mod.png);
 }
-.top.room.menu.exit {
-	padding-left: 30px;
+.room.menu .ui-menu .ui-menu-item {
+	padding-left: 5px;
+	padding-right: 0;
+}
+.room.menu .top.room.menu.exit {
+	padding-left: 0;
 }
 .room.menu.right {
 	position: absolute;