- remove jms messages

This commit is contained in:
Richard Alam 2011-06-10 15:29:11 -04:00
parent 2ac6aaa09a
commit 769470e232
8 changed files with 970 additions and 1004 deletions

View File

@ -1,7 +1,7 @@
#utf-8
#Mon Jun 06 06:53:20 UTC 2011
#Fri Jun 10 11:32:20 EDT 2011
app.version=0.70dev
app.servlet.version=2.4
app.grails.version=1.1.1
plugins.jsecurity=0.4.1
app.name=bigbluebutton
plugins.jsecurity=0.4.1

View File

@ -14,8 +14,7 @@
<integration:gateway id="documentConversionService" service-interface="org.bigbluebutton.presentation.DocumentConversionService"/>
<integration:channel id="convertChannel"/>
<integration:filter ref="supportedDocumentFilter" method="isSupported" input-channel="convertChannel"
output-channel="docRouterChannel"/>
<integration:filter ref="supportedDocumentFilter" method="isSupported" input-channel="convertChannel" output-channel="docRouterChannel"/>
<bean id="supportedDocumentFilter" class="org.bigbluebutton.presentation.SupportedDocumentFilter">
<property name="conversionProgressNotifier" ref="conversionProgressNotifier"/>
</bean>
@ -30,13 +29,11 @@
<integration:channel id="conversionProgressChannel"/>
<integration:gateway id="conversionProgressNotifier" service-interface="org.bigbluebutton.presentation.ConversionProgressNotifier"/>
<integration:service-activator input-channel="officeFileChannel" output-channel="officeToPdfConvertResultChannel"
ref="officeToPdfConversionService" method="convertOfficeToPdf"/>
<integration:service-activator input-channel="officeFileChannel" output-channel="officeToPdfConvertResultChannel" ref="officeToPdfConversionService" method="convertOfficeToPdf"/>
<bean id="officeToPdfConversionService" class="org.bigbluebutton.presentation.imp.OfficeToPdfConversionService"/>
<integration:channel id="officeToPdfConvertResultChannel"/>
<integration:filter ref="officeToPdfConversionSuccessFilter" method="didConversionSucceed" input-channel="officeToPdfConvertResultChannel"
output-channel="convertChannel"/>
<integration:filter ref="officeToPdfConversionSuccessFilter" method="didConversionSucceed" input-channel="officeToPdfConvertResultChannel" output-channel="convertChannel"/>
<bean id="officeToPdfConversionSuccessFilter" class="org.bigbluebutton.presentation.OfficeToPdfConversionSuccessFilter">
<property name="conversionProgressNotifier" ref="conversionProgressNotifier"/>
</bean>
@ -45,9 +42,7 @@
<integration:channel id="discardChannel"/>
<integration:service-activator input-channel="imageFileChannel" ref="imageToSwfSlidesGenerationService" method="generateSlides"/>
<jms:outbound-channel-adapter id="jmsOut" destination-name="UpdatesQueue" channel="conversionProgressChannel"/>
<bean id="pageExtractor" class="org.bigbluebutton.presentation.imp.GhostscriptPageExtractor">
<property name="ghostscriptExec" value="${ghostScriptExec}"/>
<property name="noPdfMarkWorkaround" value="${noPdfMarkWorkaround}"/>

View File

@ -21,17 +21,4 @@
// Place your Spring DSL code here
beans = {
jmsFactory(org.apache.activemq.pool.PooledConnectionFactory) { bean ->
connectionFactory = {org.apache.activemq.ActiveMQConnectionFactory cf ->
brokerURL = "tcp://localhost:61616"
}
}
jmsTemplate(org.springframework.jms.core.JmsTemplate) {
connectionFactory = jmsFactory
}
jmsTemplate(org.springframework.jms.core.JmsTemplate) {
connectionFactory = jmsFactory
}
}

View File

