Author: solomax
Date: Mon Feb 20 15:43:49 2017
New Revision: 1783779

URL: http://svn.apache.org/viewvc?rev=1783779&view=rev
Log:
[OPENMEETINGS-1570] room video conversion should be fixed, room clean-up is 
added

Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
    
openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
    
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
    
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
    
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/remote/ConferenceLibrary.java
    
openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
    
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
    
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
    
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
 Mon Feb 20 15:43:49 2017
@@ -60,14 +60,14 @@ public class FileProcessor {
        //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();
-               
+
                // Generate a random string to prevent any problems with
                // foreign characters and duplicates
                String hash = UUID.randomUUID().toString();
 
                String ext = getFileExt(f.getName());
                log.debug("file extension: " + ext);
-               StoredFile storedFile = new StoredFile(hash, 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
@@ -109,7 +109,7 @@ public class FileProcessor {
                }
                FileUtils.copyInputStreamToFile(is, file);
 
-               
+
                log.debug("canBeConverted: " + canBeConverted);
                if (canBeConverted || isPdf) {
                        // convert to pdf, thumbs, swf and xml-description
@@ -125,18 +125,18 @@ public class FileProcessor {
                        returnError.addItem("processThumb", processThumb);
                } else if (isVideo) {
                        List<ConverterProcessResult> returnList = 
flvExplorerConverter.convertToMP4(f, ext);
-                       
+
                        int i = 0;
                        for (ConverterProcessResult returnMap : returnList) {
-                               returnError.addItem("processFLV " + i, 
returnMap);
+                               returnError.addItem("processVideo " + i++, 
returnMap);
                        }
                }
-               
+
                // has to happen at the end, otherwise it will be overwritten
                //cause the variable is new initialized
                returnError.setCompleteName(file.getName());
                returnError.setFileItemId(f.getId());
-               
+
                return returnError;
        }
 }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
 Mon Feb 20 15:43:49 2017
@@ -56,9 +56,9 @@ import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
- * 
+ *
  * @author swagner
- * 
+ *
  */
 public class ConferenceLibrary implements IPendingServiceCallback {
        private static final Logger log = 
Red5LoggerFactory.getLogger(ConferenceLibrary.class, webAppRootKey);
@@ -102,9 +102,9 @@ public class ConferenceLibrary implement
        }
 
        /**
-        * 
+        *
         * Save an Object to the library and returns the file-explorer Id
-        * 
+        *
         * @param sid
         * @param roomId
         * @param fileName
@@ -140,7 +140,7 @@ public class ConferenceLibrary implement
        /**
         * Loads a Object from the library into the whiteboard of all 
participant of
         * the current room
-        * 
+        *
         * @param uid - uid of the client performing operation
         * @param wbId - id of whiteboard
         * @param fi - FileItem of the Wml being loaded
@@ -185,9 +185,9 @@ public class ConferenceLibrary implement
        }
 
        /**
-        * 
+        *
         * Loads a chart object
-        * 
+        *
         * @param sid
         * @param room_id
         * @param fileName
@@ -229,7 +229,7 @@ public class ConferenceLibrary implement
 
                                        File target = new File(targetFolder, 
mp4.getName());
                                        if (mp4.exists() && !target.exists()) {
-                                               FileUtils.copyFile(mp4, target);
+                                               FileUtils.copyFile(mp4, target, 
false);
                                        }
                                        return 1L;
                                }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
 Mon Feb 20 15:43:49 2017
@@ -19,14 +19,22 @@
 package org.apache.openmeetings.service.quartz.scheduler;
 
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.TEST_SETUP_PREFIX;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
 import java.io.FileFilter;
+import java.util.Map;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import 
org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectListManagerById;
+import org.apache.openmeetings.core.session.SessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
 import org.apache.openmeetings.util.InitializationContainer;
-import org.apache.openmeetings.util.OmFileHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,9 +43,14 @@ public class CleanupJob extends Abstract
        private static Logger log = 
Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
        private long sessionTimeout = 30 * 60 * 1000L;
        private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
+       private long roomFilesTtl = 60 * 60 * 1000L; // 1 hour
 
        @Autowired
-       private SessiondataDao sessiondataDao;
+       private SessiondataDao sessionDao;
+       @Autowired
+       private SessionManager sessionManager;
+       @Autowired
+       private WhiteBoardObjectListManagerById wbManager;
 
        public long getSessionTimeout() {
                return sessionTimeout;
@@ -55,24 +68,31 @@ public class CleanupJob extends Abstract
                this.testSetupTimeout = testSetupTimeout;
        }
 
+       public long getRoomFilesTtl() {
+               return roomFilesTtl;
+       }
+
+       public void setRoomFilesTtl(long roomFilesTtl) {
+               this.roomFilesTtl = roomFilesTtl;
+       }
+
        public void cleanTestSetup() {
-               log.debug("CleanupJob.execute");
+               log.debug("CleanupJob.cleanTestSetup");
                if (!InitializationContainer.initComplete) {
                        return;
                }
                try {
                        //FIXME need to move all these staff to helper
-                       File[] folders = 
OmFileHelper.getStreamsDir().listFiles();
+                       File[] folders = getStreamsDir().listFiles();
                        if (folders != null) {
                                for (File folder : folders) {
                                        if (folder.isDirectory()) {
                                                File[] files = 
folder.listFiles(new FileFilter() {
                                                        @Override
                                                        public boolean 
accept(File file) {
-                                                               return 
file.getName().startsWith("TEST_SETUP_");
+                                                               return 
file.getName().startsWith(TEST_SETUP_PREFIX);
                                                        }
                                                });
-                                               //TODO need to rework this and 
remove hardcodings
                                                if (files != null) {
                                                        for (File file : files) 
{
                                                                if 
(file.isFile() && file.lastModified() + testSetupTimeout < 
System.currentTimeMillis()) {
@@ -89,6 +109,47 @@ public class CleanupJob extends Abstract
                }
        }
 
+       public void cleanRoomFiles() {
+               log.debug("CleanupJob.cleanRoomFiles");
+               if (!InitializationContainer.initComplete) {
+                       return;
+               }
+               try {
+                       //FIXME need to move all these staff to helper
+                       File[] folders = getStreamsDir().listFiles();
+                       if (folders != null) {
+                               for (File folder : folders) {
+                                       Long roomId = null;
+                                       if 
(NumberUtils.isCreatable(folder.getName())) {
+                                               roomId = 
Long.valueOf(folder.getName());
+                                               WhiteboardObjectList wbList = 
wbManager.getWhiteBoardObjectListByRoomId(roomId);
+                                               for (Map.Entry<Long, 
WhiteboardObject> e : wbList.getWhiteboardObjects().entrySet()) {
+                                                       if 
(!e.getValue().getRoomItems().isEmpty()) {
+                                                               roomId = null;
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                                       if (folder.isDirectory() && roomId != 
null && sessionManager.getClientListByRoom(roomId).isEmpty()) {
+                                               File[] files = 
folder.listFiles();
+                                               //TODO need to rework this and 
remove hardcodings
+                                               if (files != null) {
+                                                       for (File file : files) 
{
+                                                               if 
(file.isFile() && file.lastModified() + roomFilesTtl < 
System.currentTimeMillis()) {
+                                                                       
log.debug("Room files are too old and no users in the room: " + roomId);
+                                                                       
FileUtils.deleteDirectory(folder);
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               } catch (Exception e) {
+                       log.error("Unexpected exception while processing tests 
setup videous.", e);
+               }
+       }
+
        public void cleanSessions() {
                log.trace("CleanupJob.cleanSessions");
                if (!InitializationContainer.initComplete) {
@@ -96,7 +157,7 @@ public class CleanupJob extends Abstract
                }
                try {
                        // TODO Generate report
-                       sessiondataDao.clearSessionTable(sessionTimeout);
+                       sessionDao.clearSessionTable(sessionTimeout);
                } catch (Exception err){
                        log.error("execute",err);
                }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
 Mon Feb 20 15:43:49 2017
@@ -59,6 +59,7 @@ public class OmFileHelper {
        public static final String recordingFileName = "flvRecording_";
        public static final String profileImagePrefix = "_profile_";
        public static final String thumbImagePrefix = "_thumb_";
+       public static final String TEST_SETUP_PREFIX = "TEST_SETUP_";
        public static final String dashboardFile = "dashboard.xml";
        public static final String EXTENSION_WML = "wml";
        public static final String EXTENSION_FLV = "flv";
@@ -175,7 +176,7 @@ public class OmFileHelper {
        }
 
        public static File getStreamsSubDir(Long id) {
-               return getDir(getStreamsDir(), id.toString());
+               return getStreamsSubDir("" + id);
        }
 
        public static File getStreamsSubDir(String name) {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
 Mon Feb 20 15:43:49 2017
@@ -28,11 +28,11 @@ import java.util.Map.Entry;
 import org.slf4j.Logger;
 
 /**
- * 
+ *
  * Collects all results of conversion jobs
- * 
+ *
  * @author sebawagner
- * 
+ *
  */
 public class ConverterProcessResultList {
        private static final Logger log = 
getLogger(ConverterProcessResultList.class, webAppRootKey);
@@ -60,7 +60,7 @@ public class ConverterProcessResultList
 
        public ConverterProcessResult addItem(String name, 
ConverterProcessResult processResult) {
                if (jobs.containsKey(name)) {
-                       log.error("Duplicate key in jobslist");
+                       log.error("Duplicate key in jobslist:: " + name);
                        return null;
                }
                return jobs.put(name, processResult);
@@ -68,7 +68,7 @@ public class ConverterProcessResultList
 
        /**
         * returns true if there was an job with exitValue "-1"
-        * 
+        *
         * @return
         */
        public boolean hasError() {
@@ -82,7 +82,7 @@ public class ConverterProcessResultList
 
        /**
         * converts all job results into a human readable format
-        * 
+        *
         * @return
         */
        public String getLogMessage() {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 Mon Feb 20 15:43:49 2017
@@ -24,6 +24,7 @@
        xmlns:context="http://www.springframework.org/schema/context";
        xmlns:jaxrs="http://cxf.apache.org/jaxrs";
        xmlns:jaxws="http://cxf.apache.org/jaxws";
+       xmlns:p="http://www.springframework.org/schema/p";
        xsi:schemaLocation="
                http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
                http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd
@@ -91,91 +92,58 @@
        <bean id="openmeetings.RecordingConverter" 
class="org.apache.openmeetings.core.converter.RecordingConverter" />
        <bean id="openmeetings.SlaveHTTPConnectionManager" 
class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" />
 
-       <bean id="cleanupJob" 
class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob">
-               <property name="sessionTimeout" value="1800000"/><!-- 30 
minutes -->
-               <property name="testSetupTimeout" value="3600000"/><!-- 1 hour 
-->
-       </bean>
-       <bean id="cleanSessionsJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="cleanupJob" />
-               <property name="targetMethod" value="cleanSessions" />
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerCleanSessions" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="cleanSessionsJobDetails" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="300000" /><!-- repeat 
every 300 seconds == 5 minutes -->
-       </bean>
-       <bean id="cleanTestSetupJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="cleanupJob" />
-               <property name="targetMethod" value="cleanTestSetup"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerCleanTestSetup" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="cleanTestSetupJobDetail" />
-               <property name="startDelay" value="1800000"/><!-- 30 minutes 
--> 
-               <property name="repeatInterval" value="1800000"/> <!-- 30 
minutes -->
-       </bean>
-       <bean id="cleanExpiredRecJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="cleanupJob" />
-               <property name="targetMethod" value="cleanExpiredRecordings" />
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerCleanExpiredRec" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="cleanExpiredRecJobDetails" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="3600000" /><!-- 1 hour 
-->
-       </bean>
+        <!--   1800000 == 30 min
+                       3600000 == 1 hour
+                       5000    == 5 sec
+                       300000  == 5 min
+                       900000  == 15 min
+        -->
+       <bean id="cleanupJob" 
class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob"
+                       p:sessionTimeout="1800000" p:testSetupTimeout="3600000" 
p:roomFilesTtl="3600000" />
+       <bean id="cleanSessionsJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanSessions" p:concurrent="false" />
+       <bean id="triggerCleanSessions" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanSessionsJobDetails" 
p:startDelay="5000" p:repeatInterval="300000" />
+       <bean id="cleanTestSetupJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanTestSetup" p:concurrent="false" />
+       <bean id="triggerCleanTestSetup" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanTestSetupJobDetail" 
p:startDelay="1800000" p:repeatInterval="1800000" />
+       <bean id="cleanRoomFilesJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanRoomFiles" p:concurrent="false" />
+       <bean id="triggerCleanRoomFiles" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanRoomFilesJobDetail" 
p:startDelay="10000" p:repeatInterval="1800000" /> <!-- p:startDelay="1800000" 
-->
+       <bean id="cleanExpiredRecJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanExpiredRecordings" p:concurrent="false" />
+       <bean id="triggerCleanExpiredRec" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanExpiredRecJobDetails" 
p:startDelay="5000" p:repeatInterval="3600000" />
 
        <bean id="reminderJob" 
class="org.apache.openmeetings.service.quartz.scheduler.ReminderJob"/>
-       <bean id="meetingReminderJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="reminderJob" />
-               <property name="targetMethod" value="remindMeetings"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerMeetingReminder" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="meetingReminderJobDetail" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="100000"/><!-- repeat 
every 100 seconds -->
-       </bean>
-       <bean id="expiringRecordingJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="reminderJob" />
-               <property name="targetMethod" value="remindExpiringRecordings"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerExpiringRecording" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="expiringRecordingJobDetail" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="3600000"/><!-- repeat 
every 1 hour -->
-       </bean>
+       <bean id="meetingReminderJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="reminderJob" 
p:targetMethod="remindMeetings" p:concurrent="false" />
+       <bean id="triggerMeetingReminder" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="meetingReminderJobDetail" 
p:startDelay="5000" p:repeatInterval="100000"/>
+       <bean id="expiringRecordingJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="reminderJob" 
p:targetMethod="remindExpiringRecordings" p:concurrent="false" />
+       <bean id="triggerExpiringRecording" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="expiringRecordingJobDetail" 
p:startDelay="5000" p:repeatInterval="3600000"/>
 
        <!-- Mail related jobs -->
        <bean id="mailHandler" 
class="org.apache.openmeetings.core.mail.MailHandler" />
-       <bean id="resetSendingMailStatus" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="mailHandler" />
-               <property name="targetMethod" value="resetSendingStatus"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerResetSendingMailStatus" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="resetSendingMailStatus" />
-               <property name="startDelay" value="60000"/> <!-- 1 minute -->
-               <property name="repeatInterval" value="900000"/> <!-- 15 
minutes -->
-       </bean>
-       <bean id="sendMails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="mailHandler" />
-               <property name="targetMethod" value="sendMails"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerSendMails" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="sendMails" />
-               <property name="startDelay" value="60000"/> <!-- 1 minute -->
-               <property name="repeatInterval" value="60000"/> <!-- 1 minute 
-->
-       </bean>
+       <bean id="resetSendingMailStatus" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="mailHandler" 
p:targetMethod="resetSendingStatus" p:concurrent="false" />
+       <bean id="triggerResetSendingMailStatus" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="resetSendingMailStatus" 
p:startDelay="60000" p:repeatInterval="900000" />
+       <bean id="sendMails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="mailHandler" 
p:targetMethod="sendMails" p:concurrent="false" />
+       <bean id="triggerSendMails" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="sendMails" p:startDelay="60000" 
p:repeatInterval="60000" />
        
        <bean 
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                <property name="triggers">
                        <list>
                                <ref bean="triggerCleanSessions" />
                                <ref bean="triggerCleanTestSetup" />
+                               <ref bean="triggerCleanRoomFiles" />
                                <ref bean="triggerCleanExpiredRec" />
                                <ref bean="triggerMeetingReminder" />
                                <ref bean="triggerExpiringRecording" />

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=1783779&r1=1783778&r2=1783779&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
 Mon Feb 20 15:43:49 2017
@@ -60,14 +60,14 @@ public class FileProcessor {
        //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();
-               
+
                // Generate a random string to prevent any problems with
                // foreign characters and duplicates
                String hash = UUID.randomUUID().toString();
 
                String ext = getFileExt(f.getName());
                log.debug("file extension: " + ext);
-               StoredFile storedFile = new StoredFile(hash, 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
@@ -109,7 +109,7 @@ public class FileProcessor {
                }
                FileUtils.copyInputStreamToFile(is, file);
 
-               
+
                log.debug("canBeConverted: " + canBeConverted);
                if (canBeConverted || isPdf) {
                        // convert to pdf, thumbs, swf and xml-description
@@ -125,18 +125,18 @@ public class FileProcessor {
                        returnError.addItem("processThumb", processThumb);
                } else if (isVideo) {
                        List<ConverterProcessResult> returnList = 
flvExplorerConverter.convertToMP4(f, ext);
-                       
+
                        int i = 0;
                        for (ConverterProcessResult returnMap : returnList) {
-                               returnError.addItem("processFLV " + i, 
returnMap);
+                               returnError.addItem("processVideo " + i++, 
returnMap);
                        }
                }
-               
+
                // has to happen at the end, otherwise it will be overwritten
                //cause the variable is new initialized
                returnError.setCompleteName(file.getName());
                returnError.setFileItemId(f.getId());
-               
+
                return returnError;
        }
 }

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=1783779&r1=1783778&r2=1783779&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
 Mon Feb 20 15:43:49 2017
@@ -56,9 +56,9 @@ import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
- * 
+ *
  * @author swagner
- * 
+ *
  */
 public class ConferenceLibrary implements IPendingServiceCallback {
        private static final Logger log = 
Red5LoggerFactory.getLogger(ConferenceLibrary.class, webAppRootKey);
@@ -102,9 +102,9 @@ public class ConferenceLibrary implement
        }
 
        /**
-        * 
+        *
         * Save an Object to the library and returns the file-explorer Id
-        * 
+        *
         * @param sid
         * @param roomId
         * @param fileName
@@ -140,7 +140,7 @@ public class ConferenceLibrary implement
        /**
         * Loads a Object from the library into the whiteboard of all 
participant of
         * the current room
-        * 
+        *
         * @param uid - uid of the client performing operation
         * @param wbId - id of whiteboard
         * @param fi - FileItem of the Wml being loaded
@@ -185,9 +185,9 @@ public class ConferenceLibrary implement
        }
 
        /**
-        * 
+        *
         * Loads a chart object
-        * 
+        *
         * @param sid
         * @param room_id
         * @param fileName
@@ -229,7 +229,7 @@ public class ConferenceLibrary implement
 
                                        File target = new File(targetFolder, 
mp4.getName());
                                        if (mp4.exists() && !target.exists()) {
-                                               FileUtils.copyFile(mp4, target);
+                                               FileUtils.copyFile(mp4, target, 
false);
                                        }
                                        return 1L;
                                }

Modified: 
openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
 Mon Feb 20 15:43:49 2017
@@ -19,14 +19,22 @@
 package org.apache.openmeetings.service.quartz.scheduler;
 
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.TEST_SETUP_PREFIX;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
 import java.io.FileFilter;
+import java.util.Map;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import 
org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectListManagerById;
+import org.apache.openmeetings.core.session.SessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
 import org.apache.openmeetings.util.InitializationContainer;
-import org.apache.openmeetings.util.OmFileHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,9 +43,14 @@ public class CleanupJob extends Abstract
        private static Logger log = 
Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
        private long sessionTimeout = 30 * 60 * 1000L;
        private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
+       private long roomFilesTtl = 60 * 60 * 1000L; // 1 hour
 
        @Autowired
-       private SessiondataDao sessiondataDao;
+       private SessiondataDao sessionDao;
+       @Autowired
+       private SessionManager sessionManager;
+       @Autowired
+       private WhiteBoardObjectListManagerById wbManager;
 
        public long getSessionTimeout() {
                return sessionTimeout;
@@ -55,24 +68,31 @@ public class CleanupJob extends Abstract
                this.testSetupTimeout = testSetupTimeout;
        }
 
+       public long getRoomFilesTtl() {
+               return roomFilesTtl;
+       }
+
+       public void setRoomFilesTtl(long roomFilesTtl) {
+               this.roomFilesTtl = roomFilesTtl;
+       }
+
        public void cleanTestSetup() {
-               log.debug("CleanupJob.execute");
+               log.debug("CleanupJob.cleanTestSetup");
                if (!InitializationContainer.initComplete) {
                        return;
                }
                try {
                        //FIXME need to move all these staff to helper
-                       File[] folders = 
OmFileHelper.getStreamsDir().listFiles();
+                       File[] folders = getStreamsDir().listFiles();
                        if (folders != null) {
                                for (File folder : folders) {
                                        if (folder.isDirectory()) {
                                                File[] files = 
folder.listFiles(new FileFilter() {
                                                        @Override
                                                        public boolean 
accept(File file) {
-                                                               return 
file.getName().startsWith("TEST_SETUP_");
+                                                               return 
file.getName().startsWith(TEST_SETUP_PREFIX);
                                                        }
                                                });
-                                               //TODO need to rework this and 
remove hardcodings
                                                if (files != null) {
                                                        for (File file : files) 
{
                                                                if 
(file.isFile() && file.lastModified() + testSetupTimeout < 
System.currentTimeMillis()) {
@@ -89,6 +109,47 @@ public class CleanupJob extends Abstract
                }
        }
 
+       public void cleanRoomFiles() {
+               log.debug("CleanupJob.cleanRoomFiles");
+               if (!InitializationContainer.initComplete) {
+                       return;
+               }
+               try {
+                       //FIXME need to move all these staff to helper
+                       File[] folders = getStreamsDir().listFiles();
+                       if (folders != null) {
+                               for (File folder : folders) {
+                                       Long roomId = null;
+                                       if 
(NumberUtils.isCreatable(folder.getName())) {
+                                               roomId = 
Long.valueOf(folder.getName());
+                                               WhiteboardObjectList wbList = 
wbManager.getWhiteBoardObjectListByRoomId(roomId);
+                                               for (Map.Entry<Long, 
WhiteboardObject> e : wbList.getWhiteboardObjects().entrySet()) {
+                                                       if 
(!e.getValue().getRoomItems().isEmpty()) {
+                                                               roomId = null;
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                                       if (folder.isDirectory() && roomId != 
null && sessionManager.getClientListByRoom(roomId).isEmpty()) {
+                                               File[] files = 
folder.listFiles();
+                                               //TODO need to rework this and 
remove hardcodings
+                                               if (files != null) {
+                                                       for (File file : files) 
{
+                                                               if 
(file.isFile() && file.lastModified() + roomFilesTtl < 
System.currentTimeMillis()) {
+                                                                       
log.debug("Room files are too old and no users in the room: " + roomId);
+                                                                       
FileUtils.deleteDirectory(folder);
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               } catch (Exception e) {
+                       log.error("Unexpected exception while processing tests 
setup videous.", e);
+               }
+       }
+
        public void cleanSessions() {
                log.trace("CleanupJob.cleanSessions");
                if (!InitializationContainer.initComplete) {
@@ -96,7 +157,7 @@ public class CleanupJob extends Abstract
                }
                try {
                        // TODO Generate report
-                       sessiondataDao.clearSessionTable(sessionTimeout);
+                       sessionDao.clearSessionTable(sessionTimeout);
                } catch (Exception err){
                        log.error("execute",err);
                }

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=1783779&r1=1783778&r2=1783779&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
 Mon Feb 20 15:43:49 2017
@@ -59,6 +59,7 @@ public class OmFileHelper {
        public static final String recordingFileName = "flvRecording_";
        public static final String profileImagePrefix = "_profile_";
        public static final String thumbImagePrefix = "_thumb_";
+       public static final String TEST_SETUP_PREFIX = "TEST_SETUP_";
        public static final String dashboardFile = "dashboard.xml";
        public static final String EXTENSION_WML = "wml";
        public static final String EXTENSION_FLV = "flv";
@@ -175,7 +176,7 @@ public class OmFileHelper {
        }
 
        public static File getStreamsSubDir(Long id) {
-               return getDir(getStreamsDir(), id.toString());
+               return getStreamsSubDir("" + id);
        }
 
        public static File getStreamsSubDir(String name) {

Modified: 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
 Mon Feb 20 15:43:49 2017
@@ -28,11 +28,11 @@ import java.util.Map.Entry;
 import org.slf4j.Logger;
 
 /**
- * 
+ *
  * Collects all results of conversion jobs
- * 
+ *
  * @author sebawagner
- * 
+ *
  */
 public class ConverterProcessResultList {
        private static final Logger log = 
getLogger(ConverterProcessResultList.class, webAppRootKey);
@@ -60,7 +60,7 @@ public class ConverterProcessResultList
 
        public ConverterProcessResult addItem(String name, 
ConverterProcessResult processResult) {
                if (jobs.containsKey(name)) {
-                       log.error("Duplicate key in jobslist");
+                       log.error("Duplicate key in jobslist:: " + name);
                        return null;
                }
                return jobs.put(name, processResult);
@@ -68,7 +68,7 @@ public class ConverterProcessResultList
 
        /**
         * returns true if there was an job with exitValue "-1"
-        * 
+        *
         * @return
         */
        public boolean hasError() {
@@ -82,7 +82,7 @@ public class ConverterProcessResultList
 
        /**
         * converts all job results into a human readable format
-        * 
+        *
         * @return
         */
        public String getLogMessage() {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 Mon Feb 20 15:43:49 2017
@@ -24,6 +24,7 @@
        xmlns:context="http://www.springframework.org/schema/context";
        xmlns:jaxrs="http://cxf.apache.org/jaxrs";
        xmlns:jaxws="http://cxf.apache.org/jaxws";
+       xmlns:p="http://www.springframework.org/schema/p";
        xsi:schemaLocation="
                http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
                http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd
@@ -89,91 +90,58 @@
        <bean id="openmeetings.RecordingConverter" 
class="org.apache.openmeetings.core.converter.RecordingConverter" />
        <bean id="openmeetings.SlaveHTTPConnectionManager" 
class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" />
 
-       <bean id="cleanupJob" 
class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob">
-               <property name="sessionTimeout" value="1800000"/><!-- 30 
minutes -->
-               <property name="testSetupTimeout" value="3600000"/><!-- 1 hour 
-->
-       </bean>
-       <bean id="cleanSessionsJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="cleanupJob" />
-               <property name="targetMethod" value="cleanSessions" />
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerCleanSessions" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="cleanSessionsJobDetails" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="300000" /><!-- repeat 
every 300 seconds == 5 minutes -->
-       </bean>
-       <bean id="cleanTestSetupJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="cleanupJob" />
-               <property name="targetMethod" value="cleanTestSetup"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerCleanTestSetup" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="cleanTestSetupJobDetail" />
-               <property name="startDelay" value="1800000"/><!-- 30 minutes 
--> 
-               <property name="repeatInterval" value="1800000"/> <!-- 30 
minutes -->
-       </bean>
-       <bean id="cleanExpiredRecJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="cleanupJob" />
-               <property name="targetMethod" value="cleanExpiredRecordings" />
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerCleanExpiredRec" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="cleanExpiredRecJobDetails" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="3600000" /><!-- 1 hour 
-->
-       </bean>
+        <!--   1800000 == 30 min
+                       3600000 == 1 hour
+                       5000    == 5 sec
+                       300000  == 5 min
+                       900000  == 15 min
+        -->
+       <bean id="cleanupJob" 
class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob"
+                       p:sessionTimeout="1800000" p:testSetupTimeout="3600000" 
p:roomFilesTtl="3600000" />
+       <bean id="cleanSessionsJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanSessions" p:concurrent="false" />
+       <bean id="triggerCleanSessions" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanSessionsJobDetails" 
p:startDelay="5000" p:repeatInterval="300000" />
+       <bean id="cleanTestSetupJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanTestSetup" p:concurrent="false" />
+       <bean id="triggerCleanTestSetup" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanTestSetupJobDetail" 
p:startDelay="1800000" p:repeatInterval="1800000" />
+       <bean id="cleanRoomFilesJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanRoomFiles" p:concurrent="false" />
+       <bean id="triggerCleanRoomFiles" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanRoomFilesJobDetail" 
p:startDelay="10000" p:repeatInterval="1800000" /> <!-- p:startDelay="1800000" 
-->
+       <bean id="cleanExpiredRecJobDetails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="cleanupJob" 
p:targetMethod="cleanExpiredRecordings" p:concurrent="false" />
+       <bean id="triggerCleanExpiredRec" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="cleanExpiredRecJobDetails" 
p:startDelay="5000" p:repeatInterval="3600000" />
 
        <bean id="reminderJob" 
class="org.apache.openmeetings.service.quartz.scheduler.ReminderJob"/>
-       <bean id="meetingReminderJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="reminderJob" />
-               <property name="targetMethod" value="remindMeetings"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerMeetingReminder" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="meetingReminderJobDetail" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="100000"/><!-- repeat 
every 100 seconds -->
-       </bean>
-       <bean id="expiringRecordingJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="reminderJob" />
-               <property name="targetMethod" value="remindExpiringRecordings"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerExpiringRecording" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="expiringRecordingJobDetail" />
-               <property name="startDelay" value="5000"/><!-- 5 seconds -->
-               <property name="repeatInterval" value="3600000"/><!-- repeat 
every 1 hour -->
-       </bean>
+       <bean id="meetingReminderJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="reminderJob" 
p:targetMethod="remindMeetings" p:concurrent="false" />
+       <bean id="triggerMeetingReminder" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="meetingReminderJobDetail" 
p:startDelay="5000" p:repeatInterval="100000"/>
+       <bean id="expiringRecordingJobDetail" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="reminderJob" 
p:targetMethod="remindExpiringRecordings" p:concurrent="false" />
+       <bean id="triggerExpiringRecording" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="expiringRecordingJobDetail" 
p:startDelay="5000" p:repeatInterval="3600000"/>
 
        <!-- Mail related jobs -->
        <bean id="mailHandler" 
class="org.apache.openmeetings.core.mail.MailHandler" />
-       <bean id="resetSendingMailStatus" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="mailHandler" />
-               <property name="targetMethod" value="resetSendingStatus"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerResetSendingMailStatus" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="resetSendingMailStatus" />
-               <property name="startDelay" value="60000"/> <!-- 1 minute -->
-               <property name="repeatInterval" value="900000"/> <!-- 15 
minutes -->
-       </bean>
-       <bean id="sendMails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-               <property name="targetObject" ref="mailHandler" />
-               <property name="targetMethod" value="sendMails"/>
-               <property name="concurrent" value="false" />
-       </bean>
-       <bean id="triggerSendMails" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-               <property name="jobDetail" ref="sendMails" />
-               <property name="startDelay" value="60000"/> <!-- 1 minute -->
-               <property name="repeatInterval" value="60000"/> <!-- 1 minute 
-->
-       </bean>
+       <bean id="resetSendingMailStatus" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="mailHandler" 
p:targetMethod="resetSendingStatus" p:concurrent="false" />
+       <bean id="triggerResetSendingMailStatus" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="resetSendingMailStatus" 
p:startDelay="60000" p:repeatInterval="900000" />
+       <bean id="sendMails" 
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+                       p:targetObject-ref="mailHandler" 
p:targetMethod="sendMails" p:concurrent="false" />
+       <bean id="triggerSendMails" 
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+                       p:jobDetail-ref="sendMails" p:startDelay="60000" 
p:repeatInterval="60000" />
        
        <bean 
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                <property name="triggers">
                        <list>
                                <ref bean="triggerCleanSessions" />
                                <ref bean="triggerCleanTestSetup" />
+                               <ref bean="triggerCleanRoomFiles" />
                                <ref bean="triggerCleanExpiredRec" />
                                <ref bean="triggerMeetingReminder" />
                                <ref bean="triggerExpiringRecording" />


Reply via email to