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/04/06 11:39:48 UTC

svn commit: r1737955 - 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/openmeetin...

Author: solomax
Date: Wed Apr  6 09:39:48 2016
New Revision: 1737955

URL: http://svn.apache.org/viewvc?rev=1737955&view=rev
Log:
[OPENMEETINGS-853] CleanupHelper seems to work as expected

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/converter/FlvExplorerConverter.java
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
    openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.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/data/record/listener/async/BaseStreamWriter.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-install/src/main/java/org/apache/openmeetings/cli/Admin.java
    openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java
    openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
    openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.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/util/OmUrlFragment.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
    openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
    openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java
    openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
    openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java
    openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java

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=1737955&r1=1737954&r2=1737955&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 Wed Apr  6 09:39:48 2016
@@ -21,6 +21,7 @@ package org.apache.openmeetings.core.con
 import static org.apache.openmeetings.core.data.record.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
 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;
@@ -245,7 +246,7 @@ public abstract class BaseConverter {
 				
 				metaData = waitForTheStream(metaId);
 	
-				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + ".flv");
+				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + FLV_EXTENSION);
 	
 				File outputWav = new File(streamFolder, metaData.getStreamName() + "_WAVE.wav");
 	

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
@@ -77,7 +78,7 @@ public class FlvExplorerConverter extend
 		List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
 		try {
 			String name = "UPLOADFLV_" + fileExplorerItem.getId();
-			File outputFullFlv = new File(getStreamsHibernateDir(), name + ".flv");
+			File outputFullFlv = new File(getStreamsHibernateDir(), name + FLV_EXTENSION);
 
 			fileExplorerItem.setType(Type.Video);
 

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java Wed Apr  6 09:39:48 2016
@@ -18,8 +18,10 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -191,7 +193,7 @@ public class InterviewConverter extends
 							returnLog.add(ProcessHelper.executeScript("blankFlvPod_" + pod , argsPodB));
 							
 							//ffmpeg -y -i out.flv -i rec_15_stream_4_2014_07_15_20_41_03.flv -filter_complex '[0:0]setsar=1/1[sarfix];[1:0]scale=320:260,setsar=1/1[scale];[sarfix] [scale] concat=n=2:v=1:a=0 [v]' -map '[v]'  output1.flv
-							File podF = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + ".flv");
+							File podF = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + FLV_EXTENSION);
 							String podP = podF.getCanonicalPath();
 							String[] argsPod = new String[] { getPathToFFMPEG(), "-y"//
 									, "-i", podPB //
@@ -252,7 +254,7 @@ public class InterviewConverter extends
 			args.add("-qmax"); args.add("1");
 			args.add("-qmin"); args.add("1");
 			args.add("-y");
-			String hashFileFullNameFlv = "flvRecording_" + recording.getId() + ".flv";
+			String hashFileFullNameFlv = recordingFileName + recording.getId() + FLV_EXTENSION;
 			String outputFullFlv = new File(streamFolderGeneral, hashFileFullNameFlv).getCanonicalPath();
 			args.add(outputFullFlv);
 			// TODO additional flag to 'quiet' output should be added
@@ -267,7 +269,7 @@ public class InterviewConverter extends
 			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
 			// 320x240 movie.jpg
 
-			String hashFileFullNameJPEG = "flvRecording_" + recording.getId() + ".jpg";
+			String hashFileFullNameJPEG = recordingFileName + recording.getId() + ".jpg";
 			String outPutJpeg = new File(streamFolderGeneral, hashFileFullNameJPEG).getCanonicalPath();
 			deleteFileIfExists(outPutJpeg);
 
@@ -284,7 +286,7 @@ public class InterviewConverter extends
 
 			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_previewFLV));
 
