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/20 02:52:45 UTC

svn commit: r1756981 [1/2] - in /openmeetings/application: branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/ branches/3.1.x/open...

Author: solomax
Date: Sat Aug 20 02:52:45 2016
New Revision: 1756981

URL: http://svn.apache.org/viewvc?rev=1756981&view=rev
Log:
[OPENMEETINGS-1138] tree/file releated fixed merged back to 3.1.x

Added:
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
      - copied unchanged from r1756975, openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
      - copied unchanged from r1756975, openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/AviRecordingResourceReference.java
      - copied, changed from r1756980, openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/FlvRecordingResourceReference.java
      - copied, changed from r1756980, openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/JpgRecordingResourceReference.java
      - copied, changed from r1756980, openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/Mp4RecordingResourceReference.java
      - copied, changed from r1756980, openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/OggRecordingResourceReference.java
      - copied, changed from r1756980, openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
      - copied, changed from r1756980, openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
      - copied unchanged from r1756975, openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FileItemResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.css
      - copied unchanged from r1756975, openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.css
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.js
      - copied unchanged from r1756975, openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.js
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.min.css
      - copied unchanged from r1756975, openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.min.css
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.min.js
      - copied unchanged from r1756975, openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/fileinput.min.js
Removed:
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileUtils.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/bootstrap-fileupload.css
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/bootstrap-fileupload.js
Modified:
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryChartLoader.java
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryWmlLoader.java
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
    openmeetings/application/branches/3.1.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/BootstrapFileUploadBehavior.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/css/activities.css
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/css/room.css
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/css/theme.css
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
    openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/library/TestFileParser.java
    openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/theme.css

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java Sat Aug 20 02:52:45 2016
@@ -19,13 +19,12 @@
 package org.apache.openmeetings.core.converter;
 
 import static org.apache.openmeetings.core.data.record.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
-import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getRecording;
 import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsSubDir;