@ -15,23 +15,8 @@
http://www.springframework.org/schema/integration/stream/spring-integration-stream-1.0.xsd
http://www.springframework.org/schema/integration/file
http://www.springframework.org/schema/integration/file/spring-integration-file-1.0.xsd
">
<!--
<bean id="redisDispatcher" class="org.bigbluebutton.redis.RedisDispatcher">
<constructor-arg index="0" value="${redisHost}" />
<constructor-arg index="1" value="${redisPort}" />
</bean>
<bean id="redisListener" class="org.bigbluebutton.redis.RedisListener" init-method="init">
<constructor-arg index="0" value="${redisHost}" />
<constructor-arg index="1" value="${redisPort}" />
<property name="pubsubListener" ref="pubsubListener"></property>
</bean>
<bean id="pubsubListener" class="org.bigbluebutton.redis.PubsubListener">
<property name="dynamicConferenceService" ref="dynamicConferenceService"></property>
</bean>
-->
">
<bean id="meetingService" class="org.bigbluebutton.api.MeetingServiceImp">
<property name="messagingService" ref="messagingService"></property>
</bean>
@ -44,13 +29,6 @@
<constructor-arg index="0" value="${redisHost}"/>
<constructor-arg index="1" value="${redisPort}"/>
</bean>
<!-- Spring Integration / JMS gateways -->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61616</value>
</property>
</bean>
<import resource="doc-conversion.xml" />

View File