-			String alternateDownloadName = "flvRecording_" + recording.getId() + ".avi";
+			String alternateDownloadName = recordingFileName + recording.getId() + ".avi";
 			String alternateDownloadFullName = new File(streamFolderGeneral, alternateDownloadName).getCanonicalPath();
 			deleteFileIfExists(alternateDownloadFullName);
 

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java Wed Apr  6 09:39:48 2016
@@ -18,7 +18,9 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -52,18 +54,17 @@ public class RecordingConverter extends
 
 	@Override
 	public void startConversion(Long recordingId) {
-		Recording recording = null;
+		Recording recording = recordingDao.get(recordingId);
+		if (recording == null) {
+			log.warn("Conversion is NOT started. Recording with ID {} is not found", recordingId);
+			return;
+		}
 		try {
 			if (isUseOldStyleFfmpegMap()) {
 				FFMPEG_MAP_PARAM = ".";
 			}
 
-			String finalNamePrefix = "flvRecording_" + recordingId;
-			recording = recordingDao.get(recordingId);
-			if (recording == null) {
-				log.warn("Conversion is NOT started. Recording with ID {} is not found", recordingId);
-				return;
-			}
+			String finalNamePrefix = recordingFileName + recordingId;
 			log.debug("recording " + recording.getId());
 
 			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
@@ -112,9 +113,9 @@ public class RecordingConverter extends
 
 			// Merge Audio with Video / Calculate resulting FLV
 
-			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv").getCanonicalPath();
+			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + FLV_EXTENSION).getCanonicalPath();
 
-			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + ".flv");
+			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + FLV_EXTENSION);
 
 			// ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
 			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav

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=1737955&r1=1737954&r2=1737955&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 Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 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;
@@ -103,7 +104,7 @@ public class FileProcessor {
 			hash = newName + ".jpg";
 			f.setType(Type.Image);
 		} else if (isVideo) {
-			hash = newName + ".flv";
+			hash = newName + FLV_EXTENSION;
 			f.setType(Type.Video);
 		} else if (isChart) {
 			f.setType(Type.PollChart);

Modified: openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.data.record.listener.async;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -97,7 +98,7 @@ public abstract class BaseStreamWriter i
 	 *             I/O exception
 	 */
 	private void init() throws IOException {
-		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), streamName + ".flv");
+		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), streamName + FLV_EXTENSION);
 
 		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
 				StreamableFileFactory.class);

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=1737955&r1=1737954&r2=1737955&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 Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.remote;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -253,11 +254,11 @@ public class ConferenceLibrary implement
 				Long room_id = currentClient.getRoomId();
 
 				if (room_id != null) {
-					File outputFullFlvFile = new File(OmFileHelper.getStreamsHibernateDir(), "UPLOADFLV_" + flvFileExplorerId + ".flv");
+					File outputFullFlvFile = new File(OmFileHelper.getStreamsHibernateDir(), "UPLOADFLV_" + flvFileExplorerId + FLV_EXTENSION);
 
 					File targetFolder = OmFileHelper.getStreamsSubDir(room_id);
 
-					File targetFullFlvFile = new File(targetFolder, "UPLOADFLV_" + flvFileExplorerId + ".flv");
+					File targetFullFlvFile = new File(targetFolder, "UPLOADFLV_" + flvFileExplorerId + FLV_EXTENSION);
 					if (outputFullFlvFile.exists() && !targetFullFlvFile.exists()) {
 						FileHelper.copy(outputFullFlvFile, targetFullFlvFile);
 					}

Modified: openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java Wed Apr  6 09:39:48 2016
@@ -57,8 +57,6 @@ import org.apache.openmeetings.db.dao.ba
 import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
-import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
 import org.apache.openmeetings.installation.InstallationDocumentHandler;
@@ -320,6 +318,9 @@ public class Admin {
 					}
 					StringBuilder report = new StringBuilder();
 					CleanupUnit temp = CleanupHelper.getTempUnit();
+					if (cleanup) {
+						temp.cleanup();
+					}
 					report.append("Temporary files allocates: ").append(temp.getHumanTotal()).append("\n");
 					{ //UPLOAD
 						long sectionSize = OmFileHelper.getSize(OmFileHelper.getUploadDir());
@@ -327,97 +328,55 @@ public class Admin {
 						//Profiles
 						ClassPathXmlApplicationContext ctx = getApplicationContext(ctxName);
 						UserDao udao = ctx.getBean(UserDao.class);
-						CleanupEntityUnit profileUnit = CleanupHelper.getProfileUnit(udao);
-						long restSize = sectionSize - profileUnit.getSizeTotal();
-						report.append("\t\tprofiles: ").append(profileUnit.getHumanTotal()).append("\n");
-						report.append("\t\t\tinvalid: ").append(profileUnit.getHumanInvalid()).append("\n");
-						report.append("\t\t\tdeleted: ").append(profileUnit.getHumanDeleted()).append("\n");
-						report.append("\t\t\tmissing count: ").append(profileUnit.getMissing()).append("\n");
+						CleanupEntityUnit profile = CleanupHelper.getProfileUnit(udao);
+						long restSize = sectionSize - profile.getSizeTotal();
+						report.append("\t\tprofiles: ").append(profile.getHumanTotal()).append("\n");
+						report.append("\t\t\tinvalid: ").append(profile.getHumanInvalid()).append("\n");
+						report.append("\t\t\tdeleted: ").append(profile.getHumanDeleted()).append("\n");
+						report.append("\t\t\tmissing count: ").append(profile.getMissing()).append("\n");
 						if (cleanup) {
-							profileUnit.cleanup();
+							profile.cleanup();
 						}
-						long size = OmFileHelper.getSize(OmFileHelper.getUploadImportDir());
-						restSize -= size;
-						report.append("\t\timport: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						size = OmFileHelper.getSize(OmFileHelper.getUploadBackupDir());
-						restSize -= size;
-						report.append("\t\tbackup: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						//Files
-						File files = OmFileHelper.getUploadFilesDir();
-						size = OmFileHelper.getSize(files);
-						restSize -= size;
-						FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
-						long invalid = 0;
-						long deleted = 0;
-						for (File f : files.listFiles()) {
-							long fSize = OmFileHelper.getSize(f);
-							FileExplorerItem item = fileDao.getByHash(f.getName());
-							if (item == null) {
-								if (cleanup) {
-									FileHelper.removeRec(f);
-								} else {
-									invalid += fSize;
-								}
-							} else if (item.isDeleted()) {
-								if (cleanup) {
-									FileHelper.removeRec(f);
-								} else {
-									deleted += fSize;
-								}
-							}
+						CleanupUnit imp = CleanupHelper.getImportUnit();
+						restSize -= imp.getSizeTotal();
+						report.append("\t\timport: ").append(OmFileHelper.getHumanSize(imp.getSizeTotal())).append("\n");
+						if (cleanup) {
+							imp.cleanup();
 						}
-						int missing = 0;
-						for (FileExplorerItem item : fileDao.get()) {
-							if (!item.isDeleted() && item.getHash() != null && !new File(files, item.getHash()).exists()) {
-								missing++;
-							}
+						CleanupUnit back = CleanupHelper.getBackupUnit();
+						restSize -= back.getSizeTotal();
+						report.append("\t\tbackup: ").append(OmFileHelper.getHumanSize(back.getSizeTotal())).append("\n");
+						if (cleanup) {
+							back.cleanup();
 						}
-						report.append("\t\tfiles: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
-						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(deleted)).append("\n");
-						report.append("\t\t\tmissing count: ").append(missing).append("\n");
+						//Files
+						FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
+						CleanupEntityUnit files = CleanupHelper.getFileUnit(fileDao);
+						restSize -= files.getSizeTotal();
+						report.append("\t\tfiles: ").append(files.getHumanTotal()).append("\n");
+						report.append("\t\t\tinvalid: ").append(files.getHumanInvalid()).append("\n");
+						report.append("\t\t\tdeleted: ").append(files.getHumanDeleted()).append("\n");
+						report.append("\t\t\tmissing count: ").append(files.getMissing()).append("\n");
 						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+						if (cleanup) {
+							files.cleanup();
+						}
 					}
 					{ //STREAMS
-						File streamsDir = OmFileHelper.getStreamsDir();
+						RecordingDao recordDao = getApplicationContext(ctxName).getBean(RecordingDao.class);
+						CleanupEntityUnit rec = CleanupHelper.getRecUnit(recordDao);
 						File hibernateDir = OmFileHelper.getStreamsHibernateDir();
-						if (cleanup) {
-							String hiberPath = hibernateDir.getCanonicalPath();
-							for (File f : streamsDir.listFiles()) {
-								if (!f.getCanonicalPath().equals(hiberPath)) {
-									FileHelper.removeRec(f);
-								}
-							}
-						}
-						long sectionSize = OmFileHelper.getSize(streamsDir);
-						report.append("Recordings allocates: ").append(OmFileHelper.getHumanSize(sectionSize)).append("\n");
+						report.append("Recordings allocates: ").append(rec.getHumanTotal()).append("\n");
 						long size = OmFileHelper.getSize(hibernateDir);
-						long restSize = sectionSize - size;
-						RecordingDao recordDao = getApplicationContext(ctxName).getBean(RecordingDao.class);
-						long[] params = {0, 0}; // [0] == deleted [1] == missing
-						for (Recording rec : recordDao.get()) {
-							checkRecordingFile(hibernateDir, rec.getHash(), rec.isDeleted(), params, cleanup);
-							checkRecordingFile(hibernateDir, rec.getAlternateDownload(), rec.isDeleted(), params, cleanup);
-							checkRecordingFile(hibernateDir, rec.getPreviewImage(), rec.isDeleted(), params, cleanup);
-						}
-						long invalid = 0;
-						for (File f : hibernateDir.listFiles()) {
-							if (f.isFile() && f.getName().endsWith(".flv")) {
-								Recording rec = recordDao.getByHash(f.getName());
-								if (rec == null) {
-									cleanUpFile(invalid, cleanup, f);
-									String name = f.getName().substring(0, f.getName().length() - 5);
-									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".avi"));
-									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".jpg"));
-									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".flv.meta"));
-								}
-							}
-						}
+						long restSize = rec.getSizeTotal() - size;
 						report.append("\t\tfinal: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
-						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(params[0])).append("\n");
-						report.append("\t\t\tmissing count: ").append(params[1]).append("\n");
+						report.append("\t\t\tinvalid: ").append(rec.getHumanInvalid()).append("\n");
+						report.append("\t\t\tdeleted: ").append(rec.getHumanDeleted()).append("\n");
+						report.append("\t\t\tmissing count: ").append(rec.getMissing()).append("\n");
 						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+						if (cleanup) {
+							rec.cleanup();
+						}
 					}
 					System.out.println(report);
 				} catch (Exception e) {
@@ -446,32 +405,6 @@ public class Admin {
 		System.exit(0);
 	}
 	
-	private static long cleanUpFile(long invalid, boolean cleanup, File f) {
-		if (f.exists()) {
-			if (cleanup) {
-				FileHelper.removeRec(f);
-			} else {
-				invalid += f.length();
-			}
-		}
-		return invalid;
-	}
-	private static void checkRecordingFile(File hibernateDir, String name, boolean deleted, long[] params, boolean cleanup) {
-		File flv = name != null ? new File(hibernateDir, name) : null;
-		if (flv != null) {
-			if (flv.exists() && flv.isFile()) {
-				if (deleted) {
-					params[0] += flv.length();
-					if (cleanup) {
-						FileHelper.removeRec(flv);
-					}
-				}
-			} else {
-				params[1]++;
-			}
-		}
-	}
-	
 	private void checkAdminDetails(String ctxName) throws Exception {
 		cfg.username = cmdl.getOptionValue("user");
 		cfg.email = cmdl.getOptionValue("email");

Modified: openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java Wed Apr  6 09:39:48 2016
@@ -19,12 +19,15 @@
 package org.apache.openmeetings.cli;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.transaction.util.FileHelper;
 import org.apache.openmeetings.util.OmFileHelper;
 
 public abstract class CleanupEntityUnit extends CleanupUnit {
+	private static final long serialVersionUID = 1L;
 	protected List<File> invalid = new ArrayList<>();
 	protected List<File> deleted = new ArrayList<>();
 	private long sizeInvalid = 0;
@@ -42,6 +45,16 @@ public abstract class CleanupEntityUnit
 		}
 	}
 	
+	@Override
+	public void cleanup() throws IOException {
+		for (File i : invalid) {
+			FileHelper.removeRec(i);
+		}
+		for (File i : deleted) {
+			FileHelper.removeRec(i);
+		}
+	}
+	
 	public abstract void fill();
 
 	public long getSizeInvalid() {

Modified: openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java Wed Apr  6 09:39:48 2016
@@ -18,37 +18,36 @@
  */
 package org.apache.openmeetings.cli;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
+
 import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.List;
 
 import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
 
 public class CleanupHelper {
+	private static final Logger log = Red5LoggerFactory.getLogger(CleanupHelper.class);
+	
 	public static CleanupUnit getTempUnit() {
-		return new CleanupUnit(OmFileHelper.getUploadTempDir()) {
-			@Override
-			public void cleanup() {
-				for (File f : getParent().listFiles()) {
-					FileHelper.removeRec(f);
-				}
-			}
-		};
+		return new CleanupUnit(OmFileHelper.getUploadTempDir());
 	}
 
 	public static CleanupEntityUnit getProfileUnit(final UserDao udao) {
 		return new CleanupEntityUnit(OmFileHelper.getUploadProfilesDir()) {
-			@Override
-			public void cleanup() {
-				for (File i : invalid) {
-					FileHelper.removeRec(i);
-				}
-				for (File i : deleted) {
-					FileHelper.removeRec(i);
-				}
-			}
-			
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public void fill() {
 				for (File profile : getParent().listFiles()) {
@@ -67,6 +66,99 @@ public class CleanupHelper {
 				}
 			}
 		};
+	}
+
+	public static CleanupUnit getImportUnit() {
+		return new CleanupUnit(OmFileHelper.getUploadImportDir());
+	}
+
+	public static CleanupUnit getBackupUnit() {
+		return new CleanupUnit(OmFileHelper.getUploadBackupDir());
+	}
+
+	public static CleanupEntityUnit getFileUnit(final FileExplorerItemDao fileDao) {
+		return new CleanupEntityUnit(OmFileHelper.getUploadFilesDir()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void fill() {
+				for (File f : getParent().listFiles()) {
+					FileExplorerItem item = fileDao.getByHash(f.getName()); // TODO probable extension should be stripped
+					if (item == null) {
+						invalid.add(f);
+					} else if (item.isDeleted()) {
+						deleted.add(f);
+					}
+				}
+				//TODO WML_DIR should also be checked
+				for (FileExplorerItem item : fileDao.get()) {
+					if (!item.isDeleted() && item.getHash() != null && !new File(getParent(), item.getHash()).exists()) {
+						missing++;
+					}
+				}
+			}
+		};
+	}
+
+	public static CleanupEntityUnit getRecUnit(final RecordingDao recordDao) {
+		return new CleanupEntityUnit(OmFileHelper.getStreamsDir()) {
+			private static final long serialVersionUID = 1L;
+			private File hibernateDir;
+
+			@Override
+			public void cleanup() throws IOException {
+				String hiberPath = hibernateDir.getCanonicalPath();
+				for (File f : getParent().listFiles()) {
+					if (!f.getCanonicalPath().equals(hiberPath)) {
+						FileHelper.removeRec(f);
+					}
+				}
+				super.cleanup();
+			}
+			
+			@Override
+			public void fill() {
+				hibernateDir = OmFileHelper.getStreamsHibernateDir();
+				for (File f : hibernateDir.listFiles(new FilenameFilter() {
+					@Override
+					public boolean accept(File dir, String name) {
+						return name.startsWith(recordingFileName) && name.endsWith(FLV_EXTENSION);
+					}
+				})) {
+					if (!f.isFile()) {
+						log.warn("Recording found is not a file: " + f);
+						continue;
+					}
+					Long id = Long.valueOf(f.getName().substring(recordingFileName.length(), f.getName().length() - FLV_EXTENSION.length()));
+					Recording item = recordDao.get(id);
+					if (item == null) {
+						add(invalid, id);
+					} else if (item.isDeleted()) {
+						add(deleted, id);
+					}
+				}
+				for (Recording item : recordDao.get()) {
+					if (!item.isDeleted() && item.getHash() != null && list(item.getId()).length == 0) {
+						missing++;
+					}
+				}
+			}
+			
+			private File[] list(final Long id) {
+				return hibernateDir.listFiles(new FilenameFilter() {
+					@Override
+					public boolean accept(File dir, String name) {
+						return name.startsWith(recordingFileName + id);
+					}
+				});
+			}
+			
+			private void add(List<File> list, final Long id) {
+				for (File f : list(id)) {
+					list.add(f);
+				}
+			}
+		};
 	}
 
 	private static long getUserIdByProfile(String name) {

Modified: openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java Wed Apr  6 09:39:48 2016
@@ -19,10 +19,14 @@
 package org.apache.openmeetings.cli;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
 
+import org.apache.commons.transaction.util.FileHelper;
 import org.apache.openmeetings.util.OmFileHelper;
 
-public abstract class CleanupUnit {
+public class CleanupUnit implements Serializable {
+	private static final long serialVersionUID = 1L;
 	private final File parent;
 	private final long sizeTotal;
 	
@@ -34,7 +38,11 @@ public abstract class CleanupUnit {
 		sizeTotal = OmFileHelper.getSize(parent);
 	}
 	
-	public abstract void cleanup();
+	public void cleanup() throws IOException {
+		for (File f : getParent().listFiles()) {
+			FileHelper.removeRec(f);
+		}
+	}
 	
 	public File getParent() {
 		return parent;

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=1737955&r1=1737954&r2=1737955&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 Wed Apr  6 09:39:48 2016
@@ -66,11 +66,13 @@ public class OmFileHelper {
 	public static final String libraryFileName = "library.xml";
 	public static final String defaultProfileImageName = "profile_pic.jpg";
 	public static final String profileFileName = "profile";
+	public static final String recordingFileName = "flvRecording_";
 	public static final String profileImagePrefix = "_profile_";
 	public static final String chatImagePrefix = "_chat_";
 	public static final String bigImagePrefix = "_big_";
 	public static final String thumbImagePrefix = "_thumb_";
 	public static final String dashboardFile = "dashboard.xml";
+	public static final String FLV_EXTENSION = ".flv";
 	public static final String MP4_EXTENSION = ".mp4";
 	public static final String OGG_EXTENSION = ".ogg";
 	public static final String JPG_EXTENTION = ".jpg";
@@ -173,7 +175,7 @@ public class OmFileHelper {
 	}
 	
 	public static File getStreamsDir() {
-		return new File(OmFileHelper.OM_HOME, STREAMS_DIR);
+		return getDir(OmFileHelper.OM_HOME, STREAMS_DIR);
 	}
 	
 	public static File getStreamsHibernateDir() {
@@ -211,7 +213,7 @@ public class OmFileHelper {
 	}
 	
 	public static File getRecordingMetaData(Long roomId, String name) {
-		return new File(getStreamsSubDir(roomId), name + ".flv");
+		return new File(getStreamsSubDir(roomId), name + FLV_EXTENSION);
 	}
 	
 	public static File getLanguagesDir() {

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java Wed Apr  6 09:39:48 2016
@@ -266,12 +266,10 @@ public class OmUrlFragment implements Se
 				break;
 			case room:
 				try {
-					Long roomId = Long.parseLong(type);
-					if (roomId != null) {
-						Room r = getBean(RoomDao.class).get(roomId);
-						if (r != null) {
-							basePanel = new RoomPanel(CHILD_ID, roomId);
-						}
+					Long roomId = Long.valueOf(type);
+					Room r = getBean(RoomDao.class).get(roomId);
+					if (r != null) {
+						basePanel = new RoomPanel(CHILD_ID, roomId);
 					}
 				} catch(NumberFormatException ne) {
 					//skip it, bad roomid passed

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java Wed Apr  6 09:39:48 2016
@@ -21,6 +21,7 @@ package org.apache.openmeetings.core.con
 import static org.apache.openmeetings.core.data.record.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
 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;
@@ -245,7 +246,7 @@ public abstract class BaseConverter {
 				
 				metaData = waitForTheStream(metaId);
 	
-				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + ".flv");
+				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + FLV_EXTENSION);
 	
 				File outputWav = new File(streamFolder, metaData.getStreamName() + "_WAVE.wav");
 	

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
@@ -77,7 +78,7 @@ public class FlvExplorerConverter extend
 		List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
 		try {
 			String name = "UPLOADFLV_" + fileExplorerItem.getId();
-			File outputFullFlv = new File(getStreamsHibernateDir(), name + ".flv");
+			File outputFullFlv = new File(getStreamsHibernateDir(), name + FLV_EXTENSION);
 
 			fileExplorerItem.setType(Type.Video);
 

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java Wed Apr  6 09:39:48 2016
@@ -18,8 +18,10 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -191,7 +193,7 @@ public class InterviewConverter extends
 							returnLog.add(ProcessHelper.executeScript("blankFlvPod_" + pod , argsPodB));
 							
 							//ffmpeg -y -i out.flv -i rec_15_stream_4_2014_07_15_20_41_03.flv -filter_complex '[0:0]setsar=1/1[sarfix];[1:0]scale=320:260,setsar=1/1[scale];[sarfix] [scale] concat=n=2:v=1:a=0 [v]' -map '[v]'  output1.flv
-							File podF = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + ".flv");
+							File podF = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + FLV_EXTENSION);
 							String podP = podF.getCanonicalPath();
 							String[] argsPod = new String[] { getPathToFFMPEG(), "-y"//
 									, "-i", podPB //
@@ -252,7 +254,7 @@ public class InterviewConverter extends
 			args.add("-qmax"); args.add("1");
 			args.add("-qmin"); args.add("1");
 			args.add("-y");
-			String hashFileFullNameFlv = "flvRecording_" + recording.getId() + ".flv";
+			String hashFileFullNameFlv = recordingFileName + recording.getId() + FLV_EXTENSION;
 			String outputFullFlv = new File(streamFolderGeneral, hashFileFullNameFlv).getCanonicalPath();
 			args.add(outputFullFlv);
 			// TODO additional flag to 'quiet' output should be added
@@ -267,7 +269,7 @@ public class InterviewConverter extends
 			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
 			// 320x240 movie.jpg
 
-			String hashFileFullNameJPEG = "flvRecording_" + recording.getId() + ".jpg";
+			String hashFileFullNameJPEG = recordingFileName + recording.getId() + ".jpg";
 			String outPutJpeg = new File(streamFolderGeneral, hashFileFullNameJPEG).getCanonicalPath();
 			deleteFileIfExists(outPutJpeg);
 
@@ -284,7 +286,7 @@ public class InterviewConverter extends
 
 			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_previewFLV));
 
-			String alternateDownloadName = "flvRecording_" + recording.getId() + ".avi";
+			String alternateDownloadName = recordingFileName + recording.getId() + ".avi";
 			String alternateDownloadFullName = new File(streamFolderGeneral, alternateDownloadName).getCanonicalPath();
 			deleteFileIfExists(alternateDownloadFullName);
 

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java Wed Apr  6 09:39:48 2016
@@ -18,7 +18,9 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -52,18 +54,17 @@ public class RecordingConverter extends
 
 	@Override
 	public void startConversion(Long recordingId) {
-		Recording recording = null;
+		Recording recording = recordingDao.get(recordingId);
+		if (recording == null) {
+			log.warn("Conversion is NOT started. Recording with ID {} is not found", recordingId);
+			return;
+		}
 		try {
 			if (isUseOldStyleFfmpegMap()) {
 				FFMPEG_MAP_PARAM = ".";
 			}
 
-			String finalNamePrefix = "flvRecording_" + recordingId;
-			recording = recordingDao.get(recordingId);
-			if (recording == null) {
-				log.warn("Conversion is NOT started. Recording with ID {} is not found", recordingId);
-				return;
-			}
+			String finalNamePrefix = recordingFileName + recordingId;
 			log.debug("recording " + recording.getId());
 
 			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
@@ -112,9 +113,9 @@ public class RecordingConverter extends
 
 			// Merge Audio with Video / Calculate resulting FLV
 
-			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv").getCanonicalPath();
+			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + FLV_EXTENSION).getCanonicalPath();
 
-			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + ".flv");
+			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + FLV_EXTENSION);
 
 			// ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
 			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 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;
@@ -103,7 +104,7 @@ public class FileProcessor {
 			hash = newName + ".jpg";
 			f.setType(Type.Image);
 		} else if (isVideo) {
-			hash = newName + ".flv";
+			hash = newName + FLV_EXTENSION;
 			f.setType(Type.Video);
 		} else if (isChart) {
 			f.setType(Type.PollChart);

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.data.record.listener.async;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -97,7 +98,7 @@ public abstract class BaseStreamWriter i
 	 *             I/O exception
 	 */
 	private void init() throws IOException {
-		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), streamName + ".flv");
+		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), streamName + FLV_EXTENSION);
 
 		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
 				StreamableFileFactory.class);

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java Wed Apr  6 09:39:48 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.remote;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -253,11 +254,11 @@ public class ConferenceLibrary implement
 				Long room_id = currentClient.getRoomId();
 
 				if (room_id != null) {
-					File outputFullFlvFile = new File(OmFileHelper.getStreamsHibernateDir(), "UPLOADFLV_" + flvFileExplorerId + ".flv");
+					File outputFullFlvFile = new File(OmFileHelper.getStreamsHibernateDir(), "UPLOADFLV_" + flvFileExplorerId + FLV_EXTENSION);
 
 					File targetFolder = OmFileHelper.getStreamsSubDir(room_id);
 
-					File targetFullFlvFile = new File(targetFolder, "UPLOADFLV_" + flvFileExplorerId + ".flv");
+					File targetFullFlvFile = new File(targetFolder, "UPLOADFLV_" + flvFileExplorerId + FLV_EXTENSION);
 					if (outputFullFlvFile.exists() && !targetFullFlvFile.exists()) {
 						FileHelper.copy(outputFullFlvFile, targetFullFlvFile);
 					}

Modified: openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java (original)
+++ openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java Wed Apr  6 09:39:48 2016
@@ -57,8 +57,6 @@ import org.apache.openmeetings.db.dao.ba
 import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.file.FileExplorerItem;
-import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
 import org.apache.openmeetings.installation.InstallationDocumentHandler;
@@ -320,6 +318,9 @@ public class Admin {
 					}
 					StringBuilder report = new StringBuilder();
 					CleanupUnit temp = CleanupHelper.getTempUnit();
+					if (cleanup) {
+						temp.cleanup();
+					}
 					report.append("Temporary files allocates: ").append(temp.getHumanTotal()).append("\n");
 					{ //UPLOAD
 						long sectionSize = OmFileHelper.getSize(OmFileHelper.getUploadDir());
@@ -327,97 +328,55 @@ public class Admin {
 						//Profiles
 						ClassPathXmlApplicationContext ctx = getApplicationContext(ctxName);
 						UserDao udao = ctx.getBean(UserDao.class);
-						CleanupEntityUnit profileUnit = CleanupHelper.getProfileUnit(udao);
-						long restSize = sectionSize - profileUnit.getSizeTotal();
-						report.append("\t\tprofiles: ").append(profileUnit.getHumanTotal()).append("\n");
-						report.append("\t\t\tinvalid: ").append(profileUnit.getHumanInvalid()).append("\n");
-						report.append("\t\t\tdeleted: ").append(profileUnit.getHumanDeleted()).append("\n");
-						report.append("\t\t\tmissing count: ").append(profileUnit.getMissing()).append("\n");
+						CleanupEntityUnit profile = CleanupHelper.getProfileUnit(udao);
+						long restSize = sectionSize - profile.getSizeTotal();
+						report.append("\t\tprofiles: ").append(profile.getHumanTotal()).append("\n");
+						report.append("\t\t\tinvalid: ").append(profile.getHumanInvalid()).append("\n");
+						report.append("\t\t\tdeleted: ").append(profile.getHumanDeleted()).append("\n");
+						report.append("\t\t\tmissing count: ").append(profile.getMissing()).append("\n");
 						if (cleanup) {
-							profileUnit.cleanup();
+							profile.cleanup();
 						}
-						long size = OmFileHelper.getSize(OmFileHelper.getUploadImportDir());
-						restSize -= size;
-						report.append("\t\timport: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						size = OmFileHelper.getSize(OmFileHelper.getUploadBackupDir());
-						restSize -= size;
-						report.append("\t\tbackup: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						//Files
-						File files = OmFileHelper.getUploadFilesDir();
-						size = OmFileHelper.getSize(files);
-						restSize -= size;
-						FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
-						long invalid = 0;
-						long deleted = 0;
-						for (File f : files.listFiles()) {
-							long fSize = OmFileHelper.getSize(f);
-							FileExplorerItem item = fileDao.getByHash(f.getName());
-							if (item == null) {
-								if (cleanup) {
-									FileHelper.removeRec(f);
-								} else {
-									invalid += fSize;
-								}
-							} else if (item.isDeleted()) {
-								if (cleanup) {
-									FileHelper.removeRec(f);
-								} else {
-									deleted += fSize;
-								}
-							}
+						CleanupUnit imp = CleanupHelper.getImportUnit();
+						restSize -= imp.getSizeTotal();
+						report.append("\t\timport: ").append(OmFileHelper.getHumanSize(imp.getSizeTotal())).append("\n");
+						if (cleanup) {
+							imp.cleanup();
 						}
-						int missing = 0;
-						for (FileExplorerItem item : fileDao.get()) {
-							if (!item.isDeleted() && item.getHash() != null && !new File(files, item.getHash()).exists()) {
-								missing++;
-							}
+						CleanupUnit back = CleanupHelper.getBackupUnit();
+						restSize -= back.getSizeTotal();
+						report.append("\t\tbackup: ").append(OmFileHelper.getHumanSize(back.getSizeTotal())).append("\n");
+						if (cleanup) {
+							back.cleanup();
 						}
-						report.append("\t\tfiles: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
-						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(deleted)).append("\n");
-						report.append("\t\t\tmissing count: ").append(missing).append("\n");
+						//Files
+						FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
+						CleanupEntityUnit files = CleanupHelper.getFileUnit(fileDao);
+						restSize -= files.getSizeTotal();
+						report.append("\t\tfiles: ").append(files.getHumanTotal()).append("\n");
+						report.append("\t\t\tinvalid: ").append(files.getHumanInvalid()).append("\n");
+						report.append("\t\t\tdeleted: ").append(files.getHumanDeleted()).append("\n");
+						report.append("\t\t\tmissing count: ").append(files.getMissing()).append("\n");
 						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+						if (cleanup) {
+							files.cleanup();
+						}
 					}
 					{ //STREAMS
-						File streamsDir = OmFileHelper.getStreamsDir();
+						RecordingDao recordDao = getApplicationContext(ctxName).getBean(RecordingDao.class);
+						CleanupEntityUnit rec = CleanupHelper.getRecUnit(recordDao);
 						File hibernateDir = OmFileHelper.getStreamsHibernateDir();
-						if (cleanup) {
-							String hiberPath = hibernateDir.getCanonicalPath();
-							for (File f : streamsDir.listFiles()) {
-								if (!f.getCanonicalPath().equals(hiberPath)) {
-									FileHelper.removeRec(f);
-								}
-							}
-						}
-						long sectionSize = OmFileHelper.getSize(streamsDir);
-						report.append("Recordings allocates: ").append(OmFileHelper.getHumanSize(sectionSize)).append("\n");
+						report.append("Recordings allocates: ").append(rec.getHumanTotal()).append("\n");
 						long size = OmFileHelper.getSize(hibernateDir);
-						long restSize = sectionSize - size;
-						RecordingDao recordDao = getApplicationContext(ctxName).getBean(RecordingDao.class);
-						long[] params = {0, 0}; // [0] == deleted [1] == missing
-						for (Recording rec : recordDao.get()) {
-							checkRecordingFile(hibernateDir, rec.getHash(), rec.isDeleted(), params, cleanup);
-							checkRecordingFile(hibernateDir, rec.getAlternateDownload(), rec.isDeleted(), params, cleanup);
-							checkRecordingFile(hibernateDir, rec.getPreviewImage(), rec.isDeleted(), params, cleanup);
-						}
-						long invalid = 0;
-						for (File f : hibernateDir.listFiles()) {
-							if (f.isFile() && f.getName().endsWith(".flv")) {
-								Recording rec = recordDao.getByHash(f.getName());
-								if (rec == null) {
-									cleanUpFile(invalid, cleanup, f);
-									String name = f.getName().substring(0, f.getName().length() - 5);
-									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".avi"));
-									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".jpg"));
-									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".flv.meta"));
-								}
-							}
-						}
+						long restSize = rec.getSizeTotal() - size;
 						report.append("\t\tfinal: ").append(OmFileHelper.getHumanSize(size)).append("\n");
-						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
-						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(params[0])).append("\n");
-						report.append("\t\t\tmissing count: ").append(params[1]).append("\n");
+						report.append("\t\t\tinvalid: ").append(rec.getHumanInvalid()).append("\n");
+						report.append("\t\t\tdeleted: ").append(rec.getHumanDeleted()).append("\n");
+						report.append("\t\t\tmissing count: ").append(rec.getMissing()).append("\n");
 						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+						if (cleanup) {
+							rec.cleanup();
+						}
 					}
 					System.out.println(report);
 				} catch (Exception e) {
@@ -446,32 +405,6 @@ public class Admin {
 		System.exit(0);
 	}
 	
-	private static long cleanUpFile(long invalid, boolean cleanup, File f) {
-		if (f.exists()) {
-			if (cleanup) {
-				FileHelper.removeRec(f);
-			} else {
-				invalid += f.length();
-			}
-		}
-		return invalid;
-	}
-	private static void checkRecordingFile(File hibernateDir, String name, boolean deleted, long[] params, boolean cleanup) {
-		File flv = name != null ? new File(hibernateDir, name) : null;
-		if (flv != null) {
-			if (flv.exists() && flv.isFile()) {
-				if (deleted) {
-					params[0] += flv.length();
-					if (cleanup) {
-						FileHelper.removeRec(flv);
-					}
-				}
-			} else {
-				params[1]++;
-			}
-		}
-	}
-	
 	private void checkAdminDetails(String ctxName) throws Exception {
 		cfg.username = cmdl.getOptionValue("user");
 		cfg.email = cmdl.getOptionValue("email");

Modified: openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java (original)
+++ openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupEntityUnit.java Wed Apr  6 09:39:48 2016
@@ -19,12 +19,15 @@
 package org.apache.openmeetings.cli;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.transaction.util.FileHelper;
 import org.apache.openmeetings.util.OmFileHelper;
 
 public abstract class CleanupEntityUnit extends CleanupUnit {
+	private static final long serialVersionUID = 1L;
 	protected List<File> invalid = new ArrayList<>();
 	protected List<File> deleted = new ArrayList<>();
 	private long sizeInvalid = 0;
@@ -42,6 +45,16 @@ public abstract class CleanupEntityUnit
 		}
 	}
 	
+	@Override
+	public void cleanup() throws IOException {
+		for (File i : invalid) {
+			FileHelper.removeRec(i);
+		}
+		for (File i : deleted) {
+			FileHelper.removeRec(i);
+		}
+	}
+	
 	public abstract void fill();
 
 	public long getSizeInvalid() {

Modified: openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java (original)
+++ openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java Wed Apr  6 09:39:48 2016
@@ -18,37 +18,36 @@
  */
 package org.apache.openmeetings.cli;
 
+import static org.apache.openmeetings.util.OmFileHelper.FLV_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
+
 import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.List;
 
 import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
 
 public class CleanupHelper {
+	private static final Logger log = Red5LoggerFactory.getLogger(CleanupHelper.class);
+	
 	public static CleanupUnit getTempUnit() {
-		return new CleanupUnit(OmFileHelper.getUploadTempDir()) {
-			@Override
-			public void cleanup() {
-				for (File f : getParent().listFiles()) {
-					FileHelper.removeRec(f);
-				}
-			}
-		};
+		return new CleanupUnit(OmFileHelper.getUploadTempDir());
 	}
 
 	public static CleanupEntityUnit getProfileUnit(final UserDao udao) {
 		return new CleanupEntityUnit(OmFileHelper.getUploadProfilesDir()) {
-			@Override
-			public void cleanup() {
-				for (File i : invalid) {
-					FileHelper.removeRec(i);
-				}
-				for (File i : deleted) {
-					FileHelper.removeRec(i);
-				}
-			}
-			
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public void fill() {
 				for (File profile : getParent().listFiles()) {
@@ -67,6 +66,99 @@ public class CleanupHelper {
 				}
 			}
 		};
+	}
+
+	public static CleanupUnit getImportUnit() {
+		return new CleanupUnit(OmFileHelper.getUploadImportDir());
+	}
+
+	public static CleanupUnit getBackupUnit() {
+		return new CleanupUnit(OmFileHelper.getUploadBackupDir());
+	}
+
+	public static CleanupEntityUnit getFileUnit(final FileExplorerItemDao fileDao) {
+		return new CleanupEntityUnit(OmFileHelper.getUploadFilesDir()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void fill() {
+				for (File f : getParent().listFiles()) {
+					FileExplorerItem item = fileDao.getByHash(f.getName()); // TODO probable extension should be stripped
+					if (item == null) {
+						invalid.add(f);
+					} else if (item.isDeleted()) {
+						deleted.add(f);
+					}
+				}
+				//TODO WML_DIR should also be checked
+				for (FileExplorerItem item : fileDao.get()) {
+					if (!item.isDeleted() && item.getHash() != null && !new File(getParent(), item.getHash()).exists()) {
+						missing++;
+					}
+				}
+			}
+		};
+	}
+
+	public static CleanupEntityUnit getRecUnit(final RecordingDao recordDao) {
+		return new CleanupEntityUnit(OmFileHelper.getStreamsDir()) {
+			private static final long serialVersionUID = 1L;
+			private File hibernateDir;
+
+			@Override
+			public void cleanup() throws IOException {
+				String hiberPath = hibernateDir.getCanonicalPath();
+				for (File f : getParent().listFiles()) {
+					if (!f.getCanonicalPath().equals(hiberPath)) {
+						FileHelper.removeRec(f);
+					}
+				}
+				super.cleanup();
+			}
+			
+			@Override
+			public void fill() {
+				hibernateDir = OmFileHelper.getStreamsHibernateDir();
+				for (File f : hibernateDir.listFiles(new FilenameFilter() {
+					@Override
+					public boolean accept(File dir, String name) {
+						return name.startsWith(recordingFileName) && name.endsWith(FLV_EXTENSION);
+					}
+				})) {
+					if (!f.isFile()) {
+						log.warn("Recording found is not a file: " + f);
+						continue;
+					}
+					Long id = Long.valueOf(f.getName().substring(recordingFileName.length(), f.getName().length() - FLV_EXTENSION.length()));
+					Recording item = recordDao.get(id);
+					if (item == null) {
+						add(invalid, id);
+					} else if (item.isDeleted()) {
+						add(deleted, id);
+					}
+				}
+				for (Recording item : recordDao.get()) {
+					if (!item.isDeleted() && item.getHash() != null && list(item.getId()).length == 0) {
+						missing++;
+					}
+				}
+			}
+			
+			private File[] list(final Long id) {
+				return hibernateDir.listFiles(new FilenameFilter() {
+					@Override
+					public boolean accept(File dir, String name) {
+						return name.startsWith(recordingFileName + id);
+					}
+				});
+			}
+			
+			private void add(List<File> list, final Long id) {
+				for (File f : list(id)) {
+					list.add(f);
+				}
+			}
+		};
 	}
 
 	private static long getUserIdByProfile(String name) {

Modified: openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java (original)
+++ openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupUnit.java Wed Apr  6 09:39:48 2016
@@ -19,10 +19,14 @@
 package org.apache.openmeetings.cli;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
 
+import org.apache.commons.transaction.util.FileHelper;
 import org.apache.openmeetings.util.OmFileHelper;
 
-public abstract class CleanupUnit {
+public class CleanupUnit implements Serializable {
+	private static final long serialVersionUID = 1L;
 	private final File parent;
 	private final long sizeTotal;
 	
@@ -34,7 +38,11 @@ public abstract class CleanupUnit {
 		sizeTotal = OmFileHelper.getSize(parent);
 	}
 	
-	public abstract void cleanup();
+	public void cleanup() throws IOException {
+		for (File f : getParent().listFiles()) {
+			FileHelper.removeRec(f);
+		}
+	}
 	
 	public File getParent() {
 		return parent;

Modified: openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java (original)
+++ openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java Wed Apr  6 09:39:48 2016
@@ -66,11 +66,13 @@ public class OmFileHelper {
 	public static final String libraryFileName = "library.xml";
 	public static final String defaultProfileImageName = "profile_pic.jpg";
 	public static final String profileFileName = "profile";
+	public static final String recordingFileName = "flvRecording_";
 	public static final String profileImagePrefix = "_profile_";
 	public static final String chatImagePrefix = "_chat_";
 	public static final String bigImagePrefix = "_big_";
 	public static final String thumbImagePrefix = "_thumb_";
 	public static final String dashboardFile = "dashboard.xml";
+	public static final String FLV_EXTENSION = ".flv";
 	public static final String MP4_EXTENSION = ".mp4";
 	public static final String OGG_EXTENSION = ".ogg";
 	public static final String JPG_EXTENTION = ".jpg";
@@ -173,7 +175,7 @@ public class OmFileHelper {
 	}
 	
 	public static File getStreamsDir() {
-		return new File(OmFileHelper.OM_HOME, STREAMS_DIR);
+		return getDir(OmFileHelper.OM_HOME, STREAMS_DIR);
 	}
 	
 	public static File getStreamsHibernateDir() {
@@ -211,7 +213,7 @@ public class OmFileHelper {
 	}
 	
 	public static File getRecordingMetaData(Long roomId, String name) {
-		return new File(getStreamsSubDir(roomId), name + ".flv");
+		return new File(getStreamsSubDir(roomId), name + FLV_EXTENSION);
 	}
 	
 	public static File getLanguagesDir() {

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java?rev=1737955&r1=1737954&r2=1737955&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java Wed Apr  6 09:39:48 2016
@@ -266,12 +266,10 @@ public class OmUrlFragment implements Se
 				break;
 			case room:
 				try {
-					Long roomId = Long.parseLong(type);
-					if (roomId != null) {
-						Room r = getBean(RoomDao.class).get(roomId);
-						if (r != null) {
-							basePanel = new RoomPanel(CHILD_ID, r);
-						}
+					Long roomId = Long.valueOf(type);
+					Room r = getBean(RoomDao.class).get(roomId);
+					if (r != null) {
+						basePanel = new RoomPanel(CHILD_ID, r);
 					}
 				} catch(NumberFormatException ne) {
 					//skip it, bad roomid passed