-import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -340,7 +339,7 @@ public abstract class BaseConverter {
 	
 	public void convertToMp4(Recording r, List<ConverterProcessResult> returnLog) throws IOException {
 		//TODO add faststart, move filepaths to helpers
-		if (!isRecordingExists(r.getHash())) {
+		if (!r.exists()) {
 			return;
 		}
 		File file = getRecording(r.getHash());

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java Sat Aug 20 02:52:45 2016
@@ -18,7 +18,6 @@
  */
 package org.apache.openmeetings.core.data.file;
 
-import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getUploadFilesDir;
 import static org.apache.openmeetings.util.OmFileHelper.getUploadTempFilesDir;
 import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
@@ -26,8 +25,8 @@ import static org.apache.openmeetings.ut
 
 import java.io.File;
 import java.io.InputStream;
-import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 import org.apache.commons.transaction.util.FileHelper;
 import org.apache.openmeetings.core.converter.FlvExplorerConverter;
@@ -38,7 +37,6 @@ import org.apache.openmeetings.db.dao.fi
 import org.apache.openmeetings.db.entity.file.FileExplorerItem;
 import org.apache.openmeetings.db.entity.file.FileItem.Type;
 import org.apache.openmeetings.util.StoredFile;
-import org.apache.openmeetings.util.crypt.MD5;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.apache.openmeetings.util.process.ConverterProcessResultList;
 import org.red5.logging.Red5LoggerFactory;
@@ -60,20 +58,23 @@ public class FileProcessor {
 	@Autowired
 	private GeneratePDF generatePDF;
 
+	public static String getExt(FileExplorerItem f) {
+		int dotidx = f.getName().lastIndexOf('.');
+		return dotidx < 0 ? "" : f.getName().substring(dotidx + 1).toLowerCase();
+	}
+	
 	//FIXME TODO this method need to be refactored to throw exceptions
 	public ConverterProcessResultList processFile(Long userId, FileExplorerItem f, InputStream is) throws Exception {
 		ConverterProcessResultList returnError = new ConverterProcessResultList();
 		
-		int dotidx = f.getName().lastIndexOf('.');
-
 		// Generate a random string to prevent any problems with
 		// foreign characters and duplicates
-		String newName = MD5.checksum("FILE_" + new Date().getTime());
+		String hash = UUID.randomUUID().toString();
 
-		String extDot = f.getName().substring(dotidx, f.getName().length()).toLowerCase();
-		String ext = extDot.substring(1);
+		String ext = getExt(f);
+		String extDot = String.format(".%s", ext);
 		log.debug("file extension: " + ext);
-		StoredFile storedFile = new StoredFile(newName, ext); 
+		StoredFile storedFile = new StoredFile(hash, ext); 
 
 		// Check variable to see if this file is a presentation
 		// check if this is a a file that can be converted by
@@ -94,22 +95,18 @@ public class FileProcessor {
 			return returnError;
 		}
 
-		File completeName = new File(isAsIs ? getUploadFilesDir() : getUploadTempFilesDir(), newName + extDot);
+		File completeName = new File(isAsIs ? getUploadFilesDir() : getUploadTempFilesDir(), hash + extDot);
 		log.debug("writing file to: " + completeName);
 		FileHelper.copy(is, completeName);
 		is.close();
 
-		String hash = newName + extDot;
 		if (isImage) {
-			hash = newName + ".jpg";
 			f.setType(Type.Image);
 		} else if (isVideo) {
-			hash = newName + FLV_EXTENSION;
 			f.setType(Type.Video);
 		} else if (isChart) {
 			f.setType(Type.PollChart);
 		} else if (isPdf || canBeConverted) {
-			hash = newName;
 			f.setType(Type.Presentation);
 		}
 		f.setHash(hash);
@@ -120,16 +117,16 @@ public class FileProcessor {
 		log.debug("canBeConverted: " + canBeConverted);
 		if (canBeConverted) {
 			// convert to pdf, thumbs, swf and xml-description
-			returnError = generatePDF.convertPDF(newName, "files", true, completeName);
+			returnError = generatePDF.convertPDF(hash, "files", true, completeName);
 		} else if (isPdf) {
 			// convert to thumbs, swf and xml-description
-			returnError = generatePDF.convertPDF(newName, "files", false, completeName);
+			returnError = generatePDF.convertPDF(hash, "files", false, completeName);
 		} else if (isChart) {
 			log.debug("uploaded chart file");
 		} else if (isImage && !isAsIs) {
 			// convert it to JPG
 			log.debug("##### convert it to JPG: ");
-			returnError = generateImage.convertImage(newName, extDot, "files");
+			returnError = generateImage.convertImage(hash, extDot, "files");
 		} else if (isAsIs) {
 			ConverterProcessResult processThumb = generateThumbs.generateThumb(thumbImagePrefix, completeName, 50);
 			returnError.addItem("processThumb", processThumb);

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryChartLoader.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryChartLoader.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryChartLoader.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryChartLoader.java Sat Aug 20 02:52:45 2016
@@ -35,31 +35,31 @@ import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.io.xml.XppDriver;
 
 public class LibraryChartLoader {
-	private static final Logger log = Red5LoggerFactory.getLogger(LibraryWmlLoader.class, webAppRootKey);
+	private static final Logger log = Red5LoggerFactory.getLogger(LibraryChartLoader.class, webAppRootKey);
 
-    private static final String fileExt = ".xchart";
+	private static final String fileExt = ".xchart";
 
-    private static LibraryChartLoader instance;
+	private static LibraryChartLoader instance;
 
-    private LibraryChartLoader() {
-    }
+	private LibraryChartLoader() {
+	}
 
-    public static synchronized LibraryChartLoader getInstance() {
-        if (instance == null) {
-            instance = new LibraryChartLoader();
-        }
-        return instance;
-    }
+	public static synchronized LibraryChartLoader getInstance() {
+		if (instance == null) {
+			instance = new LibraryChartLoader();
+		}
+		return instance;
+	}
 
-    @SuppressWarnings("rawtypes")
+	@SuppressWarnings("rawtypes")
 	public ArrayList loadChart(File dir, String fileName) {
-        try {
-            File file = new File(dir, fileName + fileExt);
+		try {
+			File file = new File(dir, fileName + fileExt);
 
-            log.error("filepathComplete: " + file);
+			log.error("filepathComplete: " + file);
 
-            XStream xStream = new XStream(new XppDriver());
-            xStream.setMode(XStream.NO_REFERENCES);
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
 
 			try (InputStream is = new FileInputStream(file);
 					BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)))
@@ -67,11 +67,11 @@ public class LibraryChartLoader {
 				ArrayList lMapList = (ArrayList) xStream.fromXML(reader);
 				return lMapList;
 			}
-        } catch (Exception err) {
-            log.error("Unexpected error while loading chart", err);
-        }
+		} catch (Exception err) {
+			log.error("Unexpected error while loading chart", err);
+		}
 
-        return null;
-    }
+		return null;
+	}
 
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryWmlLoader.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryWmlLoader.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryWmlLoader.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/documents/LibraryWmlLoader.java Sat Aug 20 02:52:45 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.documents;
 
+import static org.apache.openmeetings.util.OmFileHelper.WML_EXTENSION;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.BufferedReader;
@@ -27,11 +28,9 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
+import java.util.List;
 
 import org.apache.openmeetings.util.OmFileHelper;
-import org.dom4j.Element;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
@@ -40,14 +39,12 @@ import com.thoughtworks.xstream.io.xml.X
 
 public class LibraryWmlLoader {
 	private static final Logger log = Red5LoggerFactory.getLogger(LibraryWmlLoader.class, webAppRootKey);
-	private static final String fileExt = ".wml";
 	
-	@SuppressWarnings({ "rawtypes" })
-	public ArrayList loadWmlFile(String fileName){
+	public static List<?> loadWmlFile(String fileName){
 		try {
 			String name = fileName;
-			if (!name.endsWith(fileExt)) {
-				name += fileExt;
+			if (!name.endsWith(WML_EXTENSION)) {
+				name += WML_EXTENSION;
 			}
 			File file = new File(OmFileHelper.getUploadWmlDir(), name);
 			log.debug("filepathComplete: " + file);
@@ -58,7 +55,7 @@ public class LibraryWmlLoader {
 			try (InputStream is = new FileInputStream(file);
 					BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)))
 			{
-				ArrayList lMapList = (ArrayList) xStream.fromXML(reader);
+				List<?> lMapList = (List<?>) xStream.fromXML(reader);
 				
 				return lMapList;
 			}
@@ -66,185 +63,6 @@ public class LibraryWmlLoader {
 			log.error("loadWmlFile",err);
 		}
 		
-		return null;
+		return new ArrayList<>();
 	}
-	
-	/**
-	 * @deprecated
-	 * @param paintElement
-	 * @param subMap
-	 */
-	@SuppressWarnings({ "unused", "rawtypes" })
-	private static void createListObjectPaintByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
-		try {
-			
-			LinkedHashMap<Integer,LinkedHashMap> pointMap = new LinkedHashMap<Integer,LinkedHashMap>();
-			Element pointElements = paintElement.element("points");
-			Integer k = 0;
-			
-			for ( Iterator i = pointElements.elementIterator( "point" ); i.hasNext(); ) {
-				Element pointElement = (Element) i.next();
-				LinkedHashMap<Integer,Object> singlePoint = new LinkedHashMap<Integer,Object>();
-				singlePoint.put(0, pointElement.getName());
-				singlePoint.put(1, Integer.valueOf(pointElement.attribute("val1").getText()));
-				singlePoint.put(2, Integer.valueOf(pointElement.attribute("val2").getText()));
-				singlePoint.put(3, Integer.valueOf(pointElement.attribute("val3").getText()));
-				singlePoint.put(4, Integer.valueOf(pointElement.attribute("val4").getText()));
-				pointMap.put(k, singlePoint);
-				log.debug("createListObjectPaintByNode"+singlePoint);
-				k++;
-			}
-			subMap.put(1, pointMap);
-
-			subMap.put(2, paintElement.element("fillstyle").getText());
-			subMap.put(3, Integer.valueOf(paintElement.element("linewidth").getText()));
-			subMap.put(4, Integer.valueOf(paintElement.element("strokestyle").getText()));
-			subMap.put(5, Integer.valueOf(paintElement.element("counter").getText()));
-			subMap.put(6, Float.valueOf(paintElement.element("x").getText()));
-			subMap.put(7, Float.valueOf(paintElement.element("y").getText()));
-			subMap.put(8, Float.valueOf(paintElement.element("width").getText()));
-			subMap.put(9, Float.valueOf(paintElement.element("height").getText()));
-			subMap.put(10, paintElement.element("layername").getText());		
-			
-		} catch (Exception err) {
-			log.error("createListObjectPaintByNode",err);
-		}
-	}
-	
-	/**
-	 * @deprecated
-	 * @param paintElement
-	 * @param subMap
-	 */
-	public void createListObjectLetterByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
-		try {
-
-			subMap.put(1, paintElement.element("textforfield").getText());
-			subMap.put(2, Integer.valueOf(paintElement.element("fgcolor").getText()));
-			subMap.put(3, Integer.valueOf(paintElement.element("fontsize").getText()));
-			subMap.put(4, paintElement.element("fontstyle").getText());
-			subMap.put(5, Integer.valueOf(paintElement.element("counter").getText()));
-			subMap.put(6, Float.valueOf(paintElement.element("x").getText()));
-			subMap.put(7, Float.valueOf(paintElement.element("y").getText()));			
-			subMap.put(8, Float.valueOf(paintElement.element("width").getText()));		
-			subMap.put(9, Float.valueOf(paintElement.element("height").getText()));		
-			subMap.put(10, paintElement.element("layername").getText());
-			
-		} catch (Exception err) {
-			log.error("createListObjectLetterByNode",err);
-		}
-	}	
-	
-	/**
-	 * @deprecated
-	 * @param paintElement
-	 * @param subMap
-	 */
-	public void createListObjectImageByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
-		try {
-
-			subMap.put(1, paintElement.element("urlname").getText());
-			subMap.put(2, paintElement.element("baseurl").getText());
-			subMap.put(3, paintElement.element("filename").getText());
-			subMap.put(4, paintElement.element("modulename").getText());
-			subMap.put(5, paintElement.element("parentpath").getText());
-			subMap.put(6, paintElement.element("room").getText());
-			subMap.put(7, paintElement.element("domain").getText());
-			subMap.put(8, Integer.valueOf(paintElement.element("counter").getText()));
-			subMap.put(9, Float.valueOf(paintElement.element("x").getText()));
-			subMap.put(10, Float.valueOf(paintElement.element("y").getText()));
-			subMap.put(11, Float.valueOf(paintElement.element("width").getText()));
-			subMap.put(12, Float.valueOf(paintElement.element("height").getText()));
-			subMap.put(13, paintElement.element("layername").getText());		
-			
-		} catch (Exception err) {
-			log.error("createListObjectImageByNode",err);
-		}
-	}	
-	
-	/**
-	 * @deprecated
-	 * @param paintElement
-	 * @param subMap
-	 */
-	public void createListObjectObjecByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
-		try {	
-			
-			subMap.put(1, paintElement.element("fillstyle").getText());
-			subMap.put(2, paintElement.element("linewidth").getText());
-			subMap.put(3, Integer.valueOf(paintElement.element("strokestyle").getText()));
-			subMap.put(4, Float.valueOf(paintElement.element("startx").getText()));
-			subMap.put(5, Float.valueOf(paintElement.element("starty").getText()));
-			subMap.put(6, Float.valueOf(paintElement.element("endx").getText()));
-			subMap.put(7, Float.valueOf(paintElement.element("endy").getText()));
-			subMap.put(8, Integer.valueOf(paintElement.element("counter").getText()));
-			subMap.put(9, Float.valueOf(paintElement.element("x").getText()));
-			subMap.put(10, Float.valueOf(paintElement.element("y").getText()));
-			subMap.put(11, Float.valueOf(paintElement.element("width").getText()));
-			subMap.put(12, Float.valueOf(paintElement.element("height").getText()));
-			subMap.put(13, paintElement.element("layername").getText());
-			
-		} catch (Exception err) {
-			log.error("createListObjectObjecByNode",err);
-		}
-	}		
-	
-	/**
-	 * @deprecated
-	 * @param paintElement
-	 * @param subMap
-	 */
-	public void createListObjectRectAndEllipseByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
-		try {	
-			
-			subMap.put(1, Integer.valueOf(paintElement.element("stroke").getText()));
-			subMap.put(2, paintElement.element("line").getText());
-			subMap.put(3, Integer.valueOf(paintElement.element("counter").getText()));
-			subMap.put(4, Float.valueOf(paintElement.element("x").getText()));		
-			subMap.put(5, Float.valueOf(paintElement.element("y").getText()));
-			subMap.put(6, Float.valueOf(paintElement.element("width").getText()));
-			subMap.put(7, Float.valueOf(paintElement.element("height").getText()));
-			subMap.put(8, paintElement.element("layername").getText());
-
-		} catch (Exception err) {
-			log.error("createListObjectObjecByNode",err);
-		}
-	}
-	
-	/**
-	 * @deprecated
-	 * @param paintElement
-	 * @param subMap
-	 */
-	public void createListObjectSWFByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
-		try {
-
-			subMap.put(1, paintElement.element("urlname").getText());
-			subMap.put(2, paintElement.element("baseurl").getText());
-			subMap.put(3, paintElement.element("filename").getText());
-			subMap.put(4, paintElement.element("modulename").getText());
-			subMap.put(5, paintElement.element("parentpath").getText());
-			subMap.put(6, paintElement.element("room").getText());
-			subMap.put(7, paintElement.element("domain").getText());
-			subMap.put(8, Integer.valueOf(paintElement.element("slideNumber").getText()));
-			subMap.put(9, Float.valueOf(paintElement.element("innerx").getText()));
-			subMap.put(10, Float.valueOf(paintElement.element("innery").getText()));
-			subMap.put(11, Float.valueOf(paintElement.element("innerwidth").getText()));
-			subMap.put(12, Float.valueOf(paintElement.element("innerheight").getText()));
-			subMap.put(13, Integer.valueOf(paintElement.element("zoomlevel").getText()));
-			subMap.put(14, Float.valueOf(paintElement.element("initwidth").getText()));
-			subMap.put(15, Float.valueOf(paintElement.element("initheight").getText()));
-			subMap.put(16, Integer.valueOf(paintElement.element("currentzoom").getText()));
-			subMap.put(17, Integer.valueOf(paintElement.element("counter").getText()));
-			subMap.put(18, Float.valueOf(paintElement.element("x").getText()));
-			subMap.put(19, Float.valueOf(paintElement.element("y").getText()));
-			subMap.put(20, Float.valueOf(paintElement.element("width").getText()));
-			subMap.put(21, Float.valueOf(paintElement.element("height").getText()));
-			subMap.put(22, paintElement.element("layername").getText());		
-			
-		} catch (Exception err) {
-			log.error("createListObjectImageByNode",err);
-		}
-	}		
-	
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java Sat Aug 20 02:52:45 2016
@@ -24,8 +24,8 @@ import static org.apache.openmeetings.ut
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.transaction.util.FileHelper;
@@ -44,7 +44,6 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.util.crypt.MD5;
 import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.api.IConnection;
 import org.red5.server.api.Red5;
@@ -71,8 +70,6 @@ public class ConferenceLibrary implement
 	@Autowired
 	private FileExplorerItemDao fileDao;
 	@Autowired
-	private LibraryWmlLoader libraryWmlLoader;
-	@Autowired
 	private WhiteboardManager whiteboardManagement;
 
 	public LibraryPresentation getPresentationPreviewFileExplorer(String SID, String parentFolder) {
@@ -105,12 +102,12 @@ public class ConferenceLibrary implement
 	 * Save an Object to the library and returns the file-explorer Id
 	 * 
 	 * @param SID
-	 * @param room_id
+	 * @param roomId
 	 * @param fileName
 	 * @param tObjectRef
 	 * @return - file-explorer Id in case of success, -1 otherwise
 	 */
-	public Long saveAsObject(String SID, Long room_id, String fileName, Object tObjectRef) {
+	public Long saveAsObject(String SID, Long roomId, String fileName, Object tObjectRef) {
 		try {
 			Long users_id = sessionDao.check(SID);
 			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
@@ -125,18 +122,10 @@ public class ConferenceLibrary implement
 
 				log.debug("saveAsObject" + tObject.size());
 
-				String localFileName = MD5.checksum(new Date().toString()) + ".wml";
-
-				LibraryDocumentConverter.writeToLocalFolder(localFileName, tObject);
+				FileExplorerItem file = fileDao.add(fileName, null, null, roomId, users_id, Type.WmlFile, "", "");
+				LibraryDocumentConverter.writeToLocalFolder(file.getHash(), tObject);
 
-				// String wmlPath = current_dir + File.separatorChar+fileName
-				// +".xml";
-				// OwnerID == null
-				Long fileExplorerId = fileDao.add(fileName, "", null,
-						null, room_id, users_id, Type.WmlFile, localFileName, // WML localFileName
-						"", "");
-
-				return fileExplorerId;
+				return file.getId();
 			}
 		} catch (Exception err) {
 			log.error("[saveAsObject] ", err);
@@ -145,7 +134,6 @@ public class ConferenceLibrary implement
 	}
 
 	/**
-	 * 
 	 * Loads a Object from the library into the whiteboard of all participant of
 	 * the current room
 	 * 
@@ -167,13 +155,13 @@ public class ConferenceLibrary implement
 					return;
 				}
 
-				FileExplorerItem fileExplorerItem = fileDao.get(fileId);
-				if (fileExplorerItem == null) {
+				FileExplorerItem fi = fileDao.get(fileId);
+				if (fi == null) {
 					log.warn("[loadWmlObject] Unable to load Wml file by Id {}", fileId);
 					return;
 				}
 
-				ArrayList roomItems = libraryWmlLoader.loadWmlFile(fileExplorerItem.getWmlFilePath());
+				List<?> roomItems = LibraryWmlLoader.loadWmlFile(fi.getHash());
 
 				Map whiteboardObjClear = new HashMap();
 				whiteboardObjClear.put(2, "clear");

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java Sat Aug 20 02:52:45 2016
@@ -18,10 +18,14 @@
  */
 package org.apache.openmeetings.db.dao.file;
 
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.io.File;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
@@ -30,6 +34,7 @@ import javax.persistence.TypedQuery;
 
 import org.apache.openmeetings.db.entity.file.FileExplorerItem;
 import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.util.OmFileHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.transaction.annotation.Transactional;
@@ -44,13 +49,13 @@ public class FileExplorerItemDao {
 	@PersistenceContext
 	private EntityManager em;
 
-	public Long add(String fileName, String fileHash, Long parentId, Long ownerId, Long roomId, Long insertedBy,
-			Type type, String wmlFilePath, String externalId, String externalType) {
+	public FileExplorerItem add(String fileName, Long parentId, Long ownerId, Long roomId, Long insertedBy,
+			Type type, String externalId, String externalType) {
 		log.debug(".add(): adding file " + fileName + " roomID: " + roomId);
 		try {
 			FileExplorerItem fileItem = new FileExplorerItem();
 			fileItem.setName(fileName);
-			fileItem.setHash(fileHash);
+			fileItem.setHash(UUID.randomUUID().toString());
 			fileItem.setDeleted(false);
 			fileItem.setParentId(parentId);
 			fileItem.setOwnerId(ownerId);
@@ -59,15 +64,13 @@ public class FileExplorerItemDao {
 			fileItem.setInsertedBy(insertedBy);
 			fileItem.setType(type);
 			fileItem.setUpdated(new Date());
-			fileItem.setWmlFilePath(wmlFilePath);
 			fileItem.setExternalId(externalId);
 			fileItem.setExternalType(externalType);
 
 			fileItem = em.merge(fileItem);
-			Long fileItemId = fileItem.getId();
 
-			log.debug(".add(): file " + fileName + " added as " + fileItemId);
-			return fileItemId;
+			log.debug(".add(): file " + fileName + " added as " + fileItem.getId());
+			return fileItem;
 		} catch (Exception ex2) {
 			log.error(".add(): ", ex2);
 		}
@@ -253,4 +256,58 @@ public class FileExplorerItemDao {
 		return update(f);
 	}
 
+	public long getOwnSize(Long userId) {
+		return getSize(getByOwner(userId));
+	}
+
+	public long getRoomSize(Long roomId) {
+		return getSize(getByRoom(roomId));
+	}
+
+	public long getSize(List<FileExplorerItem> list) {
+		long size = 0;
+		for (FileExplorerItem f : list) {
+			log.debug("FileExplorerItem fList " + f.getName());
+			size += getSize(f);
+		}
+		return size;
+	}
+	
+	public long getSize(FileExplorerItem f) {
+		long size = 0;
+		try {
+			if (f.exists()) {
+				File base = OmFileHelper.getUploadFilesDir();
+				if (Type.Image == f.getType()) {
+					size += f.getFile().length();
+					File thumbFile = new File(base, String.format("%s%s.%s", thumbImagePrefix, f.getHash(), EXTENSION_JPG));
+					if (thumbFile.exists()) {
+						size += thumbFile.length();
+					}
+				}
+				if (Type.Presentation == f.getType()) {
+					File tFolder = new File(base, f.getHash());
+
+					if (tFolder.exists()) {
+						size += OmFileHelper.getSize(tFolder);
+					}
+				}
+				if (Type.Video == f.getType()) {
+					size += f.getFile().length();
+					File thumb = f.getFile(EXTENSION_JPG);
+					if (thumb.exists()) {
+						size += thumb.length();
+					}
+				}
+			}
+			if (Type.Folder == f.getType()) {
+				for (FileExplorerItem child : getByParent(f.getId())) {
+					size += getSize(child);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getSize] ", err);
+		}
+		return size;
+	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java Sat Aug 20 02:52:45 2016
@@ -18,12 +18,11 @@
  */
 package org.apache.openmeetings.db.dao.record;
 
-import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
-import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
-import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
-import static org.apache.openmeetings.util.OmFileHelper.getOggRecording;
-import static org.apache.openmeetings.util.OmFileHelper.getRecording;
-import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_AVI;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_OGG;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.util.Date;
@@ -265,20 +264,20 @@ public class RecordingDao {
 	private long getSize(Recording r) {
 		long size = 0;
 
-		if (isRecordingExists(r.getHash())) {
-			size += getRecording(r.getHash()).length();
+		if (r.exists(EXTENSION_FLV)) {
+			size += r.getFile(EXTENSION_FLV).length();
 		}
-		if (isRecordingExists(r.getAlternateDownload())) {
-			size += getRecording(r.getAlternateDownload()).length();
+		if (r.exists(EXTENSION_AVI)) {
+			size += r.getFile(EXTENSION_AVI).length();
 		}
-		if (isRecordingExists(r.getPreviewImage())) {
-			size += getRecording(r.getPreviewImage()).length();
+		if (r.exists(EXTENSION_JPG)) {
+			size += r.getFile(EXTENSION_JPG).length();
 		}
-		if (isRecordingExists(r.getHash() + MP4_EXTENSION)) {
-			size += getMp4Recording(r.getHash()).length();
+		if (r.exists(EXTENSION_MP4)) {
+			size += r.getFile(EXTENSION_MP4).length();
 		}
-		if (isRecordingExists(r.getHash() + OGG_EXTENSION)) {
-			size += getOggRecording(r.getHash()).length();
+		if (r.exists(EXTENSION_OGG)) {
+			size += r.getFile(EXTENSION_OGG).length();
 		}
 		for (Recording rec : getByParent(r.getId())) {
 			size += getSize(rec);

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java Sat Aug 20 02:52:45 2016
@@ -18,6 +18,14 @@
  */
 package org.apache.openmeetings.db.entity.file;
 
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_SWF;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_WML;
+import static org.apache.openmeetings.util.OmFileHelper.WB_VIDEO_FILE_PREFIX;
+
+import java.io.File;
+
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
@@ -27,6 +35,7 @@ import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
+import org.apache.openmeetings.util.OmFileHelper;
 import org.simpleframework.xml.Element;
 import org.simpleframework.xml.Root;
 
@@ -49,6 +58,7 @@ import org.simpleframework.xml.Root;
 @Root
 public class FileExplorerItem extends FileItem {
 	private static final long serialVersionUID = 1L;
+
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name = "id")
@@ -59,10 +69,6 @@ public class FileExplorerItem extends Fi
 	@Element(data = true, required = false)
 	private Long size;
 
-	@Column(name = "wml_file_path")
-	@Element(data = true, required = false)
-	private String wmlFilePath;
-
 	@Column(name = "external_id")
 	private String externalId;
 
@@ -87,14 +93,6 @@ public class FileExplorerItem extends Fi
 		this.size = fileSize;
 	}
 
-	public String getWmlFilePath() {
-		return wmlFilePath;
-	}
-
-	public void setWmlFilePath(String wmlFilePath) {
-		this.wmlFilePath = wmlFilePath;
-	}
-
 	public String getExternalId() {
 		return externalId;
 	}
@@ -111,4 +109,28 @@ public class FileExplorerItem extends Fi
 		this.externalType = externalType;
 	}
 
+	@Override
+	protected File internalGetFile(String ext) {
+		File f = null;
+		switch (getType()) {
+			case WmlFile:
+				f = new File(OmFileHelper.getUploadWmlDir(), String.format("%s.%s", getHash(), ext == null ? EXTENSION_WML : ext));
+				break;
+			case Image:
+				f = new File(OmFileHelper.getUploadFilesDir(), String.format("%s.%s", getHash(), ext == null ? EXTENSION_JPG : ext));
+				break;
+			case Video:
+				f = new File(OmFileHelper.getStreamsHibernateDir(), String.format("%s%s.%s", WB_VIDEO_FILE_PREFIX, getId(), ext == null ? EXTENSION_MP4 : ext));
+				break;
+			case Presentation: {
+					File d = new File(OmFileHelper.getUploadFilesDir(), getHash());
+					f = new File(d, String.format("%s.%s", getHash(), ext == null ? EXTENSION_SWF : ext));
+				}
+				break;
+			case PollChart:
+			case Folder:
+			default:
+		}
+		return f;
+	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java Sat Aug 20 02:52:45 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.db.entity.file;
 
+import java.io.File;
 import java.util.Date;
 
 import javax.persistence.Column;
@@ -197,4 +198,78 @@ public abstract class FileItem implement
 	public void setType(Type type) {
 		this.type = type;
 	}
+
+	public File getFile() {
+		return getFile(null);
+	}
+
+	protected abstract File internalGetFile(String ext);
+	
+	public final File getFile(String ext) {
+		return internalGetFile(ext);
+	}
+
+	public final boolean exists() {
+		return exists(null);
+	}
+
+	public final boolean exists(String ext) {
+		if (getId() != null && !isDeleted()) {
+			File f = getFile(ext);
+			return f != null && f.exists() && f.isFile();
+		}
+		return false;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((hash == null) ? 0 : hash.hashCode());
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		result = prime * result + ((ownerId == null) ? 0 : ownerId.hashCode());
+		result = prime * result + ((parentId == null) ? 0 : parentId.hashCode());
+		result = prime * result + ((roomId == null) ? 0 : roomId.hashCode());
+		result = prime * result + ((type == null) ? 0 : type.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		FileItem other = (FileItem) obj;
+		if (hash == null) {
+			if (other.hash != null)
+				return false;
+		} else if (!hash.equals(other.hash))
+			return false;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		if (ownerId == null) {
+			if (other.ownerId != null)
+				return false;
+		} else if (!ownerId.equals(other.ownerId))
+			return false;
+		if (parentId == null) {
+			if (other.parentId != null)
+				return false;
+		} else if (!parentId.equals(other.parentId))
+			return false;
+		if (roomId == null) {
+			if (other.roomId != null)
+				return false;
+		} else if (!roomId.equals(other.roomId))
+			return false;
+		if (type != other.type)
+			return false;
+		return true;
+	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java Sat Aug 20 02:52:45 2016
@@ -18,6 +18,14 @@
  */
 package org.apache.openmeetings.db.entity.record;
 
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_AVI;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_OGG;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
+
+import java.io.File;
 import java.util.Date;
 import java.util.List;
 
@@ -104,6 +112,7 @@ public class Recording extends FileItem
 		, PROCESSED
 		, ERROR
 	}
+
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name = "id")
@@ -289,4 +298,21 @@ public class Recording extends FileItem
 	public void setStatus(Status status) {
 		this.status = status;
 	}
+
+	@Override
+	public File internalGetFile(String ext) {
+		File f = null;
+		if (getId() != null && !isDeleted()) {
+			if (ext == null || EXTENSION_MP4.equals(ext)) {
+				f = getRecording(String.format("%s%s.%s.%s", recordingFileName, id, EXTENSION_FLV, EXTENSION_MP4));
+			} else if (EXTENSION_FLV.equals(ext)) {
+				f = getRecording(String.format("%s%s.%s", recordingFileName, id, EXTENSION_FLV));
+			} else if (EXTENSION_AVI.equals(ext)) {
+				f = getRecording(String.format("%s%s.%s", recordingFileName, id, EXTENSION_AVI));
+			} else if (EXTENSION_OGG.equals(ext)) {
+				f = getRecording(String.format("%s%s.%s.%s", recordingFileName, id, EXTENSION_FLV, EXTENSION_OGG));
+			}
+		}
+		return f;
+	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java Sat Aug 20 02:52:45 2016
@@ -199,16 +199,6 @@ public class OmFileHelper {
 		return new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
 	}
 	
-	public static boolean isRecordingExists(String name) {
-		try {
-			File f = new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
-			return f.exists() && f.isFile();
-		} catch (Exception e) {
-			//no-op
-		}
-		return false;
-	}
-	
 	public static File getMp4Recording(String name) {
 		return getRecording(name + MP4_EXTENSION);
 	}

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html Sat Aug 20 02:52:45 2016
@@ -25,33 +25,33 @@
 			<fieldset class="ui-widget-content">
 				<legend class="ui-widget-header"><wicket:message key="1066" /></legend>
 				<div class="formelement">
-				    <div class="info-text"><wicket:message key="1065" /></div>
-	            </div>
-	            <div class="formelement">
-                   <label><wicket:message key="1537" /></label> <input type="checkbox" wicket:id="includeFilesInBackup" />
-	            </div>
-	            <div class="formelement">
-	               <span wicket:id="progress"></span>
-	               <div wicket:id="dprogress"></div>
-	            </div>
-	            <div class="formelement">
-		            <!-- Perform Download -->
+					<div class="info-text"><wicket:message key="1065" /></div>
+				</div>
+				<div class="formelement">
+					<label><wicket:message key="1537" /></label> <input type="checkbox" wicket:id="includeFilesInBackup" />
+				</div>
+				<div class="formelement">
+					<span wicket:id="progress"></span>
+					<div wicket:id="dprogress"></div>
+				</div>
+				<div class="formelement">
+					<!-- Perform Download -->
 					<div wicket:id="download" class="btn"><wicket:message key="1066"/></div>
 					<!-- Perform Upload -->
-					<div class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0; display: inline-block;">
+					<div class="fileinput fileinput-new" data-provides="fileinput" style="margin: 0; display: inline-block;">
 						<span class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span 
 							class="ui-button-text"><wicket:message key="1536"/></span><input class="uploadFileField" wicket:id="fileInput" type="file"/></span>
 					</div>
-	            </div>
-	            <div class="formelement">
-		            <!-- Max upload size -->
-		            <wicket:message key="1491" /> <span wicket:id="MaxUploadSize" /><span>MB</span>
-	            </div>
-	            <div class="formelement">
-		            <!-- Backup CLI import information -->
-	               <div class="info-text" wicket:id="cmdLineDesc"></div>
-	            </div>
-	        </fieldset>
+				</div>
+				<div class="formelement">
+					<!-- Max upload size -->
+					<wicket:message key="1491" /> <span wicket:id="MaxUploadSize" /><span>MB</span>
+				</div>
+				<div class="formelement">
+					<!-- Backup CLI import information -->
+					<div class="info-text" wicket:id="cmdLineDesc"></div>
+				</div>
+			</fieldset>
 		</form>
 	</wicket:panel>
 </html>

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java Sat Aug 20 02:52:45 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.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java Sat Aug 20 02:52:45 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.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java Sat Aug 20 02:52:45 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.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Sat Aug 20 02:52:45 2016
@@ -63,11 +63,11 @@ import org.apache.openmeetings.web.user.
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.admin.AdminWidgetDescriptor;
-import org.apache.openmeetings.web.util.AviRecordingResourceReference;
-import org.apache.openmeetings.web.util.FlvRecordingResourceReference;
-import org.apache.openmeetings.web.util.JpgRecordingResourceReference;
-import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
-import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.AviRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.FlvRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.JpgRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.Mp4RecordingResourceReference;
+import org.apache.openmeetings.web.user.record.OggRecordingResourceReference;
 import org.apache.openmeetings.web.util.ProfileImageResourceReference;
 import org.apache.openmeetings.web.util.UserDashboardPersister;
 import org.apache.wicket.Localizer;

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/AddFolderDialog.java Sat Aug 20 02:52:45 2016
@@ -70,13 +70,13 @@ public abstract class AddFolderDialog ex
 				});
 			}
 		};
-		add(form);
+		add(form.setOutputMarkupId(true));
 	}
 
 	@Override
 	protected void onOpen(IPartialPageRequestHandler handler) {
 		super.onOpen(handler);
-		
+		handler.add(form);
 		setModelObject(name);
 		getFeedbackMessages().clear();
 	}

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java Sat Aug 20 02:52:45 2016
@@ -39,7 +39,7 @@ public abstract class BasePanel extends
 		setOutputMarkupId(true);
 	}
 
-	protected MainPage getMainPage() {
+	public MainPage getMainPage() {
 		return (MainPage)super.getPage();
 	}
 	

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java Sat Aug 20 02:52:45 2016
@@ -23,7 +23,6 @@ import org.apache.wicket.ajax.AjaxReques
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.markup.html.border.Border;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
@@ -36,21 +35,15 @@ public abstract class ConfirmableAjaxBor
 	private static final long serialVersionUID = 1L;
 	private final Form<?> form = new Form<>("form");
 	private final Form<?> userForm;
-	private final IModel<String> title;
-	private final IModel<String> message;
+	private final AbstractFormDialog<?> dialog;
 
 	public ConfirmableAjaxBorder(String id, String title, String message) {
-		this(id, Model.of(title), Model.of(message), null);
+		this(id, title, message, null);
 	}
 	
 	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {
-		this(id, Model.of(title), Model.of(message), form);
-	}
-	
-	public ConfirmableAjaxBorder(String id, IModel<String> title, IModel<String> message, Form<?> form) {
-		super(id, message);
-		this.title = title;
-		this.message = message;
+		super(id, Model.of(message));
+		dialog = newFormDialog("dialog", title, message);
 		this.userForm = form;
 		setOutputMarkupId(true);
 	}
@@ -58,7 +51,6 @@ public abstract class ConfirmableAjaxBor
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
-		final AbstractFormDialog<?> dialog = newFormDialog("dialog", title, message);
 		add(new AjaxEventBehavior("click") {
 			private static final long serialVersionUID = 1L;
 
@@ -84,6 +76,10 @@ public abstract class ConfirmableAjaxBor
 	protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
 	}
 	
+	protected void onEvent(AjaxRequestTarget target) {
+		dialog.open(target);
+	}
+	
 	/**
 	 * Triggered when the form is submitted, but the validation failed
 	 *
@@ -101,8 +97,6 @@ public abstract class ConfirmableAjaxBor
 	 */
 	protected abstract void onSubmit(AjaxRequestTarget target, Form<?> form);
 
-	// Factories //
-
 	/**
 	 * Create the dialog instance<br/>
 	 * <b>Warning:</b> to be overridden with care!
@@ -112,7 +106,7 @@ public abstract class ConfirmableAjaxBor
 	 * @param message the message to be displayed
 	 * @return the dialog instance
 	 */
-	protected AbstractFormDialog<?> newFormDialog(String id, IModel<String> title, IModel<String> message) {
+	protected AbstractFormDialog<?> newFormDialog(String id, String title, String message) {
 		return new MessageFormDialog(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN) {
 			private static final long serialVersionUID = 1L;
 
@@ -138,11 +132,4 @@ public abstract class ConfirmableAjaxBor
 			}
 		};
 	}
-	
-	@Override
-	protected void onDetach() {
-		super.onDetach();
-		title.detach();
-		message.detach();
-	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html Sat Aug 20 02:52:45 2016
@@ -21,7 +21,7 @@
 <html xmlns:wicket="http://wicket.apache.org">
 	<wicket:extend>
 		<form wicket:id="form"><div 
-			class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0;"><span 
+			class="fileinput fileinput-new" data-provides="fileinput" style="margin: 0;"><span 
 			class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" 
 			style="width: 120px;"><span class="ui-button-text"><wicket:message key="379"/></span><input 
 			type="file" accept="image/*" wicket:id="image"/></span></div><span wicket:id="progress">[progressbar]</span></form>

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java Sat Aug 20 02:52:45 2016
@@ -24,15 +24,12 @@ import com.googlecode.wicket.jquery.ui.w
 
 public class MenuItem extends com.googlecode.wicket.jquery.ui.widget.menu.MenuItem {
 	private static final long serialVersionUID = 1L;
-	protected String desc;
-	private String cssClass;
-	
-	public MenuItem(String title) {
-		super(title);
-	}
+	private String desc;
+	private boolean top;
 	
 	public MenuItem(String title, List<IMenuItem> items) {
 		super(title, items);
+		setTop(true);
 	}
 	
 	public MenuItem(String title, String desc) {
@@ -48,11 +45,11 @@ public class MenuItem extends com.google
 		this.desc = desc;
 	}
 
-	public String getCssClass() {
-		return cssClass;
+	public boolean isTop() {
+		return top;
 	}
 
-	public void setCssClass(String cssClass) {
-		this.cssClass = cssClass;
+	public void setTop(boolean top) {
+		this.top = top;
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java Sat Aug 20 02:52:45 2016
@@ -52,14 +52,12 @@ public class MenuPanel extends BasePanel
 			protected void addMenuItem(ListItem<IMenuItem> item, IMenuItem menuItem) {
 				super.addMenuItem(item, menuItem);
 				MenuItem m = (MenuItem)menuItem;
-				if (Strings.isEmpty(m.getDesc())) {
-					item.add(AttributeAppender.append("class", "top"));
-				} else {
-					item.add(AttributeAppender.append("class", "sub"));
+				item.add(AttributeAppender.append("class", m.isTop() ? "top" : "sub"));
+				if (!Strings.isEmpty(m.getDesc())) {
 					item.add(AttributeAppender.append("title", m.getDesc()));
 				}
-				if (!Strings.isEmpty(m.getCssClass())) {
-					item.add(AttributeAppender.append("class", m.getCssClass()));
+				if (!Strings.isEmpty(m.getIcon())) {
+					item.add(AttributeAppender.append("class", m.getIcon()));
 				}
 			}
 		});

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java Sat Aug 20 02:52:45 2016
@@ -21,25 +21,17 @@ package org.apache.openmeetings.web.comm
 public class RoomMenuItem extends MenuItem {
 	private static final long serialVersionUID = 1L;
 
-	public RoomMenuItem(String name) {
-		this(name, null);
-	}
-	
 	public RoomMenuItem(String name, String desc) {
-		this(name, desc, true, null);
+		super(name, desc);
 	}
 	
-	public RoomMenuItem(String name, String desc, String cssClass) {
-		this(name, desc, true, cssClass);
+	public RoomMenuItem(String name, String desc, String icon) {
+		super(name, desc);
+		setIcon(icon);
 	}
 	
 	public RoomMenuItem(String name, String desc, boolean enabled) {
-		this(name, desc, enabled, null);
-	}
-	
-	public RoomMenuItem(String name, String desc, boolean enabled, String cssClass) {
 		super(name, desc);
-		setCssClass(cssClass);
 		setEnabled(enabled);
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java Sat Aug 20 02:52:45 2016
@@ -18,8 +18,6 @@
  */
 package org.apache.openmeetings.web.common.tree;
 
-import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
-import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
 import static org.apache.openmeetings.web.app.Application.getBean;
 
 import java.util.ArrayList;
@@ -86,7 +84,7 @@ public class ConvertingErrorsDialog exte
 		if (f.getHash() == null) {
 			message.setVisible(true);
 			message.setDefaultModelObject(Application.getString(888));
-		} else if (!isRecordingExists(f.getHash() + MP4_EXTENSION)) {
+		} else if (!f.exists()) {
 			message.setVisible(true);
 			message.setDefaultModelObject(Application.getString(1595));
 		} else {

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemPanel.java Sat Aug 20 02:52:45 2016
@@ -18,8 +18,6 @@
  */
 package org.apache.openmeetings.web.common.tree;
 
-import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
-import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
 import static org.apache.openmeetings.web.app.Application.getBean;
 
 import org.apache.openmeetings.db.dao.record.RecordingLogDao;
@@ -40,7 +38,7 @@ public class FileItemPanel extends Folde
 		if (model.getObject() instanceof Recording) {
 			Recording r = (Recording)model.getObject();
 			long errorCount = getBean(RecordingLogDao.class).countErrors(r.getId());
-			boolean visible = errorCount != 0 || (Status.RECORDING != r.getStatus() && Status.CONVERTING != r.getStatus() && !isRecordingExists(r.getHash() + MP4_EXTENSION));
+			boolean visible = errorCount != 0 || (Status.RECORDING != r.getStatus() && Status.CONVERTING != r.getStatus() && !r.exists());
 			errors.add(new AjaxEventBehavior("click") {
 				private static final long serialVersionUID = 1L;
 	

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java Sat Aug 20 02:52:45 2016
@@ -18,9 +18,6 @@
  */
 package org.apache.openmeetings.web.common.tree;
 
-import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
-import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
-
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.file.FileItem.Type;
 import org.apache.openmeetings.db.entity.record.Recording;
@@ -34,31 +31,32 @@ import org.apache.wicket.markup.repeater
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
-public class FileItemTree<T extends FileItem> extends DefaultNestedTree<T> {
+public class FileItemTree extends DefaultNestedTree<FileItem> {
 	private static final long serialVersionUID = 1L;
 	private final FileTreePanel treePanel;
-	private final IModel<T> selectedItem = Model.of((T)null);
 
-	public FileItemTree(String id, FileTreePanel treePanel, ITreeProvider<T> tp) {
+	public FileItemTree(String id, FileTreePanel treePanel, ITreeProvider<FileItem> tp) {
 		super(id, tp);
 		this.treePanel = treePanel;
 		setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
 	}
 	
 	@Override
-	protected Component newContentComponent(String id, IModel<T> node) {
-		return new Folder<T>(id, this, node) {
+	protected Component newContentComponent(String id, IModel<FileItem> node) {
+		return new Folder<FileItem>(id, this, node) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected Component newLabelComponent(String id, final IModel<T> lm) {
+			protected Component newLabelComponent(String id, final IModel<FileItem> lm) {
 				FileItem r = lm.getObject();
-				return Type.Folder == r.getType() || r.getId() < 1 ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, treePanel);
+				return Type.Folder == r.getType() || r.getId() == null ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm, treePanel);
 			}
 			
 			@Override
 			protected boolean isSelected() {
-				return getModelObject().getId().equals(treePanel.selectedFile.getObject().getId());
+				FileItem f = getModelObject(), s = treePanel.getSelected();
+				return (s.getId() == null && s.getId() == f.getId() && s.getHash().equals(f.getHash()))
+						|| (s.getId() != null && s.getId().equals(f.getId()));
 			}
 			
 			@Override
@@ -68,68 +66,62 @@ public class FileItemTree<T extends File
 			
 			@Override
 			protected void onClick(AjaxRequestTarget target) {
-				T r = getModelObject();
-				treePanel.selected.resetSelected(target);
-				selectedItem.setObject(r);
-				treePanel.selectedFile.setObject(r);
-				treePanel.selected = FileItemTree.this;
+				FileItem r = getModelObject();
+				treePanel.setSelected(r, target);
 				if (Type.Folder == r.getType()) {
 					if (getState(r) == State.COLLAPSED) {
 						super.onClick(target);
 					}
-					updateBranch(r, target);
 				} else {
 					treePanel.update(target, r);
-					updateNode(r, target);
 				}
 			}
 			
-			private String getItemStyle(T f, String def) {
+			private String getItemStyle(FileItem f, String def) {
 				String style;
-				if (f.getId() == 0) {
-					style = "my file om-icon";
-				} else if (f.getId() < 0) {
-					style = "public file om-icon";
+				if (f.getId() == null) {
+					style = f.getHash().indexOf("my") > -1 ? "my file om-icon" : "public file om-icon";
 				} else {
+					String _style, addStyle = f.exists() ? "" : "broken";
 					switch(f.getType()) {
 						case Folder:
-							style = def;
+							_style = def;
 							break;
 						case Image:
-							style = "image file om-icon";
+							_style = "image file om-icon";
 							break;
 						case PollChart:
-							style = "chart file om-icon";
+							_style = "chart file om-icon";
 							break;
 						case WmlFile:
-							style = "wml file om-icon";
+							_style = "wml file om-icon";
 							break;
+						case Video:
 						case Recording:
 						{
-							Recording r = (Recording)f;
-							if (isRecordingExists(r.getHash() + MP4_EXTENSION)) {
-								style = "recording om-icon";
-							} else if (Status.RECORDING == r.getStatus() || Status.CONVERTING == r.getStatus()) {
-								style = "processing-recording om-icon";
-							} else {
-								style = "broken-recording om-icon";
+							_style = "recording om-icon";
+							if (f instanceof Recording) {
+								Status st = ((Recording)f).getStatus();
+								if (Status.RECORDING == st || Status.CONVERTING == st) {
+									addStyle = "processing";
+								}
 							}
 						}
 							break;
 						case Presentation:
-							style = "doc file om-icon";
+							_style = "doc file om-icon";
 							break;
-						case Video:
 						default:
-							style = "recording om-icon";
+							_style = "file om-icon";
 							break;
 					}
+					style = String.format("%s %s", addStyle, _style);
 				}
 				return style;
 			}
 			
 			@Override
-			protected String getOtherStyleClass(T r) {
+			protected String getOtherStyleClass(FileItem r) {
 				return getItemStyle(r, super.getOtherStyleClass(r));
 			}
 			
@@ -149,27 +141,9 @@ public class FileItemTree<T extends File
 			}
 			
 			@Override
-			protected IModel<String> newLabelModel(IModel<T> model) {
+			protected IModel<String> newLabelModel(IModel<FileItem> model) {
 				return Model.of(model.getObject().getName());
 			}
 		};
 	}
-
-	private void resetSelected(AjaxRequestTarget target) {
-		T _prev = selectedItem.getObject();
-		if (_prev != null) {
-			if (Type.Folder == _prev.getType()) {
-				updateBranch(_prev, target);
-			} else {
-				updateNode(_prev, target);
-			}
-			selectedItem.setObject(null);
-		}
-	}
-	
-	@Override
-	protected void onDetach() {
-		selectedItem.detach();
-		super.onDetach();
-	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html?rev=1756981&r1=1756980&r2=1756981&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html Sat Aug 20 02:52:45 2016
@@ -24,15 +24,15 @@
 		function treeRevert(dropped) {
 			$('#tree-anchor').get(0).scrollIntoView();
 			this.parent().parent().get(0).scrollIntoView();
-			return !dropped;
+			return !dropped || (!!dropped && !!dropped.context && $(dropped.context).hasClass('wb', 'room'));
 		}
 	</script>
-	<div class="file tree">
-		<div class="icons clear trash-toolbar" wicket:id="trash-toolbar">
+	<div class="file tree item drop area">
+		<div class="icons clear trash-toolbar" wicket:id="trash-toolbar" wicket:message="title:705">
+			<span wicket:id="upload" class="add om-icon align-left clickable" wicket:message="title:702"></span>
 			<span wicket:id="create" class="folder-create om-icon align-left clickable" wicket:message="title:703"></span>
 			<span wicket:id="refresh" class="refresh om-icon align-left clickable" wicket:message="title:704"></span>
 			<span wicket:id="trash" class="trash om-icon align-right clickable"></span>
-			<span style="padding-left: 20px;" wicket:message="title:705"><wicket:message key="1224"/></span>
 			<div class="clear"></div>
 		</div>
 		<div wicket:id="tree-container" class="trees">
@@ -55,4 +55,4 @@
 		<div wicket:id="errors"></div>
 	</div>
 </wicket:panel>
-</html>
\ No newline at end of file
+</html>