@ -1,22 +1,22 @@
/*
* BigBlueButton - http://www.bigbluebutton.org
*
* Copyright (c) 2008-2009 by respective authors (see below). All rights reserved.
*
* BigBlueButton is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 3 of the License, or (at your option) any later
* version.
*
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with BigBlueButton; if not, If not, see <http://www.gnu.org/licenses/>.
*
* $Id: $
*/
/*
* BigBlueButton - http://www.bigbluebutton.org
*
* Copyright (c) 2008-2009 by respective authors (see below). All rights reserved.
*
* BigBlueButton is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 3 of the License, or (at your option) any later
* version.
*
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with BigBlueButton; if not, If not, see <http://www.gnu.org/licenses/>.
*
* $Id: $
*/
package org.bigbluebutton.web.controllers
import org.jsecurity.authc.AuthenticationException
@ -28,241 +28,240 @@ import org.springframework.util.FileCopyUtils
import grails.converters.*
import org.bigbluebutton.web.services.PresentationService
import org.bigbluebutton.presentation.UploadedPresentation
import org.bigbluebutton.presentation.UploadedPresentation
class PresentationController {
PresentationService presentationService
def index = {
println 'in PresentationController index'
render(view:'upload-file')
}
def list = {
def f = confInfo()
println "conference info ${f.conference} ${f.room}"
def presentationsList = presentationService.listPresentations(f.conference, f.room)
PresentationService presentationService
def index = {
println 'in PresentationController index'
render(view:'upload-file')
}
def list = {
def f = confInfo()
println "conference info ${f.conference} ${f.room}"
def presentationsList = presentationService.listPresentations(f.conference, f.room)
if (presentationsList) {
withFormat {
xml {
render(contentType:"text/xml") {
conference(id:f.conference, room:f.room) {
presentations {
for (s in presentationsList) {
presentation(name:s)
}
}
}
}
}
}
} else {
render(view:'upload-file')
}
}
if (presentationsList) {
withFormat {
xml {
render(contentType:"text/xml") {
conference(id:f.conference, room:f.room) {
presentations {
for (s in presentationsList) {
presentation(name:s)
}
}
}
}
}
}
} else {
render(view:'upload-file')
}
}
def delete = {
def filename = params.presentation_name
def f = confInfo()
presentationService.deletePresentation(f.conference, f.room, filename)
flash.message = "file ${filename} removed"
redirect( action:list )
}
def delete = {
def filename = params.presentation_name
def f = confInfo()
presentationService.deletePresentation(f.conference, f.room, filename)
flash.message = "file ${filename} removed"
redirect( action:list )
}
def upload = {
println 'PresentationController:upload'
def file = request.getFile('fileUpload')
if(file && !file.empty) {
def upload = {
println 'PresentationController:upload'
def file = request.getFile('fileUpload')
if(file && !file.empty) {
flash.message = 'Your file has been uploaded'
// Replace any character other than a (A-Z, a-z, 0-9, _ or .) with a - (dash).
def notValidCharsRegExp = /[^0-9a-zA-Z_\.]/
def notValidCharsRegExp = /[^0-9a-zA-Z_\.]/
log.debug "Uploaded presentation name : $params.presentation_name"
def presentationName = params.presentation_name.replaceAll(notValidCharsRegExp, '-')
def presentationName = params.presentation_name.replaceAll(notValidCharsRegExp, '-')
log.debug "Uploaded presentation name : $presentationName"
File uploadDir = presentationService.uploadedPresentationDirectory(params.conference, params.room, presentationName)
def newFilename = file.getOriginalFilename().replaceAll(notValidCharsRegExp, '-')
def pres = new File( uploadDir.absolutePath + File.separatorChar + newFilename )
file.transferTo(pres)
UploadedPresentation uploadedPres = new UploadedPresentation(params.conference, params.room, presentationName);
file.transferTo(pres)
UploadedPresentation uploadedPres = new UploadedPresentation(params.conference, params.room, presentationName);
uploadedPres.setUploadedFile(pres);
presentationService.processUploadedPresentation(uploadedPres)
}
else {
flash.message = 'file cannot be empty'
}
//redirect( action:list)
return [];
}
def testConversion = {
presentationService.testConversionProcess();
}
} else {
flash.message = 'file cannot be empty'
}
//redirect( action:list)
return [];
}
//handle external presentation server
def delegate = {
println '\nPresentationController:delegate'
def presentation_name = request.getParameter('presentation_name')
def conference = request.getParameter('conference')
def room = request.getParameter('room')
def returnCode = request.getParameter('returnCode')
def totalSlides = request.getParameter('totalSlides')
def slidesCompleted = request.getParameter('slidesCompleted')
presentationService.processDelegatedPresentation(conference, room, presentation_name, returnCode, totalSlides, slidesCompleted)
redirect( action:list)
}
def showSlide = {
def presentationName = params.presentation_name
def conf = params.conference
def rm = params.room
def slide = params.id
InputStream is = null;
try {
def testConversion = {
presentationService.testConversionProcess();
}
//handle external presentation server
def delegate = {
println '\nPresentationController:delegate'
def presentation_name = request.getParameter('presentation_name')
def conference = request.getParameter('conference')
def room = request.getParameter('room')
def returnCode = request.getParameter('returnCode')
def totalSlides = request.getParameter('totalSlides')
def slidesCompleted = request.getParameter('slidesCompleted')
presentationService.processDelegatedPresentation(conference, room, presentation_name, returnCode, totalSlides, slidesCompleted)
redirect( action:list)
}
def showSlide = {
def presentationName = params.presentation_name
def conf = params.conference
def rm = params.room
def slide = params.id
InputStream is = null;
try {
// def f = confInfo()
def pres = presentationService.showSlide(conf, rm, presentationName, slide)
if (pres.exists()) {
def bytes = pres.readBytes()
response.addHeader("Cache-Control", "no-cache")
response.contentType = 'application/x-shockwave-flash'
response.outputStream << bytes;
}
} catch (IOException e) {
System.out.println("Error reading file.\n" + e.getMessage());
}
return null;
}
def showThumbnail = {
def presentationName = params.presentation_name
def conf = params.conference
def rm = params.room
def thumb = params.id
println "Controller: Show thumbnails request for $presentationName $thumb"
InputStream is = null;
try {
def pres = presentationService.showThumbnail(conf, rm, presentationName, thumb)
if (pres.exists()) {
println "Controller: Sending thumbnails reply for $presentationName $thumb"
def bytes = pres.readBytes()
response.addHeader("Cache-Control", "no-cache")
response.contentType = 'image'
response.outputStream << bytes;
} else {
println "$pres does not exist."
}
} catch (IOException e) {
println("Error reading file.\n" + e.getMessage());
}
return null;
}
def show = {
//def filename = params.id.replace('###', '.')
def filename = params.presentation_name
InputStream is = null;
System.out.println("showing ${filename}")
try {
def f = confInfo()
def pres = presentationService.showPresentation(f.conference, f.room, filename)
if (pres.exists()) {
System.out.println("Found ${filename}")
def bytes = pres.readBytes()
def pres = presentationService.showSlide(conf, rm, presentationName, slide)
if (pres.exists()) {
def bytes = pres.readBytes()
response.addHeader("Cache-Control", "no-cache")
response.contentType = 'application/x-shockwave-flash'
response.outputStream << bytes;
}
} catch (IOException e) {
System.out.println("Error reading file.\n" + e.getMessage());
}
return null;
}
def showThumbnail = {
def presentationName = params.presentation_name
def conf = params.conference
def rm = params.room
def thumb = params.id
println "Controller: Show thumbnails request for $presentationName $thumb"
InputStream is = null;
try {
def pres = presentationService.showThumbnail(conf, rm, presentationName, thumb)
if (pres.exists()) {
println "Controller: Sending thumbnails reply for $presentationName $thumb"
def bytes = pres.readBytes()
response.addHeader("Cache-Control", "no-cache")
response.contentType = 'image'
response.outputStream << bytes;
} else {
println "$pres does not exist."
}
} catch (IOException e) {
println("Error reading file.\n" + e.getMessage());
}
return null;
}
def show = {
//def filename = params.id.replace('###', '.')
def filename = params.presentation_name
InputStream is = null;
System.out.println("showing ${filename}")
try {
def f = confInfo()
def pres = presentationService.showPresentation(f.conference, f.room, filename)
if (pres.exists()) {
System.out.println("Found ${filename}")
def bytes = pres.readBytes()
response.contentType = 'application/x-shockwave-flash'
response.outputStream << bytes;
}
} catch (IOException e) {
System.out.println("Error reading file.\n" + e.getMessage());
}
return null;
}
def thumbnail = {
def filename = params.id.replace('###', '.')
System.out.println("showing ${filename} ${params.thumb}")
def presDir = confDir() + File.separatorChar + filename
try {
def pres = presentationService.showThumbnail(presDir, params.thumb)
if (pres.exists()) {
def bytes = pres.readBytes()
response.contentType = 'application/x-shockwave-flash'
response.outputStream << bytes;
}
} catch (IOException e) {
System.out.println("Error reading file.\n" + e.getMessage());
}
return null;
}
def thumbnail = {
def filename = params.id.replace('###', '.')
System.out.println("showing ${filename} ${params.thumb}")
def presDir = confDir() + File.separatorChar + filename
try {
def pres = presentationService.showThumbnail(presDir, params.thumb)
if (pres.exists()) {
def bytes = pres.readBytes()
response.contentType = 'image'
response.outputStream << bytes;
}
} catch (IOException e) {
System.out.println("Error reading file.\n" + e.getMessage());
}
return null;
}
response.contentType = 'image'
response.outputStream << bytes;
}
} catch (IOException e) {
System.out.println("Error reading file.\n" + e.getMessage());
}
return null;
}
def numberOfSlides = {
def presentationName = params.presentation_name
def conf = params.conference
def rm = params.room
def numThumbs = presentationService.numberOfThumbnails(conf, rm, presentationName)
response.addHeader("Cache-Control", "no-cache")
withFormat {
xml {
render(contentType:"text/xml") {
conference(id:conf, room:rm) {
presentation(name:presentationName) {
slides(count:numThumbs) {
for (def i = 1; i <= numThumbs; i++) {
slide(number:"${i}", name:"slide/${i}", thumb:"thumbnail/${i}")
}
}
}
}
}
}
}
}
def numberOfThumbnails = {
def filename = params.presentation_name
def f = confInfo()
def numThumbs = presentationService.numberOfThumbnails(f.conference, f.room, filename)
withFormat {
xml {
render(contentType:"text/xml") {
conference(id:f.conference, room:f.room) {
presentation(name:filename) {
thumbnails(count:numThumbs) {
for (def i=0;i<numThumbs;i++) {
thumb(name:"thumbnails/${i}")
}
}
}
}
}
}
}
}
def confInfo = {
def numberOfSlides = {
def presentationName = params.presentation_name
def conf = params.conference
def rm = params.room
def numThumbs = presentationService.numberOfThumbnails(conf, rm, presentationName)
response.addHeader("Cache-Control", "no-cache")
withFormat {
xml {
render(contentType:"text/xml") {
conference(id:conf, room:rm) {
presentation(name:presentationName) {
slides(count:numThumbs) {
for (def i = 1; i <= numThumbs; i++) {
slide(number:"${i}", name:"slide/${i}", thumb:"thumbnail/${i}")
}
}
}
}
}
}
}
}
def numberOfThumbnails = {
def filename = params.presentation_name
def f = confInfo()
def numThumbs = presentationService.numberOfThumbnails(f.conference, f.room, filename)
withFormat {
xml {
render(contentType:"text/xml") {
conference(id:f.conference, room:f.room) {
presentation(name:filename) {
thumbnails(count:numThumbs) {
for (def i=0;i<numThumbs;i++) {
thumb(name:"thumbnails/${i}")
}
}
}
}
}
}
}
}
def confInfo = {
// Subject currentUser = SecurityUtils.getSubject()
// Session session = currentUser.getSession()
def fname = session["fullname"]
def rl = session["role"]
def conf = session["conference"]
def rm = session["room"]
println "Conference info: ${conf} ${rm}"
return [conference:conf, room:rm]
}
def fname = session["fullname"]
def rl = session["role"]
def conf = session["conference"]
def rm = session["room"]
println "Conference info: ${conf} ${rm}"
return [conference:conf, room:rm]
}
}

View File

@ -141,7 +141,7 @@ public class DynamicConferenceService {
public String processLogoutUrl(String logoutUrl) {
if (StringUtils.isEmpty(logoutUrl)) {
if (StringUtils.isEmpty(defaultLogoutUrl)) {
if (StringUtils.isEmpty(defaultLogoutUrl)) {
return defaultServerUrl;
} else {
return defaultLogoutUrl;

View File

@ -20,10 +20,8 @@
*/
package org.bigbluebutton.api.domain;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@ -31,15 +29,12 @@ import java.util.concurrent.ConcurrentMap;
public class Meeting {
private String name;
private String extMeetingId;
private String intMeetingId;
private String intMeetingId;
private int duration;
private long createdTime;
private long startTime = 0;
private long endTime = 0;
private boolean forciblyEnded = false;
private String telVoice;
private String webVoice;
private String moderatorPass;
@ -47,10 +42,10 @@ public class Meeting {
private String welcomeMsg;
private String logoutUrl;
private int maxUsers;
private boolean record;
private final ConcurrentMap<String, String> metadata;
private String dialNumber;
private Map<String, String> metadata;
private final ConcurrentMap<String, User> users;
public Meeting(Builder builder) {
@ -60,9 +55,18 @@ public class Meeting {
viewerPass = builder.viewerPass;
moderatorPass = builder.moderatorPass;
maxUsers = builder.maxUsers;
logoutUrl = builder.logoutUrl;
record = builder.record;
duration = builder.duration;
webVoice = builder.webVoice;
telVoice = builder.telVoice;
welcomeMsg = builder.welcomeMsg;
dialNumber = builder.dialNumber;
metadata = builder.metadata;
createdTime = System.currentTimeMillis();
users = new ConcurrentHashMap<String, User>();
metadata = new ConcurrentHashMap<String, String>();
metadata.put("meetingId", extMeetingId);
}
@ -183,6 +187,9 @@ public class Meeting {
return sum;
}
public String getDialNumber() {
return dialNumber;
}
/***
* Meeting Builder