diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/ISlideDatabase.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/ISlideDatabase.class
new file mode 100644
index 0000000000..160d5e3e90
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/ISlideDatabase.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/SlideDescriptor.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/SlideDescriptor.class
new file mode 100644
index 0000000000..a2ecd40291
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/SlideDescriptor.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/BaseException.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/BaseException.class
new file mode 100644
index 0000000000..3c2fd296ba
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/BaseException.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/IProgressListener.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/IProgressListener.class
new file mode 100644
index 0000000000..3e5a6741ee
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/IProgressListener.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/ISlideManager.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/ISlideManager.class
new file mode 100644
index 0000000000..4c993d3af0
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/ISlideManager.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/LogProgressListener.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/LogProgressListener.class
new file mode 100644
index 0000000000..1e6ff25103
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/LogProgressListener.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/NullProgressListener.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/NullProgressListener.class
new file mode 100644
index 0000000000..eb66799d8d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/NullProgressListener.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/UnsupportedPresentationDocumentException.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/UnsupportedPresentationDocumentException.class
new file mode 100644
index 0000000000..9eb04adf0a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/UnsupportedPresentationDocumentException.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/ZipDocumentHandler.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/ZipDocumentHandler.class
new file mode 100644
index 0000000000..5a373d466b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/ZipDocumentHandler.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager$1.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager$1.class
new file mode 100644
index 0000000000..5b3a08fa09
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager$1.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager$SlideComparator.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager$SlideComparator.class
new file mode 100644
index 0000000000..80c3202618
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager$SlideComparator.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager.class
new file mode 100644
index 0000000000..ff83e34f95
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/FileSystemSlideManager.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/Helper.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/Helper.class
new file mode 100644
index 0000000000..3b6c802cf4
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/Helper.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/OOOConnection.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/OOOConnection.class
new file mode 100644
index 0000000000..5eea758a1f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/OOOConnection.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/OOODocument.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/OOODocument.class
new file mode 100644
index 0000000000..d036ddce52
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/OOODocument.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PageHelper.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PageHelper.class
new file mode 100644
index 0000000000..ade24d1565
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PageHelper.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PdfToSwfDocumentHandler.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PdfToSwfDocumentHandler.class
new file mode 100644
index 0000000000..5758d23cf7
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PdfToSwfDocumentHandler.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptDocumentHandler.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptDocumentHandler.class
new file mode 100644
index 0000000000..f6a8e12cdb
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptDocumentHandler.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToJpegConverter.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToJpegConverter.class
new file mode 100644
index 0000000000..aa47c14c97
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToJpegConverter.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToSwfConverter.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToSwfConverter.class
new file mode 100644
index 0000000000..e67ead7ac9
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToSwfConverter.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToSwfDocumentHandler.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToSwfDocumentHandler.class
new file mode 100644
index 0000000000..6c800ad4aa
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/PptToSwfDocumentHandler.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/ReturnCode.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/ReturnCode.class
new file mode 100644
index 0000000000..975a38101c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/ReturnCode.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/SlideInfo.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/SlideInfo.class
new file mode 100644
index 0000000000..3213dd498a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/SlideInfo.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender$1.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender$1.class
new file mode 100644
index 0000000000..93d0b64b46
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender$1.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender$2.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender$2.class
new file mode 100644
index 0000000000..65cec359f3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender$2.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender.class
new file mode 100644
index 0000000000..236c7e6f57
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/document/impl/UpdatesMessageSender.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadListener.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadListener.class
new file mode 100644
index 0000000000..4d84d57166
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadListener.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadListenerManager.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadListenerManager.class
new file mode 100644
index 0000000000..0c1df2789f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadListenerManager.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadMonitor.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadMonitor.class
new file mode 100644
index 0000000000..7b3cf9550e
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/manager/UploadMonitor.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/FileUploadController.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/FileUploadController.class
new file mode 100644
index 0000000000..bcc1649c81
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/FileUploadController.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument$1.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument$1.class
new file mode 100644
index 0000000000..13cba83113
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument$1.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument$DocumentLoader.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument$DocumentLoader.class
new file mode 100644
index 0000000000..a7b7c36eb8
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument$DocumentLoader.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument.class b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument.class
new file mode 100644
index 0000000000..7da9b7dd94
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/.classes/org/bigbluebuttonproject/fileupload/web/SlidePresentationDocument.class differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.classpath b/bigbluebutton-servlet/bigbluebutton-servlet/.classpath
new file mode 100644
index 0000000000..00a0a8a53b
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/.classpath
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.project b/bigbluebutton-servlet/bigbluebutton-servlet/.project
new file mode 100644
index 0000000000..8cb124a1ff
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/.project
@@ -0,0 +1,17 @@
+
+
+ bigbluebutton-servlet
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.settings/org.eclipse.jdt.core.prefs b/bigbluebutton-servlet/bigbluebutton-servlet/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..8e105bd138
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Aug 16 10:11:17 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/.settings/org.eclipse.jdt.ui.prefs b/bigbluebutton-servlet/bigbluebutton-servlet/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..232874c775
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Aug 16 10:11:17 EDT 2007
+eclipse.preferences.version=1
+internal.default.compliance=default
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/LICENSE.txt b/bigbluebutton-servlet/bigbluebutton-servlet/LICENSE.txt
new file mode 100644
index 0000000000..5ab7695ab8
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/LICENSE.txt
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This library 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 2.1 of the License, or (at your option) any later version.
+
+ This library 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 this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ , 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/build.xml b/bigbluebutton-servlet/bigbluebutton-servlet/build.xml
new file mode 100644
index 0000000000..b0639d8515
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/build.xml
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/copyright.txt b/bigbluebutton-servlet/bigbluebutton-servlet/copyright.txt
new file mode 100644
index 0000000000..0f44920601
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/copyright.txt
@@ -0,0 +1,17 @@
+
+Copyright 2006-2007 by respective authors (see below). All rights reserved.
+
+This library 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 2.1 of the License, or (at your option) any later
+version.
+
+This library 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 this library; if not, write to the Free Software Foundation, Inc.,
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+The Blindside Project
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/dist/bigbluebutton.war b/bigbluebutton-servlet/bigbluebutton-servlet/dist/bigbluebutton.war
new file mode 100644
index 0000000000..17cc1342d8
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/dist/bigbluebutton.war differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/doc/allclasses-frame.html b/bigbluebutton-servlet/bigbluebutton-servlet/doc/allclasses-frame.html
new file mode 100644
index 0000000000..579f4016a4
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/doc/allclasses-frame.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+All Classes
+
+
+
+
+
+
+
+
+
+
+
+All Classes
+
+
+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+Package
+
+
+
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:
+
Interfaces (italic)
Classes
Enums
Exceptions
Errors
Annotation Types
+
+
+Class/Interface
+
+
+
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:
+
Class inheritance diagram
Direct Subclasses
All Known Subinterfaces
All Known Implementing Classes
Class/interface declaration
Class/interface description
+
+
Nested Class Summary
Field Summary
Constructor Summary
Method Summary
+
+
Field Detail
Constructor Detail
Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+
+
+Annotation Type
+
+
+
+Each annotation type has its own separate page with the following sections:
+
Annotation Type declaration
Annotation Type description
Required Element Summary
Optional Element Summary
Element Detail
+
+
+
+Enum
+
+
+
+Each enum has its own separate page with the following sections:
+
Enum declaration
Enum description
Enum Constant Summary
Enum Constant Detail
+
+
+Use
+
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
+
+Tree (Class Hierarchy)
+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
+
When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+
+Deprecated API
+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+
+Index
+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+
+Prev/Next
+These links take you to the next or previous class, interface, package, or related page.
+Frames/No Frames
+These links show and hide the HTML frames. All pages are available with or without frames.
+
+
+Serialized Form
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+
This method basically saves the MultipartFile given as parameter( temporary stored file format)
+ And it also return instance of file which is saved in saveDir
+
+This class is used as the BASE class which services client requests: fileUpload, getting Slides for viewing....
+ The requests are received by FileUploadCintroller class and routed here.
+
+ Some code from jGallery
+
getThumbnailsForRoom(java.lang.Integer room)
+
+
+ This method is used to generate SlideDescriptor List slide thumbs of the given conference room.
+
+
+
+ void
+
getXml(java.lang.Integer room,
+ java.lang.String name,
+ java.io.OutputStream os)
+
+
+ This method basically copies the contents of the file (in our case, slide XML description) to the OutputStream given.
+
+
+
+ void
+
resizeImage(java.io.File infile,
+ java.io.File outfile,
+ float compressionQuality,
+ int thumbBounds)
+
+
+ This method create thumbImage of the image file given and save it in outFile.
+
+
+
+ java.io.File
+
saveUploadedFile(org.springframework.web.multipart.MultipartFile multipartFile,
+ java.lang.Integer room)
+
+
+ This method basically saves the MultipartFile given as parameter( temporary stored file format)
+ And it also return instance of file which is saved in saveDir
+
+
+
+ void
+
setBaseDirectory(java.lang.String dest)
+
+
+ Setter for destination directory
+
+
+
+ void
+
setExtractedFolder(java.lang.String extractedFolder)
+
+
+ Setter for extracted folder directory
+
+
+
+ void
+
streamImage(java.lang.Integer room,
+ java.lang.String name,
+ java.io.OutputStream os)
+
+
+ This method basically copies the contents of the file (in our case, slides) to the OutputStream given.
This method create thumbImage of the image file given and save it in outFile.
+ Compression quality is also given. thumbBounds is used for calculating the size of the thumb.
+
This method basically saves the MultipartFile given as parameter( temporary stored file format)
+ And it also return instance of file which is saved in saveDir
+
+
+
Specified by:
saveUploadedFile in interface org.blindsideproject.fileupload.ISlideDatabase
+
+
+
Parameters:
multipartFile - temporary storage of uploaded file
This method basically copies the contents of the file (in our case, slides) to the OutputStream given.
+ OutputStream given here is the connection stream to the client.
+ This tells us that this function streams the slides to the client.
+
+
+
Specified by:
streamImage in interface org.blindsideproject.fileupload.ISlideDatabase
This method basically copies the contents of the file (in our case, slide XML description) to the OutputStream given.
+ OutputStream given here is the connection stream to the client.
+ This tells us that this function streams the slides to the client.
+
+
+
Specified by:
getXml in interface org.blindsideproject.fileupload.ISlideDatabase
+This is the base class of blindside-servlet, which listen to the HTTP requests from blindside clients (Extends MultiActionController for this purpose).
+ Requests from clients can be: File upload, Request for Slides, Request for slideXML or Request for slide descriptors
+
+ This class uses FileSystemSlideManager.java and SlidePresentationDocument.java (keeping instances of those two classes).
+ Basically, this class is used as an adapter class which relays Http client requests to other classes.
+
+
+
+
+
Author:
+
+
+
+
+
+
+
+
+
+
+
+Field Summary
+
+
+
+
+
+
Fields inherited from class org.springframework.web.servlet.mvc.multiaction.MultiActionController
getXmlSlides(javax.servlet.http.HttpServletRequest request,
+ javax.servlet.http.HttpServletResponse response)
+
+
+ This handler method overwriting the method in MultiActionController.
+
+
+
+ org.springframework.web.servlet.ModelAndView
+
processFileUpload(javax.servlet.http.HttpServletRequest request,
+ javax.servlet.http.HttpServletResponse response)
+
+
+ This method is called when the client HTTP request for file upload.
+
+
+
+ void
+
setSlideDatabase(org.blindsideproject.fileupload.ISlideDatabase slideDatabase)
+
+
+ Setter for slideDatabase
+
+
+
+ void
+
setSlidePres(org.blindsideproject.fileupload.web.SlidePresentationDocument slidePres)
+
+
+ Setter for slidePres
+
+
+
+ org.springframework.web.servlet.ModelAndView
+
showSlides(javax.servlet.http.HttpServletRequest request,
+ javax.servlet.http.HttpServletResponse response)
+
+
+ This method sends the List of slide descriptors for the room (given roomID) to HttpServletResponse.
+
+
+
+ org.springframework.web.servlet.ModelAndView
+
streamImageContent(javax.servlet.http.HttpServletRequest request,
+ javax.servlet.http.HttpServletResponse response)
+
+
+ This handler method overwriting the method in MultiActionController.
+
+
+
+
+
+
Methods inherited from class org.springframework.web.servlet.mvc.multiaction.MultiActionController
This method sends the List of slide descriptors for the room (given roomID) to HttpServletResponse.
+ Calls getSlidesForRoom() method from FileSystemSlideManager class
+
This handler method overwriting the method in MultiActionController.
+ Its purpose is to stream slide XML from server to the HTTP response.
+ It writes the response using HttpServletResponse.
+
+
+
Parameters:
request - HttpServletRequest
response - HttpServletResponse where the Slide XML is sent
+
This handler method overwriting the method in MultiActionController.
+ Its purpose is to stream slide content from server to the HTTP response.
+ It writes the response using HttpServletResponse parameter.
+
+
+
Parameters:
request - HttpServletRequest
response - HttpServletResponse where the image is sent
+
This method is called when the client HTTP request for file upload.
+ Calls saveUploadedFile() from FileSystemManager class to save uploaded pdf file from client.
+ Also creates Slide description XML file by calling createDefaultXml() from FileSystemManager class
+
This is the base class of blindside-servlet, which listen to the HTTP requests from blindside clients (Extends MultiActionController for this purpose).
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/doc/package-list b/bigbluebutton-servlet/bigbluebutton-servlet/doc/package-list
new file mode 100644
index 0000000000..ef5e938837
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/doc/package-list
@@ -0,0 +1 @@
+org.blindsideproject.fileupload.document.impl
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/doc/resources/inherit.gif b/bigbluebutton-servlet/bigbluebutton-servlet/doc/resources/inherit.gif
new file mode 100644
index 0000000000..c814867a13
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/doc/resources/inherit.gif differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/doc/stylesheet.css b/bigbluebutton-servlet/bigbluebutton-servlet/doc/stylesheet.css
new file mode 100644
index 0000000000..cbd34286b1
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/doc/stylesheet.css
@@ -0,0 +1,29 @@
+/* Javadoc style sheet */
+
+/* Define colors, fonts and other style attributes here to override the defaults */
+
+/* Page background color */
+body { background-color: #FFFFFF; color:#000000 }
+
+/* Headings */
+h1 { font-size: 145% }
+
+/* Table colors */
+.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
+.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
+.TableRowColor { background: #FFFFFF; color:#000000 } /* White */
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
+.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
+.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
+
+/* Navigation bar fonts and colors */
+.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
+.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
+.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
+
+.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
+.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-aop.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-aop.jar
new file mode 100644
index 0000000000..7258bf212d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-aop.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-beans.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-beans.jar
new file mode 100644
index 0000000000..cfc270758e
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-beans.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-context.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-context.jar
new file mode 100644
index 0000000000..ba27243de8
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-context.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-core.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-core.jar
new file mode 100644
index 0000000000..fdc5d0bf69
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-core.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-dao.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-dao.jar
new file mode 100644
index 0000000000..73e9a841cd
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-dao.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-hibernate2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-hibernate2.jar
new file mode 100644
index 0000000000..0e659b177e
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-hibernate2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-hibernate3.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-hibernate3.jar
new file mode 100644
index 0000000000..3e97b84e8d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-hibernate3.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-ibatis.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-ibatis.jar
new file mode 100644
index 0000000000..09b1f9c5c8
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-ibatis.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jca.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jca.jar
new file mode 100644
index 0000000000..75a1e1196e
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jca.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jdbc.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jdbc.jar
new file mode 100644
index 0000000000..d2ca1823fc
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jdbc.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jdo.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jdo.jar
new file mode 100644
index 0000000000..7d9835c6ba
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jdo.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jms.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jms.jar
new file mode 100644
index 0000000000..8dd404851f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jms.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jmx.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jmx.jar
new file mode 100644
index 0000000000..0244c7d611
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jmx.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jpa.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jpa.jar
new file mode 100644
index 0000000000..3a032d916f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-jpa.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-portlet.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-portlet.jar
new file mode 100644
index 0000000000..22c2a1103c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-portlet.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-remoting.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-remoting.jar
new file mode 100644
index 0000000000..db3f390057
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-remoting.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-struts.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-struts.jar
new file mode 100644
index 0000000000..162752a1c9
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-struts.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-support.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-support.jar
new file mode 100644
index 0000000000..b95566d1d7
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-support.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-toplink.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-toplink.jar
new file mode 100644
index 0000000000..bd71593189
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-toplink.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-web.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-web.jar
new file mode 100644
index 0000000000..f87e1088ec
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-web.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-webmvc.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-webmvc.jar
new file mode 100644
index 0000000000..4df634bde3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/modules/spring-webmvc.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-aop-2.0.xsd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-aop-2.0.xsd
new file mode 100644
index 0000000000..2d565e6c59
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-aop-2.0.xsd
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans-2.0.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans-2.0.dtd
new file mode 100644
index 0000000000..dcff01888f
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans-2.0.dtd
@@ -0,0 +1,677 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans-2.0.xsd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans-2.0.xsd
new file mode 100644
index 0000000000..f1a367c1c8
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans-2.0.xsd
@@ -0,0 +1,1077 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /' element.
+ ]]>
+
+
+
+
+
+
+
+
+
+ /' element.
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+ /' element.
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /' element.
+ ]]>
+
+
+
+
+ /' element.
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ element (or "ref"
+ attribute). We recommend this in most cases as it makes documentation
+ more explicit.
+
+ 2. "byName"
+ Autowiring by property name. If a bean of class Cat exposes a dog
+ property, Spring will try to set this to the value of the bean "dog"
+ in the current container. If there is no matching bean by name, nothing
+ special happens; use dependency-check="objects" to raise an error in
+ that case.
+
+ 3. "byType"
+ Autowiring if there is exactly one bean of the property type in the
+ container. If there is more than one, a fatal error is raised, and
+ you cannot use byType autowiring for that bean. If there is none,
+ nothing special happens; use dependency-check="objects" to raise an
+ error in that case.
+
+ 4. "constructor"
+ Analogous to "byType" for constructor arguments. If there is not exactly
+ one bean of the constructor argument type in the bean factory, a fatal
+ error is raised.
+
+ 5. "autodetect"
+ Chooses "constructor" or "byType" through introspection of the bean
+ class. If a default constructor is found, "byType" gets applied.
+
+ Note that explicit dependencies, i.e. "property" and "constructor-arg"
+ elements, always override autowiring. Autowire behavior can be combined
+ with dependency checking, which will be performed after all autowiring
+ has been completed.
+
+ Note: This attribute will not be inherited by child bean definitions.
+ Hence, it needs to be specified per concrete bean definition.
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ " element.
+ ]]>
+
+
+
+
+ ..."
+ element.
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ".
+ ]]>
+
+
+
+
+ ..."
+ element.
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ".
+ ]]>
+
+
+
+
+ ..."
+ element.
+ ]]>
+
+
+
+
+ ".
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans.dtd
new file mode 100644
index 0000000000..0b45134255
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-beans.dtd
@@ -0,0 +1,606 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-form.tld b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-form.tld
new file mode 100644
index 0000000000..264223cd10
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-form.tld
@@ -0,0 +1,1865 @@
+
+
+
+
+
+ 1.0
+
+ 1.2
+
+ form
+
+ http://www.springframework.org/tags/form
+
+ Spring Framework JSP Form Tag Library. Author: Rob Harrop
+
+
+
+ form
+ org.springframework.web.servlet.tags.form.FormTag
+ JSP
+ Renders an HTML 'form' tag and exposes a binding path to inner tags for binding.
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ name
+ false
+ true
+ HTML Standard Attribute - added for backwards compatibility cases
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+
+ commandName
+ false
+ true
+ Name of the attribute under which the command name is exposed.
+ Defaults to 'command'.
+
+
+
+ action
+ false
+ true
+ HTML Required Attribute
+
+
+
+ method
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ enctype
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ onsubmit
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onreset
+ false
+ true
+ HTML Event Attribute
+
+
+
+
+
+ input
+ org.springframework.web.servlet.tags.form.InputTag
+ empty
+ Renders an HTML 'input' tag with type 'text' using the bound value.
+
+
+ path
+ true
+ true
+ Path to property for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssErrorClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ readonly
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ disabled
+ false
+ true
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onfocus
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onblur
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onchange
+ false
+ true
+ HTML Event Attribute
+
+
+
+ accesskey
+ false
+ true
+ HTML Standard Attribute
+
+
+
+
+ maxlength
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ alt
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ onselect
+ false
+ true
+ HTML Event Attribute
+
+
+
+ size
+ false
+ true
+ HTML Optional Attribute
+
+
+
+
+
+
+ password
+ org.springframework.web.servlet.tags.form.PasswordInputTag
+ empty
+ Renders an HTML 'input' tag with type 'password' using the bound value.
+
+
+ path
+ true
+ true
+ Path to property for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssErrorClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ readonly
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ disabled
+ false
+ true
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onfocus
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onblur
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onchange
+ false
+ true
+ HTML Event Attribute
+
+
+
+ accesskey
+ false
+ true
+ HTML Standard Attribute
+
+
+
+
+ maxlength
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ alt
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ onselect
+ false
+ true
+ HTML Event Attribute
+
+
+
+ size
+ false
+ true
+ HTML Optional Attribute
+
+
+
+
+
+ hidden
+ org.springframework.web.servlet.tags.form.HiddenInputTag
+ empty
+ Renders an HTML 'input' tag with type 'hidden' using the bound value.
+
+
+ path
+ true
+ true
+ Path to property for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+
+
+
+ select
+ org.springframework.web.servlet.tags.form.SelectTag
+ JSP
+ Renders an HTML 'select' element. Supports databinding to the selected option.
+
+
+ path
+ true
+ true
+ Path to property for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssErrorClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ disabled
+ false
+ true
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onfocus
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onblur
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onchange
+ false
+ true
+ HTML Event Attribute
+
+
+
+ accesskey
+ false
+ true
+ HTML Standard Attribute
+
+
+
+
+ items
+ false
+ true
+ The Collection, Map or array of objects used to generate the inner 'option' tags
+
+
+
+ itemValue
+ false
+ true
+ Name of the property mapped to 'value' attribute of the 'option' tag
+
+
+
+ itemLabel
+ false
+ true
+ Name of the property mapped to the inner text of the 'option' tag
+
+
+
+ size
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ multiple
+ false
+ true
+ HTML Optional Attribute
+
+
+
+
+
+ option
+ org.springframework.web.servlet.tags.form.OptionTag
+ JSP
+ Renders a single HTML 'option'. Sets 'selected' as appropriate based on bound value.
+
+
+ value
+ java.lang.Object
+ The actual value bound to the 'value' attribute
+
+
+
+ displayValue
+ java.lang.String
+ The String representation of thr value bound to the 'value' attribute, taking into consideration
+ any PropertyEditor associated with the enclosing 'select' tag.
+
+
+
+ value
+ true
+ true
+ HTML Optional Attribute
+
+
+
+ label
+ false
+ true
+ HTML Optional Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ disabled
+ false
+ true
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+
+
+
+
+
+ options
+ org.springframework.web.servlet.tags.form.OptionsTag
+ empty
+ Renders a list of HTML 'option' tags. Sets 'selected' as appropriate based on bound
+ value.
+
+
+ items
+ true
+ true
+ The Collection, Map or array of objects used to generate the inner 'option' tags
+
+
+
+ itemValue
+ false
+ true
+ Name of the property mapped to 'value' attribute of the 'option' tag
+
+
+
+ itemLabel
+ false
+ true
+ Name of the property mapped to the inner text of the 'option' tag
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+
+
+ radiobutton
+ org.springframework.web.servlet.tags.form.RadioButtonTag
+ empty
+ Renders an HTML 'input' tag with type 'radio'.
+
+
+ path
+ true
+ true
+ Path to property for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssErrorClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ disabled
+ false
+ true
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onfocus
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onblur
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onchange
+ false
+ true
+ HTML Event Attribute
+
+
+
+ accesskey
+ false
+ true
+ HTML Standard Attribute
+
+
+
+
+ value
+ false
+ true
+ HTML Optional Attribute
+
+
+
+
+
+ checkbox
+ org.springframework.web.servlet.tags.form.CheckboxTag
+ empty
+ Renders an HTML 'input' tag with type 'checkbox'.
+
+
+ path
+ true
+ true
+ Path to property for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssErrorClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ disabled
+ false
+ true
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onfocus
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onblur
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onchange
+ false
+ true
+ HTML Event Attribute
+
+
+
+ accesskey
+ false
+ true
+ HTML Standard Attribute
+
+
+
+
+ value
+ false
+ true
+ HTML Optional Attribute
+
+
+
+
+
+ textarea
+ org.springframework.web.servlet.tags.form.TextareaTag
+ empty
+ Renders an HTML 'textarea'.
+
+
+ path
+ true
+ true
+ Path to property for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssErrorClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ disabled
+ false
+ true
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onfocus
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onblur
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onchange
+ false
+ true
+ HTML Event Attribute
+
+
+
+ accesskey
+ false
+ true
+ HTML Standard Attribute
+
+
+
+
+ rows
+ false
+ true
+ HTML Required Attribute
+
+
+
+ cols
+ false
+ true
+ HTML Required Attribute
+
+
+
+ onselect
+ false
+ true
+ HTML Event Attribute
+
+
+
+
+
+
+ errors
+ org.springframework.web.servlet.tags.form.ErrorsTag
+ JSP
+ Renders field errors in an HTML 'span' tag.
+
+
+ messages
+ java.util.List
+
+
+
+ path
+ false
+ true
+ Path to errors object for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ delimiter
+ false
+ true
+ Delimiter for displaying multiple error messages. Defaults to the br tag.
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+
+
+
+ label
+ org.springframework.web.servlet.tags.form.LabelTag
+ JSP
+ Renders a form field label in an HTML 'label' tag.
+
+
+ path
+ true
+ true
+ Path to errors object for data binding
+
+
+
+ id
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ htmlEscape
+ false
+ true
+ Enable/disable HTML escaping of rendered values.
+
+
+
+ for
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ cssClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute.
+
+
+
+ cssErrorClass
+ false
+ true
+ Equivalent to "class" - HTML Optional Attribute. Used only when errors are present.
+
+
+
+ cssStyle
+ false
+ true
+ Equivalent to "style" - HTML Optional Attribute
+
+
+
+ lang
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ title
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ dir
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ tabindex
+ false
+ true
+ HTML Standard Attribute
+
+
+
+ onclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ ondblclick
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousedown
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseover
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmousemove
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onmouseout
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeypress
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeyup
+ false
+ true
+ HTML Event Attribute
+
+
+
+ onkeydown
+ false
+ true
+ HTML Event Attribute
+
+
+
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-jee-2.0.xsd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-jee-2.0.xsd
new file mode 100644
index 0000000000..a4db8dd205
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-jee-2.0.xsd
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-lang-2.0.xsd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-lang-2.0.xsd
new file mode 100644
index 0000000000..c39c83a003
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-lang-2.0.xsd
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-tool-2.0.xsd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-tool-2.0.xsd
new file mode 100644
index 0000000000..b00e189b76
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-tool-2.0.xsd
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Indicates that an annotated types exports an application visible component.
+
+
+
+
+
+ The type of the exported component. May be null if the type is not known until runtime.
+
+
+
+
+
+
+ Defines an XPath query that can be executed against the node annotated with this
+ type to determine the identifier of any exported component.
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-tx-2.0.xsd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-tx-2.0.xsd
new file mode 100644
index 0000000000..5a579e3af0
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-tx-2.0.xsd
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-util-2.0.xsd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-util-2.0.xsd
new file mode 100644
index 0000000000..5286094494
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring-util-2.0.xsd
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+ Reference a public, static field on a type and expose its value as
+ a bean. For example <util:constant static-field="java.lang.Integer.MAX_VALUE"/>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reference a property on a bean (or as a nested value) and expose its values as
+ a bean. For example <util:property-path path="order.customer.name"/>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Loads a Properties instance from the resource location specified by the 'location' attribute.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.ftl b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.ftl
new file mode 100644
index 0000000000..45511de5e8
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.ftl
@@ -0,0 +1,319 @@
+<#ftl strip_whitespace=true>
+<#--
+ * spring.ftl
+ *
+ * This file consists of a collection of FreeMarker macros aimed at easing
+ * some of the common requirements of web applications - in particular
+ * handling of forms.
+ *
+ * Spring's FreeMarker support will automatically make this file and therefore
+ * all macros within it available to any application using Spring's
+ * FreeMarkerConfigurer.
+ *
+ * To take advantage of these macros, the "exposeSpringMacroHelpers" property
+ * of the FreeMarker class needs to be set to "true". This will expose a
+ * RequestContext under the name "springMacroRequestContext", as needed by
+ * the macros in this library.
+ *
+ * @author Darren Davison
+ * @author Juergen Hoeller
+ * @since 1.1
+ -->
+
+<#--
+ * message
+ *
+ * Macro to translate a message code into a message.
+ -->
+<#macro message code>${springMacroRequestContext.getMessage(code)}#macro>
+
+<#--
+ * messageText
+ *
+ * Macro to translate a message code into a message,
+ * using the given default text if no message found.
+ -->
+<#macro messageText code, text>${springMacroRequestContext.getMessage(code, text)}#macro>
+
+<#--
+ * url
+ *
+ * Takes a relative URL and makes it absolute from the server root by
+ * adding the context root for the web application.
+ -->
+<#macro url relativeUrl>${springMacroRequestContext.getContextPath()}${relativeUrl}#macro>
+
+<#--
+ * bind
+ *
+ * Exposes a BindStatus object for the given bind path, which can be
+ * a bean (e.g. "person") to get global errors, or a bean property
+ * (e.g. "person.name") to get field errors. Can be called multiple times
+ * within a form to bind to multiple command objects and/or field names.
+ *
+ * This macro will participate in the default HTML escape setting for the given
+ * RequestContext. This can be customized by calling "setDefaultHtmlEscape"
+ * on the "springMacroRequestContext" context variable, or via the
+ * "defaultHtmlEscape" context-param in web.xml (same as for the JSP bind tag).
+ * Also regards a "htmlEscape" variable in the namespace of this library.
+ *
+ * Producing no output, the following context variable will be available
+ * each time this macro is referenced (assuming you import this library in
+ * your templates with the namespace 'spring'):
+ *
+ * spring.status : a BindStatus instance holding the command object name,
+ * expression, value, and error messages and codes for the path supplied
+ *
+ * @param path : the path (string value) of the value required to bind to.
+ * Spring defaults to a command name of "command" but this can be overridden
+ * by user config.
+ -->
+<#macro bind path>
+ <#if htmlEscape?exists>
+ <#assign status = springMacroRequestContext.getBindStatus(path, htmlEscape)>
+ <#else>
+ <#assign status = springMacroRequestContext.getBindStatus(path)>
+ #if>
+ <#-- assign a temporary value, forcing a string representation for any
+ kind of variable. This temp value is only used in this macro lib -->
+ <#if status.value?exists && status.value?is_boolean>
+ <#assign stringStatusValue=status.value?string>
+ <#else>
+ <#assign stringStatusValue=status.value?default("")>
+ #if>
+#macro>
+
+<#--
+ * bindEscaped
+ *
+ * Similar to spring:bind, but takes an explicit HTML escape flag rather
+ * than relying on the default HTML escape setting.
+ -->
+<#macro bindEscaped path, htmlEscape>
+ <#assign status = springMacroRequestContext.getBindStatus(path, htmlEscape)>
+ <#-- assign a temporary value, forcing a string representation for any
+ kind of variable. This temp value is only used in this macro lib -->
+ <#if status.value?exists && status.value?is_boolean>
+ <#assign stringStatusValue=status.value?string>
+ <#else>
+ <#assign stringStatusValue=status.value?default("")>
+ #if>
+#macro>
+
+<#--
+ * formInput
+ *
+ * Display a form input field of type 'text' and bind it to an attribute
+ * of a command or bean.
+ *
+ * @param path the name of the field to bind to
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+ -->
+<#macro formInput path attributes="" fieldType="text" >
+ <@bind path/>
+ ${stringStatusValue}#if>" ${attributes}
+ <@closeTag/>
+#macro>
+
+<#--
+ * formPasswordInput
+ *
+ * Display a form input field of type 'password' and bind it to an attribute
+ * of a command or bean. No value will ever be displayed. This functionality
+ * can also be obtained by calling the formInput macro with a 'type' parameter
+ * of 'password'
+ *
+ * @param path the name of the field to bind to
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+ -->
+<#macro formPasswordInput path attributes="" >
+ <@formInput path, attributes, "password"/>
+#macro>
+
+<#--
+ * formHiddenInput
+ *
+ * Generate a form input field of type 'hidden' and bind it to an attribute
+ * of a command or bean. This functionality can also be obtained by calling
+ * the formInput macro with a 'type' parameter of 'hidden'
+ *
+ * @param path the name of the field to bind to
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+ -->
+<#macro formHiddenInput path attributes="" >
+ <@formInput path, attributes, "hidden"/>
+#macro>
+
+<#--
+ * formTextarea
+ *
+ * Display a text area and bind it to an attribute of a command or bean.
+ *
+ * @param path the name of the field to bind to
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+ -->
+<#macro formTextarea path attributes="" >
+ <@bind path/>
+
+#macro>
+
+<#--
+ * formSingleSelect
+ *
+ * Show a selectbox (dropdown) input element allowing a single value to be chosen
+ * from a list of options.
+ *
+ * @param path the name of the field to bind to
+ * @param options a map (value=label) of all the available options
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+-->
+<#macro formSingleSelect path options attributes="">
+ <@bind path/>
+
+#macro>
+
+<#--
+ * formMultiSelect
+ *
+ * Show a listbox of options allowing the user to make 0 or more choices from
+ * the list of options.
+ *
+ * @param path the name of the field to bind to
+ * @param options a map (value=label) of all the available options
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+-->
+<#macro formMultiSelect path options attributes="">
+ <@bind path/>
+
+#macro>
+
+<#--
+ * formRadioButtons
+ *
+ * Show radio buttons.
+ *
+ * @param path the name of the field to bind to
+ * @param options a map (value=label) of all the available options
+ * @param separator the html tag or other character list that should be used to
+ * separate each option. Typically ' ' or ' '
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+-->
+<#macro formRadioButtons path options separator attributes="">
+ <@bind path/>
+ <#list options?keys as value>
+ <#assign id="${status.expression}${value_index}">
+ checked="checked"#if> ${attributes}
+ <@closeTag/>
+ ${separator}
+ #list>
+#macro>
+
+<#--
+ * formCheckboxes
+ *
+ * Show checkboxes.
+ *
+ * @param path the name of the field to bind to
+ * @param options a map (value=label) of all the available options
+ * @param separator the html tag or other character list that should be used to
+ * separate each option. Typically ' ' or ' '
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+-->
+<#macro formCheckboxes path options separator attributes="">
+ <@bind path/>
+ <#list options?keys as value>
+ <#assign id="${status.expression}${value_index}">
+ <#assign isSelected = contains(status.value?default([""]), value)>
+ checked="checked"#if> ${attributes}
+ <@closeTag/>
+ ${separator}
+ #list>
+#macro>
+
+<#--
+ * showErrors
+ *
+ * Show validation errors for the currently bound field, with
+ * optional style attributes.
+ *
+ * @param separator the html tag or other character list that should be used to
+ * separate each option. Typically ' '.
+ * @param classOrStyle either the name of a CSS class element (which is defined in
+ * the template or an external CSS file) or an inline style. If the value passed in here
+ * contains a colon (:) then a 'style=' attribute will be used, else a 'class=' attribute
+ * will be used.
+-->
+<#macro showErrors separator classOrStyle="">
+ <#list status.errorMessages as error>
+ <#if classOrStyle == "">
+ ${error}
+ <#else>
+ <#if classOrStyle?index_of(":") == -1><#assign attr="class"><#else><#assign attr="style">#if>
+ ${error}
+ #if>
+ <#if error_has_next>${separator}#if>
+ #list>
+#macro>
+
+<#--
+ * checkSelected
+ *
+ * Check a value in a list to see if it is the currently selected value.
+ * If so, add the 'selected="selected"' text to the output.
+ * Handles values of numeric and string types.
+ * This function is used internally but can be accessed by user code if required.
+ *
+ * @param value the current value in a list iteration
+-->
+<#macro checkSelected value>
+ <#if stringStatusValue?is_number && stringStatusValue == value?number>selected="selected"#if>
+ <#if stringStatusValue?is_string && stringStatusValue == value>selected="selected"#if>
+#macro>
+
+<#--
+ * contains
+ *
+ * Macro to return true if the list contains the scalar, false if not.
+ * Surprisingly not a FreeMarker builtin.
+ * This function is used internally but can be accessed by user code if required.
+ *
+ * @param list the list to search for the item
+ * @param item the item to search for in the list
+ * @return true if item is found in the list, false otherwise
+-->
+<#function contains list item>
+ <#list list as nextInList>
+ <#if nextInList == item><#return true>#if>
+ #list>
+ <#return false>
+#function>
+
+<#--
+ * closeTag
+ *
+ * Simple macro to close an HTML tag that has no body with '>' or '/>',
+ * depending on the value of a 'xhtmlCompliant' variable in the namespace
+ * of this library.
+-->
+<#macro closeTag>
+ <#if xhtmlCompliant?exists && xhtmlCompliant>/><#else>>#if>
+#macro>
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.tld b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.tld
new file mode 100644
index 0000000000..092a6ad7b6
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.tld
@@ -0,0 +1,372 @@
+
+
+
+
+ 1.1.2
+ 1.2
+ Spring
+ http://www.springframework.org/tags
+ Spring Framework JSP Tag Library. Authors: Rod Johnson, Juergen Hoeller
+
+
+ htmlEscape
+ org.springframework.web.servlet.tags.HtmlEscapeTag
+ JSP
+
+ Sets default HTML escape value for the current page.
+ Overrides a "defaultHtmlEscape" context-param in web.xml, if any.
+
+
+ defaultHtmlEscape
+ true
+ true
+ Set the default value for HTML escaping, to be put
+ into the current PageContext.
+
+
+
+
+ escapeBody
+ org.springframework.web.servlet.tags.EscapeBodyTag
+ JSP
+
+ Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+ htmlEscape
+ false
+ true
+ Set HTML escaping for this tag, as boolean value. Overrides the
+ default HTML escaping setting for the current page.
+
+
+ javaScriptEscape
+ false
+ true
+ Set JavaScript escaping for this tag, as boolean value.
+ Default is false.
+
+
+
+
+ message
+ org.springframework.web.servlet.tags.MessageTag
+ JSP
+
+
+ Retrieves the message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ message
+ false
+ true
+ A MessageSourceResolvable argument (direct or through JSP EL).
+ Fits nicely when used in conjunction with Spring's own validation error
+ classes which all implement the MessageSourceResolvable interface. For
+ example, this allows you to iterate over all of the errors in a form,
+ passing each error (using a runtime expression) as the value of this
+ 'message' attribute, thus effecting the easy display of such error
+ messages.
+
+
+
+ code
+ false
+ true
+ The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.
+
+
+
+ arguments
+ false
+ true
+ Set optional message arguments for this tag, as a
+ (comma-)delimited String (each String argument can contain JSP EL),
+ an Object array (used as argument array), or a single Object (used
+ as single argument).
+
+
+
+ argumentSeparator
+ false
+ true
+ The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').
+
+
+
+ text
+ false
+ true
+ Default text to output when a message for the given code
+ could not be found. If both text and code are not set, the tag will
+ output null.
+
+
+
+ var
+ false
+ true
+ The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result
+ gets outputted to the writer (i.e. typically directly to the JSP).
+
+
+
+ scope
+ false
+ true
+ The scope to use when exporting the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.
+
+
+
+ htmlEscape
+ false
+ true
+ Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.
+
+
+
+ javaScriptEscape
+ false
+ true
+ Set JavaScript escaping for this tag, as boolean value. Default is false.
+
+
+
+
+
+ theme
+ org.springframework.web.servlet.tags.ThemeTag
+ JSP
+
+
+ Retrieves the theme message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ message
+ false
+ true
+ A MessageSourceResolvable argument (direct or through JSP EL).
+
+
+
+ code
+ false
+ true
+ The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.
+
+
+
+ arguments
+ false
+ true
+ Set optional message arguments for this tag, as a
+ (comma-)delimited String (each String argument can contain JSP EL),
+ an Object array (used as argument array), or a single Object (used
+ as single argument).
+
+
+
+ argumentSeparator
+ false
+ true
+ The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').
+
+
+
+ text
+ false
+ true
+ Default text to output when a message for the given code
+ could not be found. If both text and code are not set, the tag will
+ output null.
+
+
+
+ var
+ false
+ true
+ The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result
+ gets outputted to the writer (i.e. typically directly to the JSP).
+
+
+
+ scope
+ false
+ true
+ The scope to use when exporting the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.
+
+
+
+ htmlEscape
+ false
+ true
+ Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.
+
+
+
+ javaScriptEscape
+ false
+ true
+ Set JavaScript escaping for this tag, as boolean value. Default is false.
+
+
+
+
+
+ hasBindErrors
+ org.springframework.web.servlet.tags.BindErrorsTag
+ JSP
+
+ Provides Errors instance in case of bind errors.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+ errors
+ org.springframework.validation.Errors
+
+
+ name
+ true
+ true
+ The name of the bean in the request, that needs to be
+ inspected for errors. If errors are available for this bean, they
+ will be bound under the 'errors' key.
+
+
+ htmlEscape
+ false
+ true
+ Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.
+
+
+
+
+ nestedPath
+ org.springframework.web.servlet.tags.NestedPathTag
+ JSP
+
+ Sets a nested path to be used by the bind tag's path.
+
+
+ nestedPath
+ java.lang.String
+
+
+ path
+ true
+ true
+ Set the path that this tag should apply. E.g. 'customer'
+ to allow bind paths like 'address.street' rather than
+ 'customer.address.street'.
+
+
+
+
+ bind
+ org.springframework.web.servlet.tags.BindTag
+ JSP
+
+ Provides BindStatus object for the given bind path.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+ status
+ org.springframework.web.servlet.support.BindStatus
+
+
+ path
+ true
+ true
+ The path to the bean or bean property to bind status
+ information for. For instance account.name, company.address.zipCode
+ or just employee. The status object will exported to the page scope,
+ specifically for this bean or bean property
+
+
+ ignoreNestedPath
+ false
+ true
+ Set whether to ignore a nested path, if any. Default is to not ignore.
+
+
+ htmlEscape
+ false
+ true
+ Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.
+
+
+
+
+ transform
+ org.springframework.web.servlet.tags.TransformTag
+ JSP
+
+
+ Provides transformation of variables to Strings, using an appropriate
+ custom PropertyEditor from BindTag (can only be used inside BindTag).
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a 'defaultHtmlEscape' context-param in web.xml).
+
+
+
+ value
+ true
+ true
+ The value to transform. This is the actual object you want
+ to have transformed (for instance a Date). Using the PropertyEditor that
+ is currently in use by the 'spring:bind' tag.
+
+
+
+ var
+ false
+ true
+ The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result gets
+ outputted to the writer (i.e. typically directly to the JSP).
+
+
+
+ scope
+ false
+ true
+ The scope to use when exported the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.
+
+
+
+ htmlEscape
+ false
+ true
+ Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.vm b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.vm
new file mode 100644
index 0000000000..7bc7a847d7
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/resources/spring.vm
@@ -0,0 +1,297 @@
+#**
+ * spring.vm
+ *
+ * This file consists of a collection of Velocity macros aimed at easing
+ * some of the common requirements of web applications - in particular
+ * handling of forms.
+ *
+ * Spring's Velocity support will automatically make this file and therefore
+ * all macros within it available to any application using Spring's
+ * VelocityConfigurer.
+ *
+ * To take advantage of these macros, the "exposeSpringMacroHelpers" property
+ * of the VelocityView class needs to be set to "true". This will expose a
+ * RequestContext under the name "springMacroRequestContext", as needed by
+ * the macros in this library.
+ *
+ * @author Darren Davison
+ * @author Juergen Hoeller
+ * @since 1.1
+ *#
+
+#**
+ * springMessage
+ *
+ * Macro to translate a message code into a message.
+ *#
+#macro( springMessage $code )$springMacroRequestContext.getMessage($code)#end
+
+#**
+ * springMessageText
+ *
+ * Macro to translate a message code into a message,
+ * using the given default text if no message found.
+ *#
+#macro( springMessageText $code $text )$springMacroRequestContext.getMessage($code, $text)#end
+
+#**
+ * springUrl
+ *
+ * Takes a relative URL and makes it absolute from the server root by
+ * adding the context root for the web application.
+ *#
+#macro( springUrl $relativeUrl )$springMacroRequestContext.getContextPath()${relativeUrl}#end
+
+#**
+ * springBind
+ *
+ * Exposes a BindStatus object for the given bind path, which can be
+ * a bean (e.g. "person") to get global errors, or a bean property
+ * (e.g. "person.name") to get field errors. Can be called multiple times
+ * within a form to bind to multiple command objects and/or field names.
+ *
+ * This macro will participate in the default HTML escape setting for the given
+ * RequestContext. This can be customized by calling "setDefaultHtmlEscape"
+ * on the "springMacroRequestContext" context variable, or via the
+ * "defaultHtmlEscape" context-param in web.xml (same as for the JSP bind tag).
+ * Also regards a "springHtmlEscape" variable in the template context.
+ *
+ * Producing no output, the following context variable will be available
+ * each time this macro is referenced:
+ *
+ * $status : a BindStatus instance holding the command object name,
+ * expression, value, and error codes and messages for the path supplied
+ *
+ * @param $path : the path (string value) of the value required to bind to.
+ * Spring defaults to a command name of "command" but this can be overridden
+ * by user config.
+ *#
+#macro( springBind $path )
+ #if("$!springHtmlEscape" != "")
+ #set( $status = $springMacroRequestContext.getBindStatus($path, $springHtmlEscape) )
+ #else
+ #set( $status = $springMacroRequestContext.getBindStatus($path) )
+ #end
+#end
+
+#**
+ * springBindEscaped
+ *
+ * Similar to springBind, but takes an explicit HTML escape flag rather
+ * than relying on the default HTML escape setting.
+ *#
+#macro( springBindEscaped $path $htmlEscape )
+ #set( $status = $springMacroRequestContext.getBindStatus($path, $htmlEscape) )
+#end
+
+#**
+ * springFormInput
+ *
+ * Display a form input field of type 'text' and bind it to an attribute
+ * of a command or bean.
+ *
+ * @param path the name of the field to bind to
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+ *
+ *#
+#macro( springFormInput $path $attributes )
+ #springBind($path)
+ $!status.value
+#end
+
+#**
+ * springFormSingleSelect
+ *
+ * Show a selectbox (dropdown) input element allowing a single value to be chosen
+ * from a list of options.
+ *
+ * The null check for $status.value leverages Velocity's 'quiet' notation rather
+ * than the more common #if($status.value) since this method evaluates to the
+ * boolean 'false' if the content of $status.value is the String "false" - not
+ * what we want.
+ *
+ * @param path the name of the field to bind to
+ * @param options a map (value=label) of all the available options
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+*#
+#macro( springFormSingleSelect $path $options $attributes )
+ #springBind($path)
+
+#end
+
+#**
+ * springFormMultiSelect
+ *
+ * Show a listbox of options allowing the user to make 0 or more choices from
+ * the list of options.
+ *
+ * @param path the name of the field to bind to
+ * @param options a map (value=label) of all the available options
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+*#
+#macro( springFormMultiSelect $path $options $attributes )
+ #springBind($path)
+
+#end
+
+#**
+ * springFormRadioButtons
+ *
+ * Show radio buttons.
+ *
+ * @param path the name of the field to bind to
+ * @param options a map (value=label) of all the available options
+ * @param separator the html tag or other character list that should be used to
+ * separate each option. Typically ' ' or ' '
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+*#
+#macro( springFormRadioButtons $path $options $separator $attributes )
+ #springBind($path)
+ #foreach($option in $options.keySet())
+ '
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+*#
+#macro( springFormCheckboxes $path $options $separator $attributes )
+ #springBind($path)
+ #foreach($option in $options.keySet())
+ '.
+ * @param classOrStyle either the name of a CSS class element (which is defined in
+ * the template or an external CSS file) or an inline style. If the value passed in here
+ * contains a colon (:) then a 'style=' attribute will be used, else a 'class=' attribute
+ * will be used.
+*#
+#macro( springShowErrors $separator $classOrStyle )
+ #foreach($error in $status.errorMessages)
+ #if($classOrStyle == "")
+ ${error}
+ #else
+ #if($classOrStyle.indexOf(":") == -1)
+ #set($attr="class")
+ #else
+ #set($attr="style")
+ #end
+ ${error}
+ #end
+ ${separator}
+ #end
+#end
+
+#**
+ * springCloseTag
+ *
+ * Simple macro to close an HTML tag that has no body with '>' or '/>',
+ * depending on the value of a 'springXhtmlCompliant' variable in the
+ * template context.
+ *#
+#macro( springCloseTag )#if($springXhtmlCompliant)/>#else>#end #end
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-aspects.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-aspects.jar
new file mode 100644
index 0000000000..d1824ddbfa
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-aspects.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-mock.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-mock.jar
new file mode 100644
index 0000000000..22b85fd7a3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-mock.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-src.zip b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-src.zip
new file mode 100644
index 0000000000..bd42ff6f6f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring-src.zip differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring.jar
new file mode 100644
index 0000000000..477af648ab
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/spring.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/weavers/spring-agent.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/weavers/spring-agent.jar
new file mode 100644
index 0000000000..c3d8939d3c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/weavers/spring-agent.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/weavers/spring-tomcat-weaver.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/weavers/spring-tomcat-weaver.jar
new file mode 100644
index 0000000000..96aa25b7c3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/dist/weavers/spring-tomcat-weaver.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-junit.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-junit.jar
new file mode 100644
index 0000000000..5ee4f7ff32
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-junit.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-launcher.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-launcher.jar
new file mode 100644
index 0000000000..1a7161251d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-launcher.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-trax.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-trax.jar
new file mode 100644
index 0000000000..f4e15406dc
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant-trax.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant.jar
new file mode 100644
index 0000000000..3beb3b802f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ant/ant.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/antlr/antlr-2.7.6.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/antlr/antlr-2.7.6.jar
new file mode 100644
index 0000000000..3702b645fc
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/antlr/antlr-2.7.6.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aopalliance/aopalliance.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aopalliance/aopalliance.jar
new file mode 100644
index 0000000000..578b1a0c35
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aopalliance/aopalliance.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-2.2.2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-2.2.2.jar
new file mode 100644
index 0000000000..fa779c263a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-2.2.2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-commons-2.2.2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-commons-2.2.2.jar
new file mode 100644
index 0000000000..e301a44e00
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-commons-2.2.2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-util-2.2.2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-util-2.2.2.jar
new file mode 100644
index 0000000000..b40d2f7b40
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/asm/asm-util-2.2.2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aspectj/aspectjrt.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aspectj/aspectjrt.jar
new file mode 100644
index 0000000000..4077a4708f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aspectj/aspectjrt.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aspectj/aspectjweaver.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aspectj/aspectjweaver.jar
new file mode 100644
index 0000000000..6b88eefd3b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/aspectj/aspectjweaver.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/axis.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/axis.jar
new file mode 100644
index 0000000000..2b8aba563a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/axis.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/saaj.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/saaj.jar
new file mode 100644
index 0000000000..dd240639fd
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/saaj.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/wsdl4j.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/wsdl4j.jar
new file mode 100644
index 0000000000..c6254ee696
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/axis/wsdl4j.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/bsh/bsh-2.0b4.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/bsh/bsh-2.0b4.jar
new file mode 100644
index 0000000000..36fe03d71c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/bsh/bsh-2.0b4.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/c3p0/c3p0-0.9.0.4.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/c3p0/c3p0-0.9.0.4.jar
new file mode 100644
index 0000000000..79a8009a7a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/c3p0/c3p0-0.9.0.4.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/caucho/hessian-3.0.20.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/caucho/hessian-3.0.20.jar
new file mode 100644
index 0000000000..f39b5413ca
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/caucho/hessian-3.0.20.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/cglib/cglib-nodep-2.1_3.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/cglib/cglib-nodep-2.1_3.jar
new file mode 100644
index 0000000000..e9b17ebf12
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/cglib/cglib-nodep-2.1_3.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/commonj/commonj-twm.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/commonj/commonj-twm.jar
new file mode 100644
index 0000000000..6155b1fba0
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/commonj/commonj-twm.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/cos/cos.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/cos/cos.jar
new file mode 100644
index 0000000000..6a4a1ff5f6
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/cos/cos.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dom4j/dom4j-1.6.1.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dom4j/dom4j-1.6.1.jar
new file mode 100644
index 0000000000..c8c4dbb92d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dom4j/dom4j-1.6.1.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dom4j/jaxen-1.1-beta-7.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dom4j/jaxen-1.1-beta-7.jar
new file mode 100644
index 0000000000..c773f8566a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dom4j/jaxen-1.1-beta-7.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dwr/dwr.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dwr/dwr.jar
new file mode 100644
index 0000000000..8444d5205b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/dwr/dwr.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/easymock/easymock.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/easymock/easymock.jar
new file mode 100644
index 0000000000..e66afe3522
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/easymock/easymock.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/easymock/easymockclassextension.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/easymock/easymockclassextension.jar
new file mode 100644
index 0000000000..f324f8140b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/easymock/easymockclassextension.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ehcache/ehcache-1.2.3.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ehcache/ehcache-1.2.3.jar
new file mode 100644
index 0000000000..796f1e6994
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ehcache/ehcache-1.2.3.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/freemarker/freemarker.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/freemarker/freemarker.jar
new file mode 100644
index 0000000000..737bfb592e
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/freemarker/freemarker.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/glassfish/glassfish-clapi.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/glassfish/glassfish-clapi.jar
new file mode 100644
index 0000000000..ad693c11f4
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/glassfish/glassfish-clapi.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/groovy/groovy-1.0-jsr-04.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/groovy/groovy-1.0-jsr-04.jar
new file mode 100644
index 0000000000..ac0ec5bcdb
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/groovy/groovy-1.0-jsr-04.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-annotations.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-annotations.jar
new file mode 100644
index 0000000000..d476493da3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-annotations.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-configuration-2.0.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-configuration-2.0.dtd
new file mode 100644
index 0000000000..47f98a0613
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-configuration-2.0.dtd
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-configuration-3.0.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-configuration-3.0.dtd
new file mode 100644
index 0000000000..3f4e0a8211
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-configuration-3.0.dtd
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-entitymanager.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-entitymanager.jar
new file mode 100644
index 0000000000..fd761bb770
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-entitymanager.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-generic.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-generic.dtd
new file mode 100644
index 0000000000..c8a88afdba
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-generic.dtd
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-mapping-2.0.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-mapping-2.0.dtd
new file mode 100644
index 0000000000..4041a0268e
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-mapping-2.0.dtd
@@ -0,0 +1,542 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-mapping-3.0.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-mapping-3.0.dtd
new file mode 100644
index 0000000000..2e64c07180
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate-mapping-3.0.dtd
@@ -0,0 +1,1031 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate2.jar
new file mode 100644
index 0000000000..1be59bfc71
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate3.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate3.jar
new file mode 100644
index 0000000000..b6009726d8
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/hibernate3.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/jboss-archive-browsing.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/jboss-archive-browsing.jar
new file mode 100644
index 0000000000..5af0ec453c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hibernate/jboss-archive-browsing.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hsqldb/hsqldb.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hsqldb/hsqldb.jar
new file mode 100644
index 0000000000..35436d6e5c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/hsqldb/hsqldb.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/ibatis-common-2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/ibatis-common-2.jar
new file mode 100644
index 0000000000..3bb3065d69
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/ibatis-common-2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/ibatis-sqlmap-2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/ibatis-sqlmap-2.jar
new file mode 100644
index 0000000000..9cd876b958
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/ibatis-sqlmap-2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/sql-map-2.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/sql-map-2.dtd
new file mode 100644
index 0000000000..956379cd86
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/sql-map-2.dtd
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/sql-map-config-2.dtd b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/sql-map-config-2.dtd
new file mode 100644
index 0000000000..882aa91587
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/ibatis/sql-map-config-2.dtd
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/itext/itext-1.3.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/itext/itext-1.3.jar
new file mode 100644
index 0000000000..ae613eded3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/itext/itext-1.3.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/activation.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/activation.jar
new file mode 100644
index 0000000000..6f193711e1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/activation.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/connector.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/connector.jar
new file mode 100644
index 0000000000..438c31588d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/connector.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/ejb.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/ejb.jar
new file mode 100644
index 0000000000..cfd4056c71
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/ejb.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jaxrpc.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jaxrpc.jar
new file mode 100644
index 0000000000..fe0b047cb6
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jaxrpc.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jms.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jms.jar
new file mode 100644
index 0000000000..dad227f694
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jms.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jsp-api.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jsp-api.jar
new file mode 100644
index 0000000000..23e79c66f1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jsp-api.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jstl.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jstl.jar
new file mode 100644
index 0000000000..a02abecc8b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jstl.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jta.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jta.jar
new file mode 100644
index 0000000000..705e8c81c4
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/jta.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/mail.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/mail.jar
new file mode 100644
index 0000000000..9d08d0aba0
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/mail.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/mysql.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/mysql.jar
new file mode 100644
index 0000000000..3148a353c3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/mysql.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/rowset.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/rowset.jar
new file mode 100644
index 0000000000..91bca8893a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/rowset.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/servlet-api.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/servlet-api.jar
new file mode 100644
index 0000000000..589aeba5c5
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/j2ee/servlet-api.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-attributes-api.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-attributes-api.jar
new file mode 100644
index 0000000000..7d74dadf12
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-attributes-api.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-attributes-compiler.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-attributes-compiler.jar
new file mode 100644
index 0000000000..a8be62aee2
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-attributes-compiler.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-beanutils.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-beanutils.jar
new file mode 100644
index 0000000000..b1b89c9c92
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-beanutils.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-codec.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-codec.jar
new file mode 100644
index 0000000000..957b6752af
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-codec.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-collections.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-collections.jar
new file mode 100644
index 0000000000..75580be255
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-collections.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-dbcp.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-dbcp.jar
new file mode 100644
index 0000000000..08440c02e5
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-dbcp.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-digester.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-digester.jar
new file mode 100644
index 0000000000..9765493306
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-digester.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-discovery.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-discovery.jar
new file mode 100644
index 0000000000..b88554847b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-discovery.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-fileupload.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-fileupload.jar
new file mode 100644
index 0000000000..fc5763d0d3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-fileupload.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-httpclient.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-httpclient.jar
new file mode 100644
index 0000000000..cfc777c71d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-httpclient.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-io.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-io.jar
new file mode 100644
index 0000000000..624fc1a724
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-io.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-javaflow.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-javaflow.jar
new file mode 100644
index 0000000000..6f8e8db4ec
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-javaflow.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-lang.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-lang.jar
new file mode 100644
index 0000000000..b9105611f3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-lang.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-logging.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-logging.jar
new file mode 100644
index 0000000000..2ff9bbd90d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-logging.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-pool.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-pool.jar
new file mode 100644
index 0000000000..e8de3275c5
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-pool.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-validator.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-validator.jar
new file mode 100644
index 0000000000..bf76e86c29
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-commons/commons-validator.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-taglibs/standard.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-taglibs/standard.jar
new file mode 100644
index 0000000000..bc528acb94
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jakarta-taglibs/standard.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jamon/JAMon.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jamon/JAMon.jar
new file mode 100644
index 0000000000..09b7813268
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jamon/JAMon.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jasperreports/jasperreports-1.2.8.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jasperreports/jasperreports-1.2.8.jar
new file mode 100644
index 0000000000..38df59b5dc
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jasperreports/jasperreports-1.2.8.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jdo/jdo2-api.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jdo/jdo2-api.jar
new file mode 100644
index 0000000000..7efdcc8f00
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jdo/jdo2-api.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jdo/jdo2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jdo/jdo2.jar
new file mode 100644
index 0000000000..7b3a80a9f1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jdo/jdo2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jexcelapi/jxl.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jexcelapi/jxl.jar
new file mode 100644
index 0000000000..fc1a5a55ed
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jexcelapi/jxl.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/activemq-core-4.1.1.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/activemq-core-4.1.1.jar
new file mode 100644
index 0000000000..f003304b9c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/activemq-core-4.1.1.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/backport-util-concurrent-2.1.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/backport-util-concurrent-2.1.jar
new file mode 100644
index 0000000000..96ab68922d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/backport-util-concurrent-2.1.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/geronimo-j2ee-management_1.0_spec-1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/geronimo-j2ee-management_1.0_spec-1.0.jar
new file mode 100644
index 0000000000..155e8f6d5f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/geronimo-j2ee-management_1.0_spec-1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/geronimo-jms_1.1_spec-1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/geronimo-jms_1.1_spec-1.0.jar
new file mode 100644
index 0000000000..42bf403e28
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jms/geronimo-jms_1.1_spec-1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxremote.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxremote.jar
new file mode 100644
index 0000000000..1a52b7117a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxremote.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxremote_optional.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxremote_optional.jar
new file mode 100644
index 0000000000..43bf351695
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxremote_optional.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxri.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxri.jar
new file mode 100644
index 0000000000..71428a6e1c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jmx/jmxri.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/jodconverter-2.2.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/jodconverter-2.2.0.jar
new file mode 100644
index 0000000000..f0fb516d05
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/jodconverter-2.2.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/slf4j-api-1.4.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/slf4j-api-1.4.0.jar
new file mode 100644
index 0000000000..9ce2532aa4
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/slf4j-api-1.4.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/slf4j-jdk14-1.4.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/slf4j-jdk14-1.4.0.jar
new file mode 100644
index 0000000000..579c9f60ce
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jodconverter/slf4j-jdk14-1.4.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jotm/jotm.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jotm/jotm.jar
new file mode 100644
index 0000000000..fc677a7731
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jotm/jotm.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jotm/xapool.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jotm/xapool.jar
new file mode 100644
index 0000000000..747cee977b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jotm/xapool.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jpa/persistence.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jpa/persistence.jar
new file mode 100644
index 0000000000..318069bd06
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jpa/persistence.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jruby/jruby.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jruby/jruby.jar
new file mode 100644
index 0000000000..9dc258645b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jruby/jruby.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jsf/jsf-api.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jsf/jsf-api.jar
new file mode 100644
index 0000000000..5396f23b0d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/jsf/jsf-api.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/junit/junit.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/junit/junit.jar
new file mode 100644
index 0000000000..674d71e89e
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/junit/junit.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/log4j/log4j-1.2.14.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/log4j/log4j-1.2.14.jar
new file mode 100644
index 0000000000..6251307190
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/log4j/log4j-1.2.14.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/oc4j/oc4j-clapi.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/oc4j/oc4j-clapi.jar
new file mode 100644
index 0000000000..7a2c9f0df1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/oc4j/oc4j-clapi.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openjpa/openjpa-all-0.9.6-incubating.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openjpa/openjpa-all-0.9.6-incubating.jar
new file mode 100644
index 0000000000..c95a9c60e6
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openjpa/openjpa-all-0.9.6-incubating.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/juh-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/juh-2.1.0.jar
new file mode 100644
index 0000000000..4fe4fb46f3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/juh-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/jurt-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/jurt-2.1.0.jar
new file mode 100644
index 0000000000..4f3169e97b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/jurt-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/ridl-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/ridl-2.1.0.jar
new file mode 100644
index 0000000000..e07cca09d1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/ridl-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/unoil-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/unoil-2.1.0.jar
new file mode 100644
index 0000000000..df18fbbd46
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/openoffice/unoil-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/oro/jakarta-oro-2.0.8.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/oro/jakarta-oro-2.0.8.jar
new file mode 100644
index 0000000000..23488d2600
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/oro/jakarta-oro-2.0.8.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/poi/poi-2.5.1.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/poi/poi-2.5.1.jar
new file mode 100644
index 0000000000..149b801b8d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/poi/poi-2.5.1.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/portlet/portlet-api.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/portlet/portlet-api.jar
new file mode 100644
index 0000000000..7a80c30c53
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/portlet/portlet-api.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/qdox/qdox-1.5.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/qdox/qdox-1.5.jar
new file mode 100644
index 0000000000..7ef9a8a2d9
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/qdox/qdox-1.5.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/quartz/quartz-1.6.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/quartz/quartz-1.6.0.jar
new file mode 100644
index 0000000000..fb653ccc03
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/quartz/quartz-1.6.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/readme.txt b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/readme.txt
new file mode 100644
index 0000000000..210ec1f3e1
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/readme.txt
@@ -0,0 +1,388 @@
+The following libraries are included in the Spring Framework distribution because they are
+required either for building the framework or for running the sample apps. Note that each
+of these libraries is subject to the respective license; check the respective project
+distribution/website before using any of them in your own applications.
+
+* ant/ant.jar, ant/ant-launcher.jar, ant-trax.jar, ant-junit.jar
+- Ant 1.6.5 (http://ant.apache.org)
+- used to build the framework and the sample apps
+
+* antlr/antlr-2.7.6.jar
+- ANTLR 2.7.6 (http://www.antlr.org)
+- required for running PetClinic (by Hibernate3)
+
+* aopalliance/aopalliance.jar
+- AOP Alliance 1.0 (http://aopalliance.sourceforge.net)
+- required for building the framework
+- included in spring.jar and spring-aop.jar
+
+* asm/asm*-2.2.2.jar
+- ObjectWeb ASM 2.2.2 (http://asm.objectweb.org)
+- required for building the framework
+- required at runtime when using parameter name discovery with AspectJ
+
+* aspectj/aspectjweaver.jar, aspectj/aspectjrt.jar, (aspectj/aspectjtools.jar)
+- AspectJ 1.5.2a (http://www.aspectj.org)
+- required for building the framework
+- required at runtime when using Spring's AspectJ support
+
+NOTE: aspectjtools.jar is not included in the Spring distribution because of its size.
+It needs to be taken from the AspectJ distribution or from Spring CVS. Note that this
+is only necessary if you want to rebuild the Spring jars including the AspectJ aspects.
+
+* axis/axis.jar, axis/saaj.jar, axis/wsdl4j.jar
+- Apache Axis 1.3 (http://ws.apache.org/axis)
+- required for running JPetStore
+
+* bsh/bsh-2.0b4.jar
+- BeanShell 2.0 beta 4 (http://www.beanshell.org)
+- required for building the framework
+- required at runtime when using Spring's BeanShell support
+
+* c3p0/c3p0-0.9.0.4.jar
+- C3P0 0.9.0.4 connection pool (http://sourceforge.net/projects/c3p0)
+- required for building the framework
+- required at runtime when using Spring's C3P0NativeJdbcExtractor
+- required for running Image Database
+
+* caucho/hessian-3.0.20.jar
+- Hessian/Burlap 3.0.20 (http://www.caucho.com/hessian)
+- required for building the framework
+- required at runtime when using Spring's Hessian/Burlap remoting support
+
+* cglib/cglib-nodep-2.1_3.jar
+- CGLIB 2.1_3 with ObjectWeb ASM 1.5.3 (http://cglib.sourceforge.net)
+- required for building the framework
+- required at runtime when proxying full target classes via Spring AOP
+
+* commonj/commonj-twm.jar
+- CommonJ TimerManager and WorkManager API 1.1 (http://dev2dev.bea.com/wlplatform/commonj/twm.html)
+- required for building the framework
+- required at runtime when using Spring's CommonJ support
+
+* cos/cos.jar
+- Jason Hunter's COS 05Nov02 (http://www.servlets.com/cos)
+- required for building the framework
+- required at runtime when using Spring's CosMultipartResolver or CosMailSender
+
+* dom4j/dom4j-1.6.1, dom4j/jaxen-1.1-beta-7.jar
+- DOM4J 1.6.1 XML parser (http://www.dom4j.org)
+- required for running PetClinic (by Hibernate)
+
+* easymock/easymock.jar, easymock/easymockclassextension.jar
+- EasyMock 1.2 (JDK 1.3 version) (http://www.easymock.org)
+- required for building and running the framework test suite
+
+* ehcache/ehcache-1.2.3.jar
+- EHCache 1.2.3 (http://ehcache.sourceforge.net)
+- required for building the framework
+- required at runtime when using Spring's EHCache support
+- required for running PetClinic (by Hibernate)
+
+* freemarker/freemarker.jar
+- FreeMarker 2.3.8 (http://www.freemarker.org)
+- required for building the framework
+- required at runtime when using Spring's FreeMarker support
+
+* glassfish/glassfish-clapi.jar
+- GlassFish ClassLoader API extract (http://glassfish.dev.java.net)
+- required for building the framework
+
+* groovy/groovy-1.0-jsr-04.jar
+- Groovy 1.0 JSR-04 (http://groovy.codehaus.org)
+- required for building the framework
+- required at runtime when using Spring's Groovy support
+
+* hibernate/hibernate2.jar
+- Hibernate 2.1.8 (http://www.hibernate.org)
+- required for building the framework
+- required at runtime when using Spring's Hibernate 2.1 support
+
+* hibernate/hibernate3.jar
+- Hibernate 3.2.1 (http://www.hibernate.org)
+- required for building the framework
+- required at runtime when using Spring's Hibernate 3.x support
+
+* hibernate/hibernate-annotation.jar
+- Hibernate Annotations 3.2.0 (http://www.hibernate.org)
+- required for building the "tiger" part of the framework
+- required at runtime when using Spring's Hibernate Annotations support
+
+* hibernate/hibernate-entitymanager.jar
+- Hibernate EntityManager 3.2.0 (http://www.hibernate.org)
+- required for building the "tiger" part of the framework
+- required at runtime when using Spring's Hibernate-specific JPA support
+
+* hsqldb/hsqldb.jar
+- HSQLDB 1.8.0.1 (http://hsqldb.sourceforge.net)
+- required for running JPetStore and PetClinic
+
+* ibatis/ibatis-sqlmap-2.jar, ibatis/ibatis-common-2.jar
+- iBATIS SQL Maps 2.2.0 b638 (http://ibatis.apache.org)
+- required for building the framework
+- required at runtime when using Spring's iBATIS SQL Maps 2.x support
+
+* itext/itext-1.3.jar
+- iText PDF 1.3 (http://www.lowagie.com/itext)
+- required for building the framework
+- required at runtime when using Spring's AbstractPdfView
+
+* j2ee/activation.jar
+- JavaBeans Activation Framework 1.0.2 (http://java.sun.com/products/javabeans/glasgow/jaf.html)
+- required for building the framework
+- required at runtime when using Spring's JavaMailSender
+
+* j2ee/connector.jar
+- J2EE Connector Architecture 1.0 (http://java.sun.com/j2ee/connector)
+- required at runtime when using Hibernate's JCA Connector
+
+* j2ee/ejb.jar
+- Enterprise JavaBeans API 2.0 (http://java.sun.com/products/ejb)
+- required for building the framework
+- required at runtime when using Spring's EJB support
+
+* j2ee/jaxrpc.jar
+- JAX-RPC API 1.1 (http://java.sun.com/xml/jaxrpc)
+- required for building the framework
+- required at runtime when using Spring's JAX-RPC support
+
+* j2ee/jms.jar
+- Java Message Service API 1.1 (java.sun.com/products/jms)
+- required for building the framework
+- required at runtime when using Spring's JMS support
+
+* j2ee/jsp-api.jar
+- JSP API 2.0 (http://java.sun.com/products/jsp)
+- required for building the framework
+- required at runtime when using Spring's JSP support
+
+* j2ee/jstl.jar
+- JSP Standard Tag Library API 1.1 (http://java.sun.com/products/jstl)
+- required for building the framework
+- required at runtime when using Spring's JstlView
+
+* j2ee/jta.jar
+- Java Transaction API 1.0.1b (http://java.sun.com/products/jta)
+- required for building the framework
+- required at runtime when using Spring's JtaTransactionManager
+
+* j2ee/mail.jar
+- JavaMail 1.3.2 (http://java.sun.com/products/javamail)
+- required for building the framework
+- required at runtime when using Spring's JavaMailSender
+
+* j2ee/rowset.jar
+- JDBC RowSet Implementations 1.0.1 (http://java.sun.com/products/jdbc)
+- required for building the framework on JDK < 1.5
+- required at runtime when using Spring's RowSet support on JDK < 1.5
+
+* j2ee/servlet-api.jar
+- Servlet API 2.4 (http://java.sun.com/products/servlet)
+- required for building the framework
+- required at runtime when using Spring's web support
+
+* jakarta-commons/commons-attributes-api.jar, jakarta-commons/commons-attributes-compiler.jar
+- Commons Attributes 2.2 (http://jakarta.apache.org/commons/attributes)
+- commons-attributes-api.jar has a patched manifest (not declaring QDox and Ant as required extensions)
+- required for building the framework
+- required at runtime when using Spring's Commons Attributes support
+
+* jakarta-commons/commons-beanutils.jar
+- Commons BeanUtils 1.7 (http://jakarta.apache.org/commons/beanutils)
+- required for running JPetStore's Struts web tier
+
+* jakarta-commons/commons-collections.jar
+- Commons Collections 3.2 (http://jakarta.apache.org/commons/collections)
+- required for building the framework
+- optional for using linked/identity maps in Spring core (on JDK < 1.4)
+- required for running PetClinic, JPetStore (by Commons DBCP, Hibernate)
+
+* jakarta-commons/commons-dbcp.jar
+- Commons DBCP 1.2.1 (http://jakarta.apache.org/commons/dbcp)
+- required for building the framework
+- required at runtime when using Spring's CommonsDbcpNativeJdbcExtractor
+- required for running JPetStore
+
+* jakarta-commons/commons-digester.jar
+- Commons Digester 1.6 (http://jakarta.apache.org/commons/digester)
+- required for running JPetStore's Struts web tier
+
+* jakarta-commons/commons-discovery.jar
+- Commons Discovery 0.2 (http://jakarta.apache.org/commons/discovery)
+- required for running JPetStore (by Axis)
+
+* jakarta-commons/commons-fileupload.jar
+- Commons FileUpload 1.1.1 (http://jakarta.apache.org/commons/fileupload)
+- required for building the framework
+- required at runtime when using Spring's CommonsMultipartResolver
+
+* jakarta-commons/commons-httpclient.jar
+- Commons HttpClient 3.0.1 (http://jakarta.apache.org/commons/httpclient)
+- required for building the framework
+- required at runtime when using Spring's CommonsHttpInvokerRequestExecutor
+
+* jakarta-commons/commons-io.jar
+- Commons IO 1.1 (http://jakarta.apache.org/commons/io)
+- required at runtime when using Spring's CommonsMultipartResolver (by Commons FileUpload)
+
+* jakarta-commons/commons-javaflow.jar
+- Commons JavaFlow 20060411 (taken from JasperReports 1.2.5 distribution)
+- required at runtime when using Spring's JasperReports support (by JasperReports)
+
+* jakarta-commons/commons-lang.jar
+- Commons Lang 2.2 (http://jakarta.apache.org/commons/lang)
+- required at runtime when using Spring's OpenJPA support (by OpenJPA)
+
+* jakarta-commons/commons-logging.jar
+- Commons Logging 1.1 (http://jakarta.apache.org/commons/logging)
+- required for building the framework
+- required at runtime, as Spring uses it for all logging
+
+* jakarta-commons/commons-pool.jar
+- Commons Pool 1.3 (http://jakarta.apache.org/commons/pool)
+- required for running JPetStore and Image Database (by Commons DBCP)
+
+* jakarta-commons/commons-validator.jar
+- Commons Validator 1.1.4 (http://jakarta.apache.org/commons/validator)
+- required for running JPetStore's Struts web tier on servers that eagerly load tag libraries (e.g. Resin)
+
+* jakarta-taglibs/standard.jar
+- Jakarta's JSTL implementation 1.1.2 (http://jakarta.apache.org/taglibs)
+- required for running JPetStore, PetClinic, Countries
+
+* jamon/JAMon.jar
+- JAMon API (Java Application Monitor) 1.0 (http://www.jamonapi.com)
+- required for building the framework
+- required at runtime when using Spring's JamonPerformanceMonitorInterceptor
+
+* jasperreports/jasperreports-1.2.8.jar
+- JasperReports 1.2.8 (http://jasperreports.sourceforge.net)
+- required for building the framework
+- required at runtime when using Spring's JasperReports support
+
+* jdo/jdo2-api.jar
+- JDO API 2.0 (http://db.apache.org/jdo)
+- required for building the framework
+- required at runtime when using Spring's JDO support (or jdo.jar for JDO 1.0)
+
+* jexcelapi/jxl.jar
+- JExcelApi 2.5.7 (http://jexcelapi.sourceforge.net)
+- required for building the framework
+- required at runtime when using Spring's AbstractJExcelView
+
+* jmx/jmxri.jar
+- JMX 1.2.1 reference implementation
+- required for building the framework on JDK < 1.5
+- required at runtime when using Spring's JMX support on JDK < 1.5
+
+* jmx/jmxremote.jar
+- JMX Remote API 1.0.1 reference implementation
+- required for building the framework on JDK < 1.5
+- required at runtime when using Spring's JMX support on JDK < 1.5
+
+* jmx/jmxremote_optional.jar
+- JMXMP connector (from JMX Remote API 1.0.1 reference implementation)
+- required for running the framework test suite (even on JDK 1.5)
+- required at runtime when using the JMXMP connector (even on JDK 1.5)
+
+* jotm/jotm.jar
+- JOTM 2.0.10 (http://jotm.objectweb.org)
+- required for building the framework
+- required at runtime when using Spring's JotmFactoryBean
+
+* jotm/xapool.jar
+- XAPool 1.5.0 (http://xapool.experlog.com, also included in JOTM)
+- required for building the framework
+- required at runtime when using Spring's XAPoolNativeJdbcExtractor
+
+* jpa/persistence.jar
+- Java Persistence API 1.0 (http://www.oracle.com/technology/products/ias/toplink/jpa)
+- required for building the framework
+- required at runtime when using Spring's JPA support
+
+* jruby/jruby.jar
+- JRuby 0.9.1 (http://jruby.sourceforge.net)
+- required for building the framework
+- required at runtime when using Spring's JRuby support
+
+* jsf/jsf-api.jar
+- JSF API 1.1 (http://java.sun.com/j2ee/javaserverfaces)
+- required for building the framework
+- required at runtime when using Spring's JSF support
+
+* junit/junit.jar
+- JUnit 3.8.1 (http://www.junit.org)
+- required for building the test suite
+
+* log4j/log4j-1.2.14.jar
+- Log4J 1.2.14 (http://logging.apache.org/log4j)
+- required for building the framework
+- required at runtime when using Spring's Log4jConfigurer
+
+* oc4j/oc4j-clapi.jar
+- Oracle OC4J 10.1.3.1 ClassLoader API extract (http://www.oracle.com/technology/tech/java/oc4j)
+- required for building the framework
+
+* openjpa/openjpa-all-0.9.6-incubating.jar
+- OpenJPA 0.9.6 Nov 20 snapshot (http://incubator.apache.org/openjpa)
+- required for building the framework
+- required at runtime when using Spring's JPA support with OpenJPA as provider
+
+* oro/jakarta-oro-2.0.8.jar
+- Jakarta ORO 2.0.8 (http://jakarta.apache.org/oro)
+- required for building the framework
+- required at runtime when using Spring's RegexpMethodPointcut
+
+* poi/poi-2.5.1.jar
+- Apache POI 2.5.1 (http://jakarta.apache.org/poi)
+- required for building the framework
+- required at runtime when using Spring's AbstractExcelView
+
+* portlet/portlet-api.jar
+- Portlet API 1.0 (http://jcp.org/aboutJava/communityprocess/final/jsr168)
+- required for building the framework
+- required at runtime when using Spring's Portlet support
+
+* qdox/qdox-1.5.jar
+- QDox 1.5 (http://qdox.codehaus.org)
+- used by Commons Attributes 2.2 to parse source-level metadata in the build process
+- required for building the framework and the attributes version of JPetStore
+
+* quartz/quartz-1.6.0.jar
+- Quartz 1.6.0 (http://www.opensymphony.com/quartz)
+- required for building the framework
+- required at runtime when using Spring's Quartz scheduling support
+
+* serp/serp-1.12.1.jar
+- Serp 1.12.1 (http://http://serp.sourceforge.net)
+- required at runtime when using Spring's OpenJPA support (by OpenJPA)
+
+* struts/struts.jar
+- Apache Struts 1.2.9 (http://jakarta.apache.org/struts)
+- required for building the framework
+- required at runtime when using the Struts support or TilesView
+- required for running JPetStore's Struts web tier
+
+* tomcat/catalina.jar
+- Apache Tomcat 5.5.17 (http://tomcat.apache.org)
+- required for building the Tomcat-specific weaver
+
+* toplink/toplink-api.jar
+- Oracle TopLink 10.1.3 API (http://www.oracle.com/technology/products/ias/toplink)
+- required for building the framework
+- replaced with full toplink.jar at runtime when using Spring's TopLink support
+
+* toplink/toplink-essentials.jar
+- Oracle TopLink Essentials v2 b16 (http://www.oracle.com/technology/products/ias/toplink/jpa)
+- required for building the framework
+- required at runtime when using Spring's JPA support with TopLink as provider
+
+* velocity/velocity-1.4.jar
+- Velocity 1.4 (http://jakarta.apache.org/velocity)
+- required for building the framework
+- required at runtime when using Spring's VelocityView
+
+* velocity/velocity-tools-generic-1.2.jar, velocity/velocity-tools-view-1.2.jar
+- Velocity Tools 1.2 (http://jakarta.apache.org/velocity/tools)
+- required for building the framework
+- required at runtime when using VelocityView's support for Velocity Tools
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/serp/serp-1.12.1.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/serp/serp-1.12.1.jar
new file mode 100644
index 0000000000..b3ee37f2a6
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/serp/serp-1.12.1.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/struts/struts.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/struts/struts.jar
new file mode 100644
index 0000000000..7815901f34
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/struts/struts.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/tomcat/catalina.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/tomcat/catalina.jar
new file mode 100644
index 0000000000..a6f6357f20
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/tomcat/catalina.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/tomcat/naming-resources.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/tomcat/naming-resources.jar
new file mode 100644
index 0000000000..55329e91d4
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/tomcat/naming-resources.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/toplink/toplink-api.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/toplink/toplink-api.jar
new file mode 100644
index 0000000000..2b867ffea3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/toplink/toplink-api.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/toplink/toplink-essentials.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/toplink/toplink-essentials.jar
new file mode 100644
index 0000000000..cb2953f54c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/toplink/toplink-essentials.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-1.4.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-1.4.jar
new file mode 100644
index 0000000000..04ec9d2f85
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-1.4.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-tools-generic-1.2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-tools-generic-1.2.jar
new file mode 100644
index 0000000000..addc2479eb
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-tools-generic-1.2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-tools-view-1.2.jar b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-tools-view-1.2.jar
new file mode 100644
index 0000000000..ec95805ec1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/spring/lib/velocity/velocity-tools-view-1.2.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/ISlideDatabase.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/ISlideDatabase.java
new file mode 100644
index 0000000000..7823366cb3
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/ISlideDatabase.java
@@ -0,0 +1,110 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * The Interface ISlideDatabase.
+ *
+ * @author ritzalam
+ */
+public interface ISlideDatabase {
+
+ /**
+ * Gets the slides for room.
+ *
+ * @param room the room
+ *
+ * @return the slides for room
+ */
+ public List getSlidesForRoom(Integer room);
+
+ /**
+ * Gets the thumbnails for room.
+ *
+ * @param room the room
+ *
+ * @return the thumbnails for room
+ */
+ public List getThumbnailsForRoom(Integer room);
+
+ /**
+ * Save uploaded file.
+ *
+ * @param multipartFile the multipart file
+ * @param room the room
+ *
+ * @return the file
+ *
+ * @throws IOException Signals that an I/O exception has occurred.
+ */
+ public File saveUploadedFile(MultipartFile multipartFile, Integer room) throws IOException;
+
+ /**
+ * Stream image.
+ *
+ * @param room the room
+ * @param name the name
+ * @param os the os
+ */
+ public void streamImage(Integer room, String name, OutputStream os);
+
+ /**
+ * Gets the xml.
+ *
+ * @param room the room
+ * @param name the name
+ * @param os the os
+ *
+ * @return the xml
+ */
+ public void getXml(Integer room, String name, OutputStream os);
+
+ /**
+ * Gets the slides in xml.
+ *
+ * @param room the room
+ *
+ * @return the slides in xml
+ */
+ public String getSlidesInXml(Integer room);
+
+ /**
+ * Creates the default xml.
+ *
+ * @param room the room
+ */
+ public void createDefaultXml(Integer room);
+
+ /**
+ * Clear database.
+ */
+ public void clearDatabase();
+}
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/SlideDescriptor.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/SlideDescriptor.java
new file mode 100644
index 0000000000..f7b4159458
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/SlideDescriptor.java
@@ -0,0 +1,69 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+
+package org.bigbluebutton.fileupload;
+import org.springframework.util.Assert;
+
+
+/**
+ * Entity class used to create instances that describe slides: name and conference room ID.
+ *
+ * @author ritzalam
+ */
+public class SlideDescriptor {
+
+ // name of the slide
+ /** The name. */
+ private final String name;
+ // conference room ID
+ /** The room. */
+ private final Integer room;
+
+ /**
+ * Instantiates a new slide descriptor.
+ *
+ * @param name the name
+ * @param room the room
+ */
+ public SlideDescriptor(String name, Integer room) {
+ Assert.notNull(name, "No image name specified");
+ this.name = name;
+ this.room = room;
+ }
+
+ /**
+ * getter for slide name.
+ *
+ * @return name of the slide
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * getter for conference room ID.
+ *
+ * @return conference room ID
+ */
+ public Integer getRoom() {
+ return room;
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/BaseException.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/BaseException.java
new file mode 100644
index 0000000000..53f451dcd2
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/BaseException.java
@@ -0,0 +1,161 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document;
+// TODO: Auto-generated Javadoc
+
+/**
+ * Exception class used in servlet classes, which inherits java.lang.Exception
+ *
+ * @author ritzalam
+ */
+
+public class BaseException extends java.lang.Exception
+{
+
+ /** The Constant serialVersionUID. */
+ private static final long serialVersionUID = 3608396488252900444L;
+
+ /** The message. */
+ private String message = "";
+
+ /** The exception. */
+ private Exception exception = null;
+
+ /**
+ * Instantiates a new base exception.
+ */
+ public BaseException()
+ {
+ super();
+ }
+
+ /**
+ * Instantiates a new base exception.
+ *
+ * @param message the message
+ */
+ public BaseException(String message)
+ {
+ super();
+ this.message = message;
+ this.exception = null;
+ }
+
+ /**
+ * Instantiates a new base exception.
+ *
+ * @param e the e
+ */
+ public BaseException(Exception e)
+ {
+ super();
+ this.message = this.getClass().getName();
+ this.exception = e;
+ }
+
+ /**
+ * Instantiates a new base exception.
+ *
+ * @param message the message
+ * @param e the e
+ */
+ public BaseException(String message, Exception e)
+ {
+ super();
+ this.message = message;
+ this.exception = e;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Throwable#getMessage()
+ */
+ public String getMessage()
+ {
+ if ( ( (message == null) || (message.length() == 0)) && exception != null)
+ {
+ return exception.getMessage();
+ }
+ else
+ {
+ return this.message;
+ }
+ }
+
+ /**
+ * Gets the exception.
+ *
+ * @return the exception
+ */
+ public Exception getException()
+ {
+ return exception;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Throwable#toString()
+ */
+ public String toString()
+ {
+ return getMessage();
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Throwable#printStackTrace()
+ */
+ public void printStackTrace()
+ {
+ super.printStackTrace();
+ if (exception != null)
+ {
+ System.err.println();
+ System.err.println("Embedded exception:");
+ exception.printStackTrace();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Throwable#printStackTrace(java.io.PrintStream)
+ */
+ public void printStackTrace(java.io.PrintStream s)
+ {
+ super.printStackTrace(s);
+ if (exception != null)
+ {
+ s.println();
+ s.println("Embedded exception:");
+ exception.printStackTrace(s);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Throwable#printStackTrace(java.io.PrintWriter)
+ */
+ public void printStackTrace(java.io.PrintWriter s)
+ {
+ super.printStackTrace(s);
+ if (exception != null)
+ {
+ s.println();
+ s.println("Embedded exception:");
+ exception.printStackTrace(s);
+ }
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/IProgressListener.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/IProgressListener.java
new file mode 100644
index 0000000000..95aeaf07ff
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/IProgressListener.java
@@ -0,0 +1,37 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document;
+// TODO: Auto-generated Javadoc
+
+/**
+ * The Interface IProgressListener.
+ *
+ * @author ritzalam
+ */
+public interface IProgressListener {
+
+ /**
+ * Update.
+ *
+ * @param message the message
+ */
+ public void update(String message);
+}
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/ISlideManager.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/ISlideManager.java
new file mode 100644
index 0000000000..40f1f61209
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/ISlideManager.java
@@ -0,0 +1,85 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.bigbluebutton.fileupload.SlideDescriptor;
+import org.springframework.web.multipart.MultipartFile;
+// TODO: Auto-generated Javadoc
+
+/**
+ * The Interface ISlideManager.
+ *
+ * @author ritzalam
+ */
+public interface ISlideManager {
+
+ /**
+ * Gets the images.
+ *
+ * @param sourceFolder the source folder
+ *
+ * @return the images
+ */
+ public List getImages(String sourceFolder);
+
+ /**
+ * Save image.
+ *
+ * @param file the file
+ *
+ * @throws IOException Signals that an I/O exception has occurred.
+ */
+ public void saveImage(File file) throws IOException;
+
+ /**
+ * Save image.
+ *
+ * @param multipartFile the multipart file
+ *
+ * @throws IOException Signals that an I/O exception has occurred.
+ */
+ public void saveImage(MultipartFile multipartFile) throws IOException;
+
+ /**
+ * Save file.
+ *
+ * @param stream the stream
+ * @param dir the dir
+ * @param filename the filename
+ *
+ * @throws IOException Signals that an I/O exception has occurred.
+ */
+ public void saveFile(InputStream stream, String dir, String filename) throws IOException;
+
+ /**
+ * Stream image.
+ *
+ * @param name the name
+ * @param os the os
+ */
+ public void streamImage(String name, OutputStream os);
+}
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/LogProgressListener.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/LogProgressListener.java
new file mode 100644
index 0000000000..6d698c77ab
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/LogProgressListener.java
@@ -0,0 +1,45 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+// TODO: Auto-generated Javadoc
+/**
+ * This class is used for logging in blindside-servlet. Provides a compact way for other classes to log.
+ *
+ * @author ritzalam
+ */
+public class LogProgressListener implements IProgressListener {
+ // get the current log for LogProgressListener class
+ /** The log. */
+ private static Log log = LogFactory.getLog(LogProgressListener.class);
+
+ /* (non-Javadoc)
+ * @see org.bigbluebuttonproject.fileupload.document.IProgressListener#update(java.lang.String)
+ */
+ public void update(String message) {
+ log.info(message);
+ }
+
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/NullProgressListener.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/NullProgressListener.java
new file mode 100644
index 0000000000..d6b5ea36ac
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/NullProgressListener.java
@@ -0,0 +1,41 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document;
+
+import org.bigbluebutton.fileupload.document.IProgressListener;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class NullProgressListener.
+ *
+ * @author ritzalam
+ */
+public class NullProgressListener implements IProgressListener {
+
+ /* (non-Javadoc)
+ * @see org.bigbluebuttonproject.fileupload.document.IProgressListener#update(java.lang.String)
+ */
+ public void update(String message) {
+ // do nothing
+ }
+
+}
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/UnsupportedPresentationDocumentException.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/UnsupportedPresentationDocumentException.java
new file mode 100644
index 0000000000..c2291fd6e9
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/UnsupportedPresentationDocumentException.java
@@ -0,0 +1,75 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document;
+
+import org.bigbluebutton.fileupload.document.BaseException;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Exception class used when unsupported presentation file format error occurs.
+ *
+ * @author ritzalam
+ */
+public class UnsupportedPresentationDocumentException extends BaseException {
+
+ /** The Constant serialVersionUID. */
+ private static final long serialVersionUID = 610367372614072528L;
+
+ /**
+ * Instantiates a new unsupported presentation document exception.
+ */
+ public UnsupportedPresentationDocumentException()
+ {
+ super();
+ }
+
+ /**
+ * Instantiates a new unsupported presentation document exception.
+ *
+ * @param message the message
+ */
+ public UnsupportedPresentationDocumentException(String message)
+ {
+ super(message);
+ }
+
+ /**
+ * Instantiates a new unsupported presentation document exception.
+ *
+ * @param e the e
+ */
+ public UnsupportedPresentationDocumentException(Exception e)
+ {
+ super(e);
+ }
+
+ /**
+ * Instantiates a new unsupported presentation document exception.
+ *
+ * @param message the message
+ * @param e the e
+ */
+ public UnsupportedPresentationDocumentException(String message, Exception e)
+ {
+ super(message, e);
+ }
+}
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/ZipDocumentHandler.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/ZipDocumentHandler.java
new file mode 100644
index 0000000000..8daca9072d
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/ZipDocumentHandler.java
@@ -0,0 +1,119 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+// TODO: Auto-generated Javadoc
+/**
+ * Methods of this class are used to extract uploaded slides in zip format. Zip files can only have following file formats: JPG, PNG or GIF.
+ * Other formats in the zip file are ignored (not extracted).
+ *
+ * @author ritzalam
+ */
+public class ZipDocumentHandler {
+
+ // logging error when extracting (during exception)
+ /** The log. */
+ private static Log log = LogFactory.getLog(ZipDocumentHandler.class);
+
+
+ /**
+ * This method is called from convert(File fileInput, File destDir),
+ * to write the contents of InputStream given to OutputStream given.
+ * This is needed when extracting files from a zip file.
+ *
+ * @param in the in
+ * @param out OutputStream pointing to output file
+ *
+ * @throws IOException Signals that an I/O exception has occurred.
+ */
+ private void copyInputStream(InputStream in, OutputStream out)
+ throws IOException {
+ byte[] buffer = new byte[1024];
+ int len;
+ // copying contents from in to out
+ while ((len = in.read(buffer)) >= 0) {
+ out.write(buffer, 0, len);
+ }
+
+ in.close();
+ out.close();
+ }
+
+ /**
+ * This method extracts the zip file given to the destDir. It uses ZipFile API
+ * to parse through the files in the zip file.
+ * Only files that the zip file can have are .jpg, .png and .gif formats.
+ *
+ * @param fileInput pointing to the zip file
+ * @param destDir directory where extracted files should go
+ */
+ public void convert(File fileInput, File destDir) {
+ try {
+ // Setup the ZipFile used to read entries
+ ZipFile zf = new ZipFile(fileInput.getAbsolutePath());
+
+ // Ensure the extraction directories exist
+// File directoryStructure = new File(destDir);
+ if (!destDir.exists()) {
+ destDir.mkdirs();
+ }
+
+ // Loop through all entries in the zip and extract as necessary
+ ZipEntry currentEntry;
+ for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
+ currentEntry = (ZipEntry) entries.nextElement();
+
+ if (!currentEntry.isDirectory()) {
+ File fileEntry = new File(currentEntry.getName());
+ String fileName = fileEntry.getName().toLowerCase();
+ // Make sure to only deal with image files
+ if ((fileName.endsWith(".jpg")) ||
+ (fileName.endsWith(".png")) ||
+ (fileName.endsWith(".gif"))) {
+ // extracts the corresponding file in dest Directory
+ copyInputStream(zf.getInputStream(currentEntry),
+ new BufferedOutputStream(new FileOutputStream(destDir
+ + File.separator + fileEntry.getName())));
+ }
+ }
+ }
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Could not load zip document for " +
+ fileInput.getName(), e);
+ }
+ }
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/FileSystemSlideManager.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/FileSystemSlideManager.java
new file mode 100644
index 0000000000..264db44777
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/FileSystemSlideManager.java
@@ -0,0 +1,603 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.ImageOutputStream;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.bigbluebutton.fileupload.ISlideDatabase;
+import org.bigbluebutton.fileupload.SlideDescriptor;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * This class is used as the BASE class where client services requests are routed. Service requests: fileUpload, getting Slides for viewing....
+ * The requests are received by FileUploadCintroller class and routed here.
+ *
+ * Some code from jGallery
+ *
+ * @author ritzalam
+ */
+public class FileSystemSlideManager implements ISlideDatabase {
+
+ /** The logger. */
+ private final Log logger = LogFactory.getLog(getClass());
+ // destination directory of the slides
+ /** The base directory. */
+ private String baseDirectory = null;
+
+ /** The extracted folder. */
+ private String extractedFolder = null;
+
+ /** The output xml. */
+ private PrintWriter outputXML = null;
+ // used for generating slides XML
+ /** The Constant HEADER. */
+ private static final String HEADER = "";
+
+ /** The Constant PRESENTATIONS. */
+ private static final String PRESENTATIONS = "";
+
+ /** The Constant PRESENTATIONS_END_TAG. */
+ private static final String PRESENTATIONS_END_TAG = "";
+
+ /** The Constant PRESENTATION. */
+ private static final String PRESENTATION = "";
+
+ /** The Constant PRESENTATION_END_TAG. */
+ private static final String PRESENTATION_END_TAG = "";
+
+ /** The Constant DESCRIPTION. */
+ private static final String DESCRIPTION = "";
+
+ /** The Constant DESCRIPTION_END_TAG. */
+ private static final String DESCRIPTION_END_TAG = "";
+
+ /** The Constant SLIDE. */
+ private static final String SLIDE = "";
+
+ /** The Constant SLIDE_END_TAG. */
+ private static final String SLIDE_END_TAG = "";
+
+ /** The Constant NAME. */
+ private static final String NAME = "";
+
+ /** The Constant NAME_END_TAG. */
+ private static final String NAME_END_TAG = "";
+
+ /** The Constant SOURCE. */
+ private static final String SOURCE = "";
+
+ /** The Constant HOST. */
+ private static final String HOST = "";
+
+ /** The Constant HOST_END_TAG. */
+ private static final String HOST_END_TAG = "";
+
+ /** The Constant ROOM. */
+ private static final String ROOM = "";
+
+ /** The Constant ROOM_END_TAG. */
+ private static final String ROOM_END_TAG = "";
+
+ /** The Constant host. */
+ private static final String host = "http://localhost:8080";
+
+ /**
+ * Setter for destination directory.
+ *
+ * @param dest destination directory
+ */
+ public void setBaseDirectory(String dest) {
+ this.baseDirectory = dest;
+ }
+
+ /**
+ * Setter for extracted folder directory.
+ *
+ * @param extractedFolder the extracted folder
+ */
+ public void setExtractedFolder(String extractedFolder) {
+ this.extractedFolder = extractedFolder;
+ }
+
+ /**
+ * This method create thumbImage of the image file given and save it in outFile.
+ * Compression quality is also given. thumbBounds is used for calculating the size of the thumb.
+ *
+ * @param infile slide image to create thumb
+ * @param outfile output thumb file
+ * @param compressionQuality the compression quality
+ * @param thumbBounds the thumb bounds
+ *
+ * @throws IOException Signals that an I/O exception has occurred.
+ */
+ public void resizeImage(File infile, File outfile, float compressionQuality,
+ int thumbBounds) throws IOException
+ {
+ // Retrieve jpg image to be resized
+ Image image = ImageIO.read(infile);
+
+ // get original image size for thumb size calculation
+ int imageWidth = image.getWidth(null);
+ int imageHeight = image.getHeight(null);
+
+ float thumbRatio = (float) thumbBounds / Math.max(imageWidth, imageHeight);
+
+ int thumbWidth = (int) (imageWidth * thumbRatio);
+ int thumbHeight = (int) (imageHeight * thumbRatio);
+
+ // draw original image to thumbnail image object and
+ // scale it to the new size on-the-fly
+ BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight,
+ BufferedImage.TYPE_INT_RGB);
+ Graphics2D graphics2D = thumbImage.createGraphics();
+ graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
+ RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+ graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
+
+ // Find a jpeg writer
+ ImageWriter writer = null;
+ Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
+ if (iter.hasNext())
+ {
+ writer = (ImageWriter) iter.next();
+ }
+
+ ImageWriteParam iwp = writer.getDefaultWriteParam();
+ iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+ iwp.setCompressionQuality(compressionQuality);
+
+ // Prepare output file
+ ImageOutputStream ios = ImageIO.createImageOutputStream(outfile);
+ writer.setOutput(ios);
+ // write to the thumb image
+ writer.write(thumbImage);
+
+ // Cleanup
+ ios.flush();
+ writer.dispose();
+ ios.close();
+ }
+
+ /**
+ * This method is used to generate SlideDescriptor List slide thumbs of the given conference room.
+ *
+ * @param room conference room ID
+ *
+ * @return List of Slide (thumb) Descriptors of all the slides of the conference room
+ */
+ public List getThumbnailsForRoom(Integer room) {
+ logger.info("getting thumbnails for = [" + room + "]");
+ // pointing to extracted folder directory
+ File file = new File(baseDirectory + File.separator + room + File.separator + extractedFolder);
+
+ // get all the files in the folder
+ File[] files = file.listFiles();
+
+ ArrayList listOfFiles = new ArrayList();
+ // run through the File array
+ for (int i = 0; i < files.length; i++) {
+ if (!files [i].isDirectory()) {
+ String filename = (String)files[i].getName();
+ // get only the files that ends with ".jpg" and starts with "thumb-" in the directory
+ if ((filename.endsWith(".jpg")) && (filename.startsWith("thumb-"))) {
+ logger.info("getting slide = [" + filename + "]");
+ SlideDescriptor slide = new SlideDescriptor(filename, room);
+ listOfFiles.add(slide);
+ }
+ }
+ }
+
+ Collections.sort(listOfFiles, new SlideComparator());
+
+ return listOfFiles;
+ }
+
+ /**
+ * This method returns the ArrayList of slideDescriptors that belongs to the given conference room.
+ *
+ * @param room conference room ID
+ *
+ * @return List of SlideDescriptor
+ */
+ public List getSlidesForRoom(Integer room) {
+ logger.info("getting slides for = [" + room + "]");
+ // pointing to extracted folder directory
+ File file = new File(baseDirectory + File.separator + room + File.separator + extractedFolder);
+ // get all the files in the folder
+ File[] files = file.listFiles();
+
+ ArrayList listOfFiles = new ArrayList();
+
+ for (int i = 0; i < files.length; i++) {
+ if (!files [i].isDirectory()) {
+ String filename = (String)files[i].getName();
+ // get only the files that end with ".jpg" and not start with "thumb-" in the directory
+ if ((filename.endsWith(".swf")) && (! filename.startsWith("thumb-"))){
+ logger.info("getting slide = [" + filename + "]");
+ SlideDescriptor slide = new SlideDescriptor(filename, room);
+ listOfFiles.add(slide);
+ }
+ }
+ }
+
+ Collections.sort(listOfFiles, new SlideComparator());
+
+ return listOfFiles;
+ }
+
+ /**
+ * This method loads the slide .swf files from the source folder and puts it in an ArratList and returns it.
+ *
+ * @param sourceFolder directory of the source
+ *
+ * @return ArrayList of slides
+ */
+ public ArrayList getExtractedSlides(String sourceFolder) {
+ logger.info("Slide folder = " + sourceFolder);
+ // pointing to extracted folder directory
+ File file = new File(sourceFolder);
+ // get all the files in the folder
+ File[] files = file.listFiles();
+ // ArrayList to hold slide swf files
+ ArrayList listOfFiles = new ArrayList();
+
+ for (int i= 0; i < files.length; i++) {
+ if (!files [i].isDirectory()) {
+ String filename = (String)files[i].getName();
+ // get only the files that end with ".swf" and not start with "thumb-" in the directory
+ if ((filename.toLowerCase().endsWith(".swf")) &&
+ !(filename.toLowerCase().startsWith("thumb"))) {
+ listOfFiles.add(files[i]);
+ }
+ }
+ }
+
+ return listOfFiles;
+ }
+
+
+ /**
+ * This method saves the MultipartFile given as parameter( temporary stored file format)
+ * And it also return instance of file which is saved in saveDir.
+ *
+ * @param multipartFile temporary storage of uploaded file
+ * @param room conference room ID
+ *
+ * @return file pointing to the new file stored
+ *
+ * @throws IOException Signals that an I/O exception has occurred.
+ *
+ * @see MultipartFile API
+ */
+ public File saveUploadedFile(MultipartFile multipartFile, Integer room) throws IOException {
+ String filename = multipartFile.getOriginalFilename().replace(' ', '_');
+
+ File saveDir = new File(baseDirectory + File.separator + room);
+
+ if (!saveDir.exists()) {
+ saveDir.mkdirs();
+ }
+
+ File file = new File(saveDir.getAbsolutePath() + File.separator + filename);
+ // store multipartFile in permanent storage
+ multipartFile.transferTo(file);
+
+ return file;
+ }
+
+
+ /**
+ * This method copies the contents of the file (in our case, slides) to the OutputStream given.
+ * OutputStream given to this method (as parameter) is the connection stream to the client.
+ * This tells us that this function streams the slides to the client.
+ *
+ * @param room conference room ID
+ * @param name name of the slide
+ * @param os the os
+ *
+ * @see FileCopyUtils API
+ */
+ public void streamImage(Integer room, String name, OutputStream os) {
+
+ File file = new File(baseDirectory + File.separator + room
+ + File.separator + extractedFolder + File.separator + name);
+
+ InputStream is = null;
+
+ try {
+ is = new FileInputStream(file);
+ } catch (FileNotFoundException e) {
+ logger.error("File not found. \n " + e.getMessage());
+ }
+
+ try {
+ if (is != null) {
+ // streaming the contents(slide) in is to os which points to client connection
+ FileCopyUtils.copy(is, os);
+ }
+ } catch (IOException e) {
+ logger.error("Error reading file.\n" + e.getMessage());
+ }
+ }
+
+ /**
+ * This method basically copies the contents of the file (in our case, slide XML description) to the OutputStream given.
+ * OutputStream given to method (as parameter) is the connection stream to the client.
+ * This tells us that this function streams the slides to the client.
+ *
+ * @param room conference room ID
+ * @param name name of the slide
+ * @param os the os
+ *
+ * @see FileCopyUtils API
+ */
+ public void getXml(Integer room, String name, OutputStream os) {
+ File file = new File(baseDirectory + File.separator + room
+ + File.separator + name);
+
+ InputStream is = null;
+
+ try {
+ is = new FileInputStream(file);
+ } catch (FileNotFoundException e) {
+ logger.error("File not found. \n " + e.getMessage());
+ }
+
+ try {
+ if (is != null) {
+ // streaming the contents (slide XML) in is to os which points to client connection
+ FileCopyUtils.copy(is, os);
+ }
+ } catch (IOException e) {
+ logger.error("Error reading file.\n" + e.getMessage());
+ }
+ }
+
+ /**
+ * This method creates XML formatted string (default slide description of the conference room) that is ready to be sent to the client.
+ *
+ * @param room conference room ID
+ *
+ * @see createXml()
+ */
+ public void createDefaultXml(Integer room) {
+ String slidesXml = HEADER + "\n";
+ slidesXml += PRESENTATIONS + "\n" + "\t" + PRESENTATION + "\n";
+ slidesXml += "\t\t" + DESCRIPTION;
+
+ String description = "Presentation Slides";
+ slidesXml += description + DESCRIPTION_END_TAG + "\n";
+ slidesXml += PRESENTATION_END_TAG + PRESENTATIONS_END_TAG;
+
+ try {
+ outputXML = new PrintWriter(new FileWriter(baseDirectory + File.separator + room
+ + File.separator + "slides.xml"));
+ outputXML.print(slidesXml);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ finally {
+ if (outputXML != null){
+ outputXML.close();
+ }
+ }
+ }
+
+ /**
+ * Gets the slides in xml.
+ *
+ * @param room the room
+ *
+ * @return the slides in xml
+ *
+ * @see createXml()
+ */
+ public String getSlidesInXml(Integer room) {
+ return createXml(room);
+ }
+
+ /**
+ * This method creates XML formatted string (slide description of the conference room) that is ready to be sent to the client.
+ *
+ * @param room conference room ID
+ *
+ * @return slide description XML string
+ */
+ public String createXml(Integer room) {
+ List slides = getSlidesForRoom(room);
+
+ String slidesXml = HEADER + "\n";
+ slidesXml += PRESENTATIONS + "\n" + "\t" + PRESENTATION + "\n";
+ slidesXml += "\t\t" + DESCRIPTION;
+
+ String description = "Presentation Slides";
+ slidesXml += description + DESCRIPTION_END_TAG + "\n";
+ slidesXml += HOST + host + HOST_END_TAG + "\n";
+ slidesXml += ROOM + room + ROOM_END_TAG + "\n";
+
+ logger.info("slidesXml = " + slidesXml);
+
+ for (Iterator it = slides.iterator(); it.hasNext();) {
+ slidesXml += SLIDE + NAME;
+ SlideDescriptor slide = (SlideDescriptor) it.next();
+ slidesXml += slide.getName() + NAME_END_TAG;
+ slidesXml += SLIDE_END_TAG + "\n";
+ }
+
+ slidesXml += PRESENTATION_END_TAG + PRESENTATIONS_END_TAG;
+
+ try {
+ outputXML = new PrintWriter(new FileWriter(baseDirectory + File.separator + room
+ + File.separator + "slides.xml"));
+ outputXML.print(slidesXml);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ finally {
+ if (outputXML != null){
+ outputXML.close();
+ }
+ }
+
+ return slidesXml;
+ }
+
+ /**
+ * TODO Auto-generated method stub.
+ */
+ public void clearDatabase() {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * Getter for destination directory.
+ *
+ * @return dest destination directory
+ */
+ public String getBaseDirectory() {
+ return baseDirectory;
+ }
+
+ /**
+ * Getter for extracted folder directory.
+ *
+ * @return extractedFolder
+ */
+ public String getExtractedFolder() {
+ return extractedFolder;
+ }
+
+ /**
+ * Internal class used to compare two slides and check for differences.
+ */
+ private class SlideComparator implements Comparator {
+
+ /**
+ * Method to perform the actual comparison and sorting of files
+ * This would be called automatically when this comparator is used
+ * by a Collections.sort call
+ *
+ * @param a1 first file to compare
+ * @param a2 second file to compare
+ *
+ * @return 0 if the files are equal, 1 if a1 is above a2, -1 if a2 is above a1
+ */
+ public int compare(Object a1, Object a2) {
+ SlideDescriptor file1 = null;
+ SlideDescriptor file2 = null;
+ if (a1 instanceof SlideDescriptor) {
+ file1 = (SlideDescriptor) a1;
+ }
+ if (a2 instanceof SlideDescriptor) {
+ file2 = (SlideDescriptor) a2;
+ }
+
+ int number1 = 0;
+ int number2 = 0;
+ if (file1 != null) {
+ number1 = getNumberFromFile(file1.getName());
+ }
+ if (file2 != null) {
+ number2 = getNumberFromFile(file2.getName());
+ }
+
+ if (number1 > number2) return 1;
+ else if (number1 < number2) return -1;
+
+ return 0;
+ }
+
+ /**
+ * Wrapper method to safely determine if the passed object equals this.
+ *
+ * @param obj to check
+ *
+ * @return true if the objects are equal
+ */
+ public boolean equals(Object obj) {
+ return obj != null && this.equals(obj);
+ }
+
+ /**
+ * Convience method to get numbers from a filename, in the hope of
+ * ordering the files properly
+ * For example, a file named Slide2.jpg would extract as 2, and therefore
+ * could be sorted about 3, etc.
+ *
+ * @param name of the file
+ *
+ * @return numbers in the file, or -1 on error / no numbers present
+ */
+ private int getNumberFromFile(String name) {
+ try {
+ String toReturn = "";
+ char current;
+ for (int i = 0; i < name.length(); i++) {
+ current = name.charAt(i);
+ if (Character.isDigit(current)) {
+ toReturn += current;
+ }
+ if (current == '.') {
+ break;
+ }
+ }
+ return Integer.parseInt(toReturn);
+ } catch (Exception failed) {
+ return -1;
+ }
+ }
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/Helper.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/Helper.java
new file mode 100644
index 0000000000..12db6e2e7e
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/Helper.java
@@ -0,0 +1,275 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+//from Helper.java sample from OpenOffice.org SDK
+
+//__________ Imports __________
+
+//base classes
+import java.net.MalformedURLException;
+
+import com.sun.star.ucb.XFileIdentifierConverter;
+import com.sun.star.uno.Exception;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.*;
+import com.sun.star.frame.XComponentLoader;
+
+//property access
+import com.sun.star.beans.*;
+import com.sun.star.bridge.XBridge;
+import com.sun.star.bridge.XBridgeFactory;
+import com.sun.star.connection.XConnection;
+import com.sun.star.connection.XConnector;
+import com.sun.star.uno.XComponentContext;
+//import java.util.logging.Logger;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * The Class Helper.
+ */
+public class Helper
+{
+
+ /** The Constant logger. */
+ private static final Log logger = LogFactory.getLog(Helper.class);
+
+ /** The file converter. */
+ private static XFileIdentifierConverter fileConverter;
+
+ /** The x office multi component factory. */
+ private static XMultiComponentFactory xOfficeMultiComponentFactory;
+
+ /** The x office component context. */
+ private static XComponentContext xOfficeComponentContext;
+
+ /**
+ * Connect ex.
+ *
+ * @param strHost the str host
+ * @param iPort the i port
+ *
+ * @return the oOO connection
+ *
+ * @throws Exception the exception
+ */
+ static public OOOConnection connectEx( String strHost, int iPort)
+ throws java.lang.Exception
+ {
+ String strConnectInfo = "socket,host=" + strHost + ",port=" + iPort;
+ String strProtocol = "urp";
+ String strServiceManager = "StarOffice.ServiceManager";
+
+ XComponentContext ctx =
+ com.sun.star.comp.helper.Bootstrap.createInitialComponentContext( null );
+
+ // instantiate connector service
+ Object x = ctx.getServiceManager().createInstanceWithContext(
+ "com.sun.star.connection.Connector", ctx );
+
+ XConnector xConnector = (XConnector )
+ UnoRuntime.queryInterface(XConnector.class, x);
+/*
+ String a[] = parseUnoUrl( _url );
+ if( null == a )
+ {
+ throw new com.sun.star.uno.Exception( "Couldn't parse uno-url "+ _url );
+ }
+*/
+ // connect using the connection string part of the uno-url only.
+ XConnection connection = xConnector.connect(strConnectInfo);
+
+ x = ctx.getServiceManager().createInstanceWithContext(
+ "com.sun.star.bridge.BridgeFactory", ctx);
+
+ XBridgeFactory xBridgeFactory = (XBridgeFactory) UnoRuntime.queryInterface(
+ XBridgeFactory.class , x );
+
+ // create a bridge with no instance provider
+ // using the middle part of the uno-url
+ String strBridgeName = "OOoBridge:" + System.currentTimeMillis();
+ XBridge bridge = xBridgeFactory.createBridge(strBridgeName, strProtocol , connection , null );
+
+ // query for the XComponent interface and add this as event listener
+ XComponent xComponent = (XComponent) UnoRuntime.queryInterface(
+ XComponent.class, bridge );
+ //xComponent.addEventListener( this );
+
+ // get the remote instance
+ x = bridge.getInstance(strServiceManager);
+
+ // Did the remote server export this object ?
+ if( null == x )
+ {
+ throw new com.sun.star.uno.Exception(
+ "Server didn't provide an instance for" + strServiceManager, null );
+ }
+
+ // Query the initial object for its main factory interface
+ xOfficeMultiComponentFactory = ( XMultiComponentFactory )
+ UnoRuntime.queryInterface( XMultiComponentFactory.class, x );
+
+
+ //return xOfficeMultiComponentFactory;
+ return new OOOConnection(xComponent, xOfficeMultiComponentFactory);
+ }
+
+ /**
+ * Close connection.
+ *
+ * @param conn the conn
+ *
+ * @throws Exception the exception
+ */
+ static public void closeConnection(OOOConnection conn)
+ throws Exception{
+ //XBridge bridge = xBridgeFactorycreateBridge(strBridgeName, strProtocol , connection , null );
+ if(null != conn && null != conn.getBridge()){
+ conn.getBridge().dispose();
+ logger.info("Closed OOo connection");
+ }else{
+ logger.info("error: could not close OOo connection");
+ }
+ }
+
+ /**
+ * creates and instantiates new document.
+ *
+ * @param xOfficeMultiComponentFactory the x office multi component factory
+ * @param sURL the s url
+ * @param sTargetFrame the s target frame
+ * @param nSearchFlags the n search flags
+ * @param aArgs the a args
+ *
+ * @return the OOO document
+ *
+ * @throws Exception the exception
+ */
+ static public OOODocument createDocument( XMultiComponentFactory xOfficeMultiComponentFactory,//XMultiServiceFactory xMultiServiceFactory,
+ String sURL, String sTargetFrame, int nSearchFlags, PropertyValue[] aArgs )
+ throws Exception
+ {
+
+ XComponent xComponent = null;
+ /*
+ XComponent xComponent = null;
+ XComponentLoader aLoader = (XComponentLoader)UnoRuntime.queryInterface(
+ XComponentLoader.class,
+ xMultiComponentFactory.createInstance( "com.sun.star.frame.Desktop" )
+ );
+ */
+ // retrieve the component context (it's not yet exported from the office)
+ // Query for the XPropertySet interface.
+ XPropertySet xProperySet = ( XPropertySet )
+ UnoRuntime.queryInterface( XPropertySet.class, xOfficeMultiComponentFactory );
+
+ // Get the default context from the office server.
+ Object oDefaultContext =
+ xProperySet.getPropertyValue( "DefaultContext" );
+
+ // Query for the interface XComponentContext.
+ xOfficeComponentContext = ( XComponentContext )
+ UnoRuntime.queryInterface(XComponentContext.class, oDefaultContext );
+
+ // now create the desktop service
+ // NOTE: use the office component context here !
+ Object oDesktop = xOfficeMultiComponentFactory.createInstanceWithContext(
+ "com.sun.star.frame.Desktop", xOfficeComponentContext );
+
+ XComponentLoader officeComponentLoader = ( XComponentLoader )
+ UnoRuntime.queryInterface( XComponentLoader.class, oDesktop );
+
+ String internalUrl = createUNOFileURL(xOfficeComponentContext, sURL);
+
+// fileConverter = getFileContentProvider();
+// String internalUrl = fileConverter.getFileURLFromSystemPath("", sURL);
+ logger.warn("UNOFileURL = " + internalUrl);
+ xComponent = (XComponent)UnoRuntime.queryInterface( XComponent.class,
+ officeComponentLoader.loadComponentFromURL(
+ internalUrl, sTargetFrame, nSearchFlags, aArgs ) );
+ if ( xComponent == null )
+ throw new Exception( "could not create document: " + internalUrl );
+ return new OOODocument(xComponent, xOfficeComponentContext);//xComponent;
+ }
+
+ /**
+ * Creating a correct File URL that OpenOffice can handle. This is
+ * necessary to be platform independent.
+ *
+ * @param filelocation the filelocation
+ * @param componentContext the component context
+ *
+ * @return the string
+ */
+ public static String createUNOFileURL(XComponentContext componentContext, String filelocation)
+ {
+ java.io.File newfile = new java.io.File(filelocation);
+
+ java.net.URL before = null;
+ try
+ {
+ before = newfile.toURL();
+ }
+ catch (MalformedURLException e) {
+ logger.error(e);
+ }
+ // Create a URL, which can be used by UNO
+ String myUNOFileURL = com.sun.star.uri.ExternalUriReferenceTranslator
+ .create(componentContext).translateToInternal(before.toExternalForm());
+
+ if (myUNOFileURL.length() == 0 && filelocation.length() > 0)
+ {
+ logger.error("File URL conversion failed. Filelocation " +
+ "contains illegal characters: " + filelocation);
+ }
+
+ logger.warn("UNOFileURL = " + myUNOFileURL);
+
+ return myUNOFileURL;
+ }
+
+ /**
+ * Gets the file content provider.
+ *
+ * @return the file content provider
+ */
+ public static XFileIdentifierConverter getFileContentProvider() {
+
+ Object service;
+ try {
+ service = xOfficeMultiComponentFactory.createInstanceWithContext("com.sun.star.ucb.FileContentProvider", xOfficeComponentContext);
+ return (XFileIdentifierConverter) UnoRuntime.queryInterface(XFileIdentifierConverter.class, service);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+}
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/OOOConnection.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/OOOConnection.java
new file mode 100644
index 0000000000..88c47b1819
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/OOOConnection.java
@@ -0,0 +1,78 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XMultiComponentFactory;
+
+
+/**
+ * The Class OOOConnection.
+ */
+public class OOOConnection {
+
+ //private String strBridgeName;
+ /** The component factory. */
+ private XMultiComponentFactory componentFactory;
+
+ /** The bridge. */
+ private XComponent bridge;
+
+ /**
+ * Instantiates a new oOO connection.
+ *
+ * @param bridge the bridge
+ * @param componentFactory the component factory
+ */
+ public OOOConnection(
+ //String strBridgeName,
+ XComponent bridge,
+ XMultiComponentFactory componentFactory
+ ){
+ //this.strBridgeName = strBridgeName;
+ this.componentFactory = componentFactory;
+ this.bridge = bridge;
+ }
+ /*
+ public String getBridgeName(){
+ return this.strBridgeName;
+ }
+ **/
+
+ /**
+ * Gets the bridge.
+ *
+ * @return the bridge
+ */
+ public XComponent getBridge(){
+ return this.bridge;
+ }
+
+ /**
+ * Gets the component factory.
+ *
+ * @return the component factory
+ */
+ public XMultiComponentFactory getComponentFactory(){
+ return this.componentFactory;
+ }
+
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/OOODocument.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/OOODocument.java
new file mode 100644
index 0000000000..8ea6c9aafe
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/OOODocument.java
@@ -0,0 +1,67 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import com.sun.star.lang.XComponent;
+import com.sun.star.uno.XComponentContext;
+
+
+/**
+ * The Class OOODocument.
+ */
+public class OOODocument {
+
+ /** The comp. */
+ private XComponent comp;
+
+ /** The context. */
+ private XComponentContext context;
+
+ /**
+ * Instantiates a new oOO document.
+ *
+ * @param comp the comp
+ * @param context the context
+ */
+ public OOODocument(XComponent comp, XComponentContext context) {
+ this.comp = comp;
+ this.context = context;
+ }
+
+ /**
+ * Gets the component.
+ *
+ * @return the component
+ */
+ public XComponent getComponent(){
+ return this.comp;
+ }
+
+ /**
+ * Gets the context.
+ *
+ * @return the context
+ */
+ public XComponentContext getContext(){
+ return this.context;
+ }
+
+}
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PageHelper.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PageHelper.java
new file mode 100644
index 0000000000..90c4d0e7c3
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PageHelper.java
@@ -0,0 +1,336 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+
+//from PageHelper.java sample from OpenOffice.org SDK
+
+//__________ Imports __________
+
+//base classes
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.*;
+
+
+//application specific classes
+import com.sun.star.drawing.*;
+
+//presentation specific classes
+import com.sun.star.presentation.*;
+
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.awt.Size;
+import com.sun.star.container.XNamed;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * The Class PageHelper.
+ */
+public class PageHelper
+{
+
+ /** The Constant logger. */
+ private static final Log logger = LogFactory.getLog(PageHelper.class);
+
+ /**
+ * get the page count for standard pages.
+ *
+ * @param xComponent the x component
+ *
+ * @return the draw page count
+ */
+ static public int getDrawPageCount( XComponent xComponent )
+ {
+ XDrawPagesSupplier xDrawPagesSupplier =
+ (XDrawPagesSupplier)UnoRuntime.queryInterface(
+ XDrawPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
+ return xDrawPages.getCount();
+ }
+
+ /**
+ * Gets the draw pages.
+ *
+ * @param xComponent the x component
+ *
+ * @return the draw pages
+ */
+ static public XDrawPages getDrawPages( XComponent xComponent )
+ {
+ XDrawPagesSupplier xDrawPagesSupplier =
+ (XDrawPagesSupplier)UnoRuntime.queryInterface(
+ XDrawPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
+ return xDrawPages;
+ }
+
+ /**
+ * Gets the draw page name.
+ *
+ * @param xComponent the x component
+ *
+ * @return the draw page name
+ */
+ static public String getDrawPageName(XDrawPage xComponent){//XComponent xComponent ){
+
+ XNamed xNamed = (XNamed)UnoRuntime.queryInterface(XNamed.class,
+ xComponent);
+ if(null == xNamed){
+ logger.info("PageHelper.getDrawPageName() "
+ + " XNamed not found.");
+ return null;
+ }else{
+ return xNamed.getName();
+ }
+ }
+
+ /**
+ * get draw page by index.
+ *
+ * @param xComponent the x component
+ * @param nIndex the n index
+ *
+ * @return the draw page by index
+ *
+ * @throws IndexOutOfBoundsException the index out of bounds exception
+ * @throws WrappedTargetException the wrapped target exception
+ */
+ static public XDrawPage getDrawPageByIndex( XComponent xComponent, int nIndex )
+ throws com.sun.star.lang.IndexOutOfBoundsException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ XDrawPagesSupplier xDrawPagesSupplier =
+ (XDrawPagesSupplier)UnoRuntime.queryInterface(
+ XDrawPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
+ return (XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, xDrawPages.getByIndex( nIndex ));
+ }
+
+ /**
+ * creates and inserts a draw page into the giving position,
+ * the method returns the new created page.
+ *
+ * @param xComponent the x component
+ * @param nIndex the n index
+ *
+ * @return the x draw page
+ *
+ * @throws Exception the exception
+ */
+ static public XDrawPage insertNewDrawPageByIndex( XComponent xComponent, int nIndex )
+ throws Exception
+ {
+ XDrawPagesSupplier xDrawPagesSupplier =
+ (XDrawPagesSupplier)UnoRuntime.queryInterface(
+ XDrawPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
+ return xDrawPages.insertNewByIndex( nIndex );
+ }
+
+ /**
+ * removes the given page.
+ *
+ * @param xComponent the x component
+ * @param xDrawPage the x draw page
+ */
+ static public void removeDrawPage( XComponent xComponent, XDrawPage xDrawPage )
+ {
+ XDrawPagesSupplier xDrawPagesSupplier =
+ (XDrawPagesSupplier)UnoRuntime.queryInterface(
+ XDrawPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
+ xDrawPages.remove( xDrawPage );
+ }
+
+ /**
+ * get size of the given page.
+ *
+ * @param xDrawPage the x draw page
+ *
+ * @return the page size
+ *
+ * @throws UnknownPropertyException the unknown property exception
+ * @throws WrappedTargetException the wrapped target exception
+ */
+ static public Size getPageSize( XDrawPage xDrawPage )
+ throws com.sun.star.beans.UnknownPropertyException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ XPropertySet xPageProperties = (XPropertySet)
+ UnoRuntime.queryInterface( XPropertySet.class, xDrawPage );
+ return new Size(
+ ((Integer)xPageProperties.getPropertyValue( "Width" )).intValue(),
+ ((Integer)xPageProperties.getPropertyValue( "Height" )).intValue() );
+ }
+
+ // __________ master pages __________
+
+ /**
+ * get the page count for master pages.
+ *
+ * @param xComponent the x component
+ *
+ * @return the master page count
+ */
+ static public int getMasterPageCount( XComponent xComponent )
+ {
+ XMasterPagesSupplier xMasterPagesSupplier =
+ (XMasterPagesSupplier)UnoRuntime.queryInterface(
+ XMasterPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
+ return xDrawPages.getCount();
+ }
+
+ /**
+ * get master page by index.
+ *
+ * @param xComponent the x component
+ * @param nIndex the n index
+ *
+ * @return the master page by index
+ *
+ * @throws IndexOutOfBoundsException the index out of bounds exception
+ * @throws WrappedTargetException the wrapped target exception
+ */
+ static public XDrawPage getMasterPageByIndex( XComponent xComponent, int nIndex )
+ throws com.sun.star.lang.IndexOutOfBoundsException,
+ com.sun.star.lang.WrappedTargetException
+ {
+ XMasterPagesSupplier xMasterPagesSupplier =
+ (XMasterPagesSupplier)UnoRuntime.queryInterface(
+ XMasterPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
+ return (XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, xDrawPages.getByIndex( nIndex ));
+ }
+
+ /**
+ * creates and inserts a new master page into the giving position,
+ * the method returns the new created page.
+ *
+ * @param xComponent the x component
+ * @param nIndex the n index
+ *
+ * @return the x draw page
+ */
+ static public XDrawPage insertNewMasterPageByIndex( XComponent xComponent, int nIndex )
+ {
+ XMasterPagesSupplier xMasterPagesSupplier =
+ (XMasterPagesSupplier)UnoRuntime.queryInterface(
+ XMasterPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
+ return xDrawPages.insertNewByIndex( nIndex );
+ }
+
+ /**
+ * removes the given page.
+ *
+ * @param xComponent the x component
+ * @param xDrawPage the x draw page
+ */
+ static public void removeMasterPage( XComponent xComponent, XDrawPage xDrawPage )
+ {
+ XMasterPagesSupplier xMasterPagesSupplier =
+ (XMasterPagesSupplier)UnoRuntime.queryInterface(
+ XMasterPagesSupplier.class, xComponent );
+ XDrawPages xDrawPages = xMasterPagesSupplier.getMasterPages();
+ xDrawPages.remove( xDrawPage );
+ }
+
+ /**
+ * return the corresponding masterpage for the giving drawpage.
+ *
+ * @param xDrawPage the x draw page
+ *
+ * @return the master page
+ */
+ static public XDrawPage getMasterPage( XDrawPage xDrawPage )
+ {
+ XMasterPageTarget xMasterPageTarget =
+ (XMasterPageTarget)UnoRuntime.queryInterface(
+ XMasterPageTarget.class, xDrawPage );
+ return xMasterPageTarget.getMasterPage();
+ }
+
+ /**
+ * sets given masterpage at the drawpage.
+ *
+ * @param xDrawPage the x draw page
+ * @param xMasterPage the x master page
+ */
+ static public void setMasterPage( XDrawPage xDrawPage, XDrawPage xMasterPage )
+ {
+ XMasterPageTarget xMasterPageTarget =
+ (XMasterPageTarget)UnoRuntime.queryInterface(
+ XMasterPageTarget.class, xDrawPage );
+ xMasterPageTarget.setMasterPage( xMasterPage );
+ }
+
+ // __________ presentation pages __________
+
+ /**
+ * test if a Presentation Document is supported.
+ * This is important, because only presentation documents
+ * have notes and handout pages
+ *
+ * @param xComponent the x component
+ *
+ * @return true, if checks if is impress document
+ */
+ static public boolean isImpressDocument( XComponent xComponent )
+ {
+ XServiceInfo xInfo = (XServiceInfo)UnoRuntime.queryInterface(
+ XServiceInfo.class, xComponent );
+ return xInfo.supportsService( "com.sun.star.presentation.PresentationDocument" );
+ }
+
+ /**
+ * in impress documents each normal draw page has a corresponding notes page.
+ *
+ * @param xDrawPage the x draw page
+ *
+ * @return the notes page
+ */
+ static public XDrawPage getNotesPage( XDrawPage xDrawPage )
+ {
+ XPresentationPage aPresentationPage =
+ (XPresentationPage)UnoRuntime.queryInterface(
+ XPresentationPage.class, xDrawPage );
+ return aPresentationPage.getNotesPage();
+ }
+
+ /**
+ * in impress each documents has one handout page.
+ *
+ * @param xComponent the x component
+ *
+ * @return the handout master page
+ */
+ static public XDrawPage getHandoutMasterPage( XComponent xComponent )
+ {
+ XHandoutMasterSupplier aHandoutMasterSupplier =
+ (XHandoutMasterSupplier)UnoRuntime.queryInterface(
+ XHandoutMasterSupplier.class, xComponent );
+ return aHandoutMasterSupplier.getHandoutMasterPage();
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PdfToSwfDocumentHandler.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PdfToSwfDocumentHandler.java
new file mode 100644
index 0000000000..b64fd7dad1
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PdfToSwfDocumentHandler.java
@@ -0,0 +1,245 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.ConnectException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * Class to convert pdf slide presentation files to swf format slide.
+ * It invokes tools to do some tasks: pdfExtractor and swftoolConverter.
+ * [pdfExtractor: splits pdf presentation slide pages into single page pdf files]
+ * [swftoolConverter: converts pdf to swf]
+ *
+ * @author ritzalam
+ */
+public class PdfToSwfDocumentHandler {
+
+ /** The Constant logger. */
+ private static final Log logger = LogFactory.getLog(PdfToSwfDocumentHandler.class);
+ // message sender used to send messages to blindside server using ActiveMQ
+ /** The updates msg sender. */
+ private UpdatesMessageSender updatesMsgSender = null;
+
+ // used to invoke the tools to do the operations
+ /** The swftool converter. */
+ private String swftoolConverter;
+
+ /** The pdf extractor. */
+ private String pdfExtractor;
+
+ /** The room. */
+ private Integer room;
+
+ /**
+ * Setter for message sender used to send messages to blindside server using ActiveMQ.
+ *
+ * @param updatesMsgSender the updates msg sender
+ */
+ public void setUpdatesMsgSender(UpdatesMessageSender updatesMsgSender) {
+ this.updatesMsgSender = updatesMsgSender;
+ }
+
+ /**
+ * Setter for swftoolConverter name to be used to generate command to invoke the tool.
+ *
+ * @param swftoolConverter the swftool converter
+ */
+ public void setSwftoolConverter(String swftoolConverter) {
+ this.swftoolConverter = swftoolConverter;
+ }
+
+ /**
+ * Setter for PdfExtractor name to be used to generate command to invoke the tool.
+ *
+ * @param pdfExtractor the pdf extractor
+ */
+ public void setpdfExtractor(String pdfExtractor) {
+ this.pdfExtractor = pdfExtractor;
+ }
+
+ /**
+ * Convert all the presentation slide from source directory, to swf format(for the conference room given).
+ * First by splitting it into single page pdf files and saving them in destination directory.
+ * And then converting them to SWF files by invoking convertPDFtoSWF() on every pdf file in source directory.
+ *
+ * @param room conference ID
+ * @param fileSource source directory where pdf files are.
+ * @param destDir destination directory
+ */
+ public synchronized void convert(Integer room, File fileSource, File destDir) {
+ this.room = room;
+
+ updatesMsgSender.sendMessage(room, ReturnCode.UPDATE, "Generating slides.");
+ //extract pages
+ extractPages(fileSource, destDir);
+
+ ArrayList files = getConvertedSlides(destDir.toString());
+
+ int curSlide = 1;
+ for (Iterator it = files.iterator(); it.hasNext();) {
+ File aFile = (File) it.next();
+ String fname = aFile.getName();
+ System.out.println("Filename = [" + fname + "]");
+
+ int dot = fname.lastIndexOf('.');
+ fname = fname.substring(0, dot);
+ fname += ".swf";
+
+ File outFile = new File(aFile.getParent() + File.separator + fname);
+
+ System.out.println("Input = [" + aFile.getAbsolutePath() + "]");
+ System.out.println("Output = [" + outFile.getAbsolutePath() + "]");
+ convertPDFtoSWF(aFile, outFile);
+ updatesMsgSender.sendMessage(room, ReturnCode.CONVERT, files.size(), curSlide++);
+ }
+ }
+
+ /**
+ * This method extracts the pdf file given as the parameter,
+ * input and outputs the resulting files in the location referenced by the parameter output.
+ *
+ * @param input the input
+ * @param output the output
+ */
+ private void extractPages(File input, File output) {
+ String SPACE = " ";
+ String BURST = "burst";
+ String filenameFormat = room + "-slide-%1d.pdf";
+
+ String s = null;
+ String command = pdfExtractor + SPACE + input.getAbsolutePath() + SPACE + BURST
+ + SPACE + "output " + output.getAbsolutePath() + File.separator + filenameFormat;
+
+ logger.info("extracting command[" + command + "]");
+
+ try {
+
+ Process p = Runtime.getRuntime().exec(command);
+
+ BufferedReader stdInput = new BufferedReader(new
+ InputStreamReader(p.getInputStream()));
+
+ BufferedReader stdError = new BufferedReader(new
+ InputStreamReader(p.getErrorStream()));
+
+ // read the output from the command
+ logger.debug("Here is the standard output of the command:\n");
+ while ((s = stdInput.readLine()) != null) {
+ logger.debug(s);
+ }
+
+ // read any errors from the attempted command
+ logger.debug("Here is the standard error of the command (if any):\n");
+ while ((s = stdError.readLine()) != null) {
+ logger.error(s);
+ }
+ stdInput.close();
+ stdError.close();
+ }
+ catch (IOException e) {
+ logger.error("exception happened - here's what I know: ");
+ e.printStackTrace();
+ updatesMsgSender.sendMessage(room, ReturnCode.SWFTOOLS, "Failed while trying to convert document to SWF.");
+ }
+ }
+
+ /**
+ * This methods converts the input file (given as parameter) to swf file by invoking swftoolconverter tool.
+ *
+ * @param input file to be converted
+ * @param output converted .swf file
+ */
+ private void convertPDFtoSWF(File input, File output) {
+ String SPACE = " ";
+
+ String s = null;
+ String command = swftoolConverter + SPACE + input.getAbsolutePath() + " " + output.getAbsolutePath();
+ try {
+
+ Process p = Runtime.getRuntime().exec(command);
+
+ BufferedReader stdInput = new BufferedReader(new
+ InputStreamReader(p.getInputStream()));
+
+ BufferedReader stdError = new BufferedReader(new
+ InputStreamReader(p.getErrorStream()));
+
+ // read the output from the command
+ logger.debug("Here is the standard output of the command:\n");
+ while ((s = stdInput.readLine()) != null) {
+ logger.debug(s);
+ }
+
+ // read any errors from the attempted command
+ logger.debug("Here is the standard error of the command (if any):\n");
+ while ((s = stdError.readLine()) != null) {
+ logger.error(s);
+ }
+ stdInput.close();
+ stdError.close();
+ }
+ catch (IOException e) {
+ logger.error("exception happened - here's what I know: ");
+ e.printStackTrace();
+ updatesMsgSender.sendMessage(room, ReturnCode.SWFTOOLS, "Failed while trying to convert document to SWF.");
+ }
+ }
+
+ /**
+ * This method loads all the pdf files in the source folder and returns them in an ArrayList.
+ *
+ * @param sourceFolder which contains the slide files
+ *
+ * @return ArrayList containing all pdf files
+ */
+ private ArrayList getConvertedSlides(String sourceFolder)
+ {
+ File file = new File(sourceFolder);
+
+ File[] files = file.listFiles();
+
+ ArrayList listOfFiles = new ArrayList();
+
+ // checking all pdf format files in the source folder
+ for (int i= 0; i < files.length; i++) {
+ if (!files [i].isDirectory()) {
+ String filename = (String)files[i].getName();
+ if (filename.toLowerCase().endsWith(".pdf")) {
+ listOfFiles.add(files[i]);
+ }
+ }
+ }
+
+ return listOfFiles;
+ }
+
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptDocumentHandler.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptDocumentHandler.java
new file mode 100644
index 0000000000..c7dc892988
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptDocumentHandler.java
@@ -0,0 +1,241 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.*;
+
+// property access
+import com.sun.star.beans.*;
+// application specific classes
+import com.sun.star.drawing.*;
+
+// XExporter
+import com.sun.star.document.XExporter;
+import com.sun.star.document.XFilter;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.bigbluebutton.fileupload.document.IProgressListener;
+
+import java.io.*;
+
+
+/**
+ * The Class PptDocumentHandler.
+ */
+public class PptDocumentHandler
+{
+
+ /** The Constant logger. */
+ private static final Log logger = LogFactory.getLog(PptDocumentHandler.class);
+
+ /** The open office host. */
+ private String openOfficeHost = "localhost";
+
+ /** The open office port. */
+ private int openOfficePort = 8100;
+
+ /** The height. */
+ private int height = 600;
+
+ /** The width. */
+ private int width = 800;
+
+ /** The quality. */
+ private int quality = 100;
+
+ /**
+ * Sets the open office host.
+ *
+ * @param host the new open office host
+ */
+ public void setOpenOfficeHost(String host) {
+ this.openOfficeHost = host;
+ }
+
+ /**
+ * Sets the open office port.
+ *
+ * @param port the new open office port
+ */
+ public void setOpenOfficePort(int port) {
+ this.openOfficePort = port;
+ }
+
+ /**
+ * Sets the height.
+ *
+ * @param newHeight the new height
+ */
+ public void setHeight(int newHeight){
+ if (newHeight > 0){
+ height = newHeight;
+ }
+ }
+
+ /**
+ * Sets the width.
+ *
+ * @param newWidth the new width
+ */
+ public void setWidth(int newWidth){
+ if (newWidth > 0){
+ width = newWidth;
+ }
+ }
+
+ /**
+ * Sets the quality.
+ *
+ * @param newQuality the new quality
+ */
+ public void setQuality(int newQuality){
+ if (newQuality > 0){
+ quality = newQuality;
+ }
+ }
+
+ /**
+ * Connect.
+ *
+ * @return the oOO connection
+ *
+ * @throws Exception the exception
+ */
+ private OOOConnection connect() throws Exception {
+ logger.info("Connecting to: " + openOfficeHost + ":" + openOfficePort);
+
+ return Helper.connectEx(openOfficeHost, openOfficePort);
+ }
+
+ /**
+ * Convert.
+ *
+ * @param fileSource the file source
+ * @param destDir the dest dir
+ */
+ public synchronized void convert(File fileSource, File destDir) {
+
+ XComponent xComponent = null;
+ OOOConnection oooConn = null;
+ OOODocument oooDoc = null;
+
+ try
+ {
+ oooConn = connect();
+
+ // suppress Presentation Autopilot when opening the document
+ // properties are the same as described for
+ // com.sun.star.document.MediaDescriptor
+ PropertyValue[] pPropValues = new PropertyValue[ 1 ];
+ pPropValues[ 0 ] = new PropertyValue();
+ pPropValues[ 0 ].Name = "Hidden";
+ pPropValues[ 0 ].Value = new Boolean( true );
+
+ logger.info("PPTExporter - source canonical path: " + fileSource.getCanonicalPath());
+
+ oooDoc = Helper.createDocument(oooConn.getComponentFactory(),
+ fileSource.getCanonicalPath(), "_blank", 0, pPropValues);
+
+ Object graphicExportFilter = oooConn.getComponentFactory().createInstanceWithContext(
+ "com.sun.star.drawing.GraphicExportFilter", oooDoc.getContext());
+
+ XExporter xExporter = (XExporter) UnoRuntime.queryInterface( XExporter.class, graphicExportFilter );
+
+ xComponent = oooDoc.getComponent();
+
+ int numSlides = PageHelper.getDrawPageCount( xComponent );
+
+ PropertyValue aFilterData[] = new PropertyValue[5];
+ aFilterData[0] = new PropertyValue();
+ aFilterData[0].Name = "PixelWidth";
+ aFilterData[0].Value = new Integer(width);
+ aFilterData[1] = new PropertyValue();
+ aFilterData[1].Name = "PixelHeight";
+ aFilterData[1].Value = new Integer(height);
+ aFilterData[2] = new PropertyValue();
+ aFilterData[2].Name = "LogicalWidth";
+ aFilterData[2].Value = new Integer(width);
+ aFilterData[3] = new PropertyValue();
+ aFilterData[3].Name = "LogicalHeight";
+ aFilterData[3].Value = new Integer(height);
+ aFilterData[4] = new PropertyValue();
+ aFilterData[4].Name = "Quality";
+ aFilterData[4].Value = new Integer(quality);
+
+ for (int i = 0; i < numSlides; i++) {
+
+ PropertyValue aProps[] = new PropertyValue[3];
+ aProps[0] = new PropertyValue();
+ aProps[0].Name = "MediaType";
+ aProps[0].Value = "image/jpeg";
+ aProps[1] = new PropertyValue();
+ aProps[1].Name = "FilterData";
+ aProps[1].Value = aFilterData;
+
+ String slideName = destDir.getAbsolutePath() + "/slide" + i + ".jpg";
+
+ java.io.File destFile = new java.io.File(slideName);
+ java.net.URL destUrl = destFile.toURL();
+
+ aProps[2] = new PropertyValue();
+ aProps[2].Name = "URL";
+ aProps[2].Value = destUrl.toString();
+
+ XDrawPage xPage = PageHelper.getDrawPageByIndex( xComponent, i );
+ String slideTitle = PageHelper.getDrawPageName(xPage);
+
+ XComponent xComp = (XComponent) UnoRuntime.queryInterface( XComponent.class, xPage );
+
+ xExporter.setSourceDocument( xComp );
+
+
+ XFilter xFilter = (XFilter) UnoRuntime.queryInterface( XFilter.class, xExporter );
+ xFilter.filter( aProps );
+ logger.info( "*** graphics on page \"" + i
+ + "\" with title '" + slideTitle + "' from file \"" + fileSource.toString()
+ + "\" exported under the name \""
+ + destDir.getAbsolutePath() + "\" in the local directory" );
+
+ }
+ }
+ catch( Exception ex )
+ {
+ logger.error( ex );
+ } finally {
+ try {
+ if (null != xComponent){
+ xComponent.dispose();
+ }
+ } catch(Exception e){
+ logger.error("error calling dispose\n" + e);
+ }
+ try {
+ if (null != oooConn){
+ Helper.closeConnection(oooConn);
+ }
+ } catch(Exception e){
+ logger.error("error closing connection\n" + e);
+ }
+ }
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToJpegConverter.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToJpegConverter.java
new file mode 100644
index 0000000000..a853deb845
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToJpegConverter.java
@@ -0,0 +1,232 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.*;
+
+// property access
+import com.sun.star.beans.*;
+// application specific classes
+import com.sun.star.drawing.*;
+
+// XExporter
+import com.sun.star.document.XExporter;
+import com.sun.star.document.XFilter;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.*;
+
+
+/**
+ * The Class PptToJpegConverter.
+ */
+public class PptToJpegConverter
+{
+
+ /** The Constant logger. */
+ private static final Log logger = LogFactory.getLog(PptToJpegConverter.class);
+/*
+ public static void main(String[] args){
+
+ SlideInfo[] slideInfos = exportSlides(
+ new File("C:/temp/Balancing.ppt"), // new File(args[0]),
+ new File("C:/temp/dest"), // new File(args[1]),
+ "localhost", // args[2],
+ 8100, //Integer.parseInt(args[3]),
+ PptToJpegConverter.FORMAT_OPTIMAL
+ );
+
+ System.out.println(slideInfos.length + " slides exported: ");
+
+ for(int i = 0; i < slideInfos.length; i++){
+ System.out.println("\t"+slideInfos[i].getPath());
+ }
+
+ System.exit(0);
+ }
+*/
+ /** The Constant FILE_URL_PREFIX. */
+public final static String FILE_URL_PREFIX = "file:///";
+
+ /** The Constant OOO_FORMATS. */
+ private static final String[] OOO_FORMATS = { "ppt", "sxi", "sxd", "odp", "odg" };
+
+ /** The Constant FORMAT_JPEG. */
+ public final static PptToJpegConverter FORMAT_JPEG = new PptToJpegConverter();
+
+ /** The Constant FORMAT_GIF. */
+ public final static PptToJpegConverter FORMAT_GIF = new PptToJpegConverter();
+
+ /** The Constant FORMAT_PNG. */
+ public final static PptToJpegConverter FORMAT_PNG = new PptToJpegConverter();
+
+ /** The Constant FORMAT_OPTIMAL. */
+ public final static PptToJpegConverter FORMAT_OPTIMAL = new PptToJpegConverter();
+
+ /**
+ * Instantiates a new ppt to jpeg converter.
+ */
+ private PptToJpegConverter(){}
+
+ /**
+ * Export slides.
+ *
+ * @param fileSource the file source
+ * @param fileOutDir the file out dir
+ * @param strMachine the str machine
+ * @param iPort the i port
+ * @param format the format
+ *
+ * @return the slide info[]
+ */
+ public static synchronized SlideInfo[] exportSlides(File fileSource,
+ File fileOutDir, String strMachine, int iPort, PptToJpegConverter format){
+
+// String srcUrl = "C:/temp/Balancing.ppt";
+// String destDir = "C:/temp/dest";
+
+ logger.warn("Connecting to: " + strMachine + ":" + iPort);
+
+ XComponent xComponent = null;
+ SlideInfo[] slideInfos = null;
+ OOOConnection oooConn = null;
+ OOODocument oooDoc = null;
+
+ try
+ {
+ oooConn = Helper.connectEx(strMachine, iPort);
+
+ // suppress Presentation Autopilot when opening the document
+ // properties are the same as described for
+ // com.sun.star.document.MediaDescriptor
+ PropertyValue[] pPropValues = new PropertyValue[ 1 ];
+ pPropValues[ 0 ] = new PropertyValue();
+ pPropValues[ 0 ].Name = "Hidden";
+ pPropValues[ 0 ].Value = new Boolean( true );
+
+// java.io.File sourceFile = new java.io.File(srcUrl);
+ StringBuffer sUrl = new StringBuffer(FILE_URL_PREFIX);
+ sUrl.append(fileSource.getCanonicalPath().replace('\\', '/'));
+
+ logger.info("PPTExporter - source canonical path: " + fileSource.getCanonicalPath());
+ logger.info("PPTExporter - source: " + sUrl);
+
+// oooDoc = Helper.createDocument(oooConn.getComponentFactory(),
+// sUrl.toString(), "_blank", 0, pPropValues);
+
+ oooDoc = Helper.createDocument(oooConn.getComponentFactory(),
+ fileSource.getCanonicalPath(), "_blank", 0, pPropValues);
+
+ Object graphicExportFilter = oooConn.getComponentFactory().createInstanceWithContext(
+ "com.sun.star.drawing.GraphicExportFilter", oooDoc.getContext());
+
+ XExporter xExporter = (XExporter) UnoRuntime.queryInterface( XExporter.class, graphicExportFilter );
+
+ xComponent = oooDoc.getComponent();
+
+ int numSlides = PageHelper.getDrawPageCount( xComponent );
+ slideInfos = new SlideInfo[numSlides];
+
+ PropertyValue aFilterData[] = new PropertyValue[5];
+ aFilterData[0] = new PropertyValue();
+ aFilterData[0].Name = "PixelWidth";
+ aFilterData[0].Value = new Integer(800);
+ aFilterData[1] = new PropertyValue();
+ aFilterData[1].Name = "PixelHeight";
+ aFilterData[1].Value = new Integer(600);
+ aFilterData[2] = new PropertyValue();
+ aFilterData[2].Name = "LogicalWidth";
+ aFilterData[2].Value = new Integer(800);
+ aFilterData[3] = new PropertyValue();
+ aFilterData[3].Name = "LogicalHeight";
+ aFilterData[3].Value = new Integer(600);
+ aFilterData[4] = new PropertyValue();
+ aFilterData[4].Name = "Quality";
+ aFilterData[4].Value = new Integer(100);
+
+ for (int i = 0; i < numSlides; i++) {
+
+ PropertyValue aProps[] = new PropertyValue[3];
+ aProps[0] = new PropertyValue();
+ aProps[0].Name = "MediaType";
+ aProps[0].Value = "image/jpeg";
+ aProps[1] = new PropertyValue();
+ aProps[1].Name = "FilterData";
+ aProps[1].Value = aFilterData;
+
+ /* some graphics e.g. the Windows Metafile does not have a Media Type,
+ for this case
+ aProps[0].Name = "FilterName"; // it is possible to set a FilterName
+ aProps[0].Value = "WMF";
+ */
+ String slideName = fileOutDir.getAbsolutePath() + "/slide" + i + ".jpg";
+
+ java.io.File destFile = new java.io.File(slideName);
+ java.net.URL destUrl = destFile.toURL();
+
+ aProps[2] = new PropertyValue();
+ aProps[2].Name = "URL";
+ aProps[2].Value = destUrl.toString();
+
+ XDrawPage xPage = PageHelper.getDrawPageByIndex( xComponent, i );
+ String slideTitle = PageHelper.getDrawPageName(xPage);
+
+ XComponent xComp = (XComponent) UnoRuntime.queryInterface( XComponent.class, xPage );
+
+ xExporter.setSourceDocument( xComp );
+
+
+ XFilter xFilter = (XFilter) UnoRuntime.queryInterface( XFilter.class, xExporter );
+ xFilter.filter( aProps );
+
+ logger.info( "*** graphics on page \"" + i
+ + "\" with title '" + slideTitle + "' from file \"" + fileSource.toString()
+ + "\" exported under the name \""
+ + fileOutDir.getAbsolutePath() + "\" in the local directory" );
+
+ slideInfos[i] = new SlideInfo( slideTitle, slideName, PptToJpegConverter.FORMAT_JPEG);
+ }
+ }
+ catch( Exception ex )
+ {
+ logger.error( ex );
+ } finally {
+ try {
+ if (null != xComponent){
+ xComponent.dispose();
+ }
+ } catch(Exception e){
+ logger.error("error calling dispose\n" + e);
+ }
+ try {
+ if (null != oooConn){
+ Helper.closeConnection(oooConn);
+ }
+ } catch(Exception e){
+ logger.error("error closing connection\n" + e);
+ }
+ }
+ return slideInfos;
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToSwfConverter.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToSwfConverter.java
new file mode 100644
index 0000000000..b9ae1709c8
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToSwfConverter.java
@@ -0,0 +1,365 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.artofsolving.jodconverter.DocumentFormat;
+import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException;
+import com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter;
+import com.sun.star.drawing.XDrawPage;
+import com.sun.star.frame.XComponentLoader;
+import com.sun.star.frame.XStorable;
+import com.sun.star.lang.IndexOutOfBoundsException;
+import com.sun.star.lang.WrappedTargetException;
+import com.sun.star.lang.XComponent;
+import com.sun.star.ucb.XFileIdentifierConverter;
+import com.sun.star.uno.Exception;
+import com.sun.star.uno.UnoRuntime;
+
+
+/**
+ * This class converts a PowerPoint document to PDFs then to SWFs.
+ */
+public class PptToSwfConverter extends AbstractOpenOfficeDocumentConverter {
+
+ /** The Constant logger. */
+ private static final Log logger = LogFactory.getLog(PptToSwfConverter.class);
+
+ /** The updates msg sender. */
+ private UpdatesMessageSender updatesMsgSender = null;
+
+ /** The room. */
+ private Integer room;
+
+ /** The swftool converter. */
+ private String swftoolConverter;
+
+ /** The total num pages. */
+ private int totalNumPages = 0;
+
+ /**
+ * Instantiates a new ppt to swf converter.
+ *
+ * @param updatesMsgSender the updates msg sender
+ * @param room the room
+ * @param connection the connection
+ */
+ public PptToSwfConverter(UpdatesMessageSender updatesMsgSender, Integer room, OpenOfficeConnection connection) {
+ super(connection);
+ this.room = room;
+ this.updatesMsgSender = updatesMsgSender;
+ }
+
+ /**
+ * Implementation the same as OpenOfficeDocumentConverter.
+ *
+ * @param inputStream the input stream
+ * @param inputFormat the input format
+ * @param outputStream the output stream
+ * @param outputFormat the output format
+ */
+ protected void convertInternal(InputStream inputStream, DocumentFormat inputFormat, OutputStream outputStream, DocumentFormat outputFormat) {
+ File inputFile = null;
+ File outputFile = null;
+ try {
+ inputFile = File.createTempFile("document", "." + inputFormat.getFileExtension());
+ OutputStream inputFileStream = null;
+ try {
+ inputFileStream = new FileOutputStream(inputFile);
+ IOUtils.copy(inputStream, inputFileStream);
+ } finally {
+ IOUtils.closeQuietly(inputFileStream);
+ }
+
+ outputFile = File.createTempFile("document", "." + outputFormat.getFileExtension());
+ convert(inputFile, inputFormat, outputFile, outputFormat);
+ InputStream outputFileStream = null;
+ try {
+ outputFileStream = new FileInputStream(outputFile);
+ IOUtils.copy(outputFileStream, outputStream);
+ } finally {
+ IOUtils.closeQuietly(outputFileStream);
+ }
+ } catch (IOException ioException) {
+ throw new OpenOfficeException("conversion failed", ioException);
+ } finally {
+ if (inputFile != null) {
+ inputFile.delete();
+ }
+ if (outputFile != null) {
+ outputFile.delete();
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter#convertInternal(java.io.File, com.artofsolving.jodconverter.DocumentFormat, java.io.File, com.artofsolving.jodconverter.DocumentFormat)
+ */
+ protected void convertInternal(File inputFile, DocumentFormat inputFormat, File outputFile, DocumentFormat outputFormat) {
+ Map loadProperties = new HashMap();
+ loadProperties.putAll(getDefaultLoadProperties());
+ loadProperties.putAll(inputFormat.getImportOptions());
+
+ Map storeProperties = outputFormat.getExportOptions(inputFormat.getFamily());
+
+ synchronized (openOfficeConnection) {
+ XFileIdentifierConverter fileContentProvider = openOfficeConnection.getFileContentProvider();
+ String inputUrl = fileContentProvider.getFileURLFromSystemPath("", inputFile.getAbsolutePath());
+ String outputUrl = fileContentProvider.getFileURLFromSystemPath("", outputFile.getAbsolutePath());
+
+ System.out.println("outputUrl = [" + outputFile.getAbsolutePath() + "]");
+ System.out.println("inputUrl = [" + inputFile.getAbsolutePath() + "]");
+
+ try {
+ XComponentLoader desktop = openOfficeConnection.getDesktop();
+ updatesMsgSender.sendMessage(room, ReturnCode.UPDATE, "Opening document for conversion.");
+ XComponent document = desktop.loadComponentFromURL(inputUrl, "_blank", 0, toPropertyValues(loadProperties));
+ if (document == null) {
+ updatesMsgSender.sendMessage(room, ReturnCode.FILE_NOT_FOUND, "Cannot load the document.");
+ logger.error("Cannot load document from [" + inputUrl + "]");
+ throw new OpenOfficeException("conversion failed: input document is null after loading");
+ }
+
+ totalNumPages = PageHelper.getDrawPageCount(document);
+
+ document.dispose();
+
+ String destDir = outputFile.getParent().toString();
+ for (int i = 0; i < totalNumPages; i++) {
+ String slideName = "slide-" + i + ".pdf";
+
+ updatesMsgSender.sendMessage(room, ReturnCode.EXTRACT, totalNumPages, i+1);
+
+ outputUrl = destDir + File.separator + room + "-" + slideName;
+ java.io.File destFile = new java.io.File(outputUrl);
+ outputUrl = fileContentProvider.getFileURLFromSystemPath("", destFile.getAbsolutePath());
+ System.out.println("new outputUrl = [" + outputUrl + "]");
+
+ loadAndExport(inputUrl, loadProperties, outputUrl, storeProperties, i);
+ }
+
+ ArrayList files = getConvertedSlides(destDir);
+
+ int curSlide = 1;
+ for (Iterator it = files.iterator(); it.hasNext();) {
+ File aFile = (File) it.next();
+ String fname = aFile.getName();
+ System.out.println("Filename = [" + fname + "]");
+
+ int dot = fname.lastIndexOf('.');
+ fname = fname.substring(0, dot);
+ fname += ".swf";
+
+ File outFile = new File(aFile.getParent() + File.separator + fname);
+
+ System.out.println("Input = [" + aFile.getAbsolutePath() + "]");
+ System.out.println("Output = [" + outFile.getAbsolutePath() + "]");
+ convertPDFtoSWF(aFile, outFile);
+ updatesMsgSender.sendMessage(room, ReturnCode.CONVERT, totalNumPages, curSlide++);
+ }
+
+ } catch (OpenOfficeException openOfficeException) {
+ updatesMsgSender.sendMessage(room, ReturnCode.FAIL, "Failed to convert the document.");
+ throw openOfficeException;
+ } catch (Throwable throwable) {
+ updatesMsgSender.sendMessage(room, ReturnCode.FAIL, "Failed to convert the document.");
+ // difficult to provide finer grained error reporting here;
+ // OOo seems to throw ErrorCodeIOException most of the time
+ throw new OpenOfficeException("conversion failed", throwable);
+ }
+ }
+ }
+
+ /**
+ * Load and export.
+ *
+ * @param inputUrl the input url
+ * @param loadProperties the load properties
+ * @param outputUrl the output url
+ * @param storeProperties the store properties
+ * @param page the page
+ *
+ * @throws Exception the exception
+ */
+ private void loadAndExport(String inputUrl, Map loadProperties, String outputUrl, Map storeProperties,
+ int page) throws Exception {
+ XComponentLoader desktop = openOfficeConnection.getDesktop();
+ XComponent document = desktop.loadComponentFromURL(inputUrl, "_blank", 0, toPropertyValues(loadProperties));
+ if (document == null) {
+ updatesMsgSender.sendMessage(room, ReturnCode.FILE_NOT_FOUND, "Cannot load the document.");
+ logger.error("Cannot load document from [" + inputUrl + "]");
+ throw new OpenOfficeException("conversion failed: input document is null after loading");
+ }
+
+ refreshDocument(document);
+
+ int numPages = PageHelper.getDrawPageCount(document);
+
+ document = removePagesExcept(document, page, numPages);
+
+ storeProperties.put("URL", outputUrl);
+
+ try {
+ XStorable saveDoc = (XStorable)UnoRuntime.queryInterface(XStorable.class, document);
+ saveDoc.storeToURL(outputUrl, toPropertyValues(storeProperties));
+ } finally {
+ document.dispose();
+ }
+ }
+
+ /**
+ * Removes the pages except.
+ *
+ * @param doc the doc
+ * @param exceptPage the except page
+ * @param numPages the num pages
+ *
+ * @return the x component
+ */
+ private XComponent removePagesExcept(XComponent doc, int exceptPage, int numPages) {
+ System.out.println("Numpages = [" + numPages + "] exceptPage = [" + exceptPage + "]");
+
+ for (int i = numPages - 1; i > exceptPage; i--) {
+ XDrawPage xPage;
+ try {
+ xPage = PageHelper.getDrawPageByIndex( doc, i );
+ PageHelper.removeDrawPage(doc, xPage);
+ } catch (IndexOutOfBoundsException e) {
+ logger.error("ERROR::Removing page = [" + i + "] exceptPage = [" + exceptPage + "]");
+ updatesMsgSender.sendMessage(room, ReturnCode.FAIL, "Failed while trying to extract pages from document.");
+ } catch (WrappedTargetException e) {
+ logger.error("ERROR::Removing page = [" + i + "] exceptPage = [" + exceptPage + "]");
+ updatesMsgSender.sendMessage(room, ReturnCode.FAIL, "Failed while trying to extract pages from document.");
+ }
+ }
+
+ int firstPage = 0;
+
+ for (int i = 0; i < exceptPage; i++) {
+ XDrawPage xPage;
+ try {
+ xPage = PageHelper.getDrawPageByIndex( doc, firstPage);
+ PageHelper.removeDrawPage(doc, xPage);
+ } catch (IndexOutOfBoundsException e) {
+ logger.error("ERROR::Removing page = [" + i + "] exceptPage = [" + exceptPage + "]");
+ updatesMsgSender.sendMessage(room, ReturnCode.FAIL, "Failed while trying to extract pages from document.");
+ } catch (WrappedTargetException e) {
+ logger.error("ERROR::Removing page = [" + i + "] exceptPage = [" + exceptPage + "]");
+ updatesMsgSender.sendMessage(room, ReturnCode.FAIL, "Failed while trying to extract pages from document.");
+ }
+ }
+
+ return doc;
+ }
+
+ /**
+ * Convert pd fto swf.
+ *
+ * @param input the input
+ * @param output the output
+ */
+ private void convertPDFtoSWF(File input, File output) {
+ String SPACE = " ";
+
+ String s = null;
+ String command = swftoolConverter + SPACE + input.getAbsolutePath() + " " + output.getAbsolutePath();
+ try {
+
+ Process p = Runtime.getRuntime().exec(command);
+
+ BufferedReader stdInput = new BufferedReader(new
+ InputStreamReader(p.getInputStream()));
+
+ BufferedReader stdError = new BufferedReader(new
+ InputStreamReader(p.getErrorStream()));
+
+ // read the output from the command
+ logger.debug("Here is the standard output of the command:\n");
+ while ((s = stdInput.readLine()) != null) {
+ logger.debug(s);
+ }
+
+ // read any errors from the attempted command
+ logger.debug("Here is the standard error of the command (if any):\n");
+ while ((s = stdError.readLine()) != null) {
+ logger.error(s);
+ }
+ }
+ catch (IOException e) {
+ logger.error("exception happened - here's what I know: ");
+ e.printStackTrace();
+ updatesMsgSender.sendMessage(room, ReturnCode.SWFTOOLS, "Failed while trying to convert document to SWF.");
+ }
+ }
+
+ /**
+ * Gets the converted slides.
+ *
+ * @param sourceFolder the source folder
+ *
+ * @return the converted slides
+ */
+ private ArrayList getConvertedSlides(String sourceFolder) {
+ File file = new File(sourceFolder);
+
+ File[] files = file.listFiles();
+
+ ArrayList listOfFiles = new ArrayList();
+
+ for (int i= 0; i < files.length; i++) {
+ if (!files [i].isDirectory()) {
+ String filename = (String)files[i].getName();
+ if (filename.toLowerCase().endsWith(".pdf")) {
+ listOfFiles.add(files[i]);
+ }
+ }
+ }
+
+ return listOfFiles;
+ }
+
+ /**
+ * Sets the swftool converter.
+ *
+ * @param swftoolConverter the new swftool converter
+ */
+ public void setSwftoolConverter(String swftoolConverter) {
+ this.swftoolConverter = swftoolConverter;
+ }
+}
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToSwfDocumentHandler.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToSwfDocumentHandler.java
new file mode 100644
index 0000000000..7214721576
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/PptToSwfDocumentHandler.java
@@ -0,0 +1,125 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+
+package org.bigbluebutton.fileupload.document.impl;
+import java.io.File;
+import java.net.ConnectException;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.artofsolving.jodconverter.DocumentConverter;
+import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
+
+
+/**
+ * The Class PptToSwfDocumentHandler.
+ */
+public class PptToSwfDocumentHandler {
+
+ /** The Constant logger. */
+ private static final Log logger = LogFactory.getLog(PptToSwfDocumentHandler.class);
+
+ /** The open office host. */
+ private String openOfficeHost = "localhost";
+
+ /** The open office port. */
+ private int openOfficePort = 8100;
+
+ /** The updates msg sender. */
+ private UpdatesMessageSender updatesMsgSender = null;
+
+ /** The swftool converter. */
+ private String swftoolConverter;
+
+ /**
+ * Sets the updates msg sender.
+ *
+ * @param updatesMsgSender the new updates msg sender
+ */
+ public void setUpdatesMsgSender(UpdatesMessageSender updatesMsgSender) {
+ this.updatesMsgSender = updatesMsgSender;
+ }
+
+ /**
+ * Sets the open office host.
+ *
+ * @param host the new open office host
+ */
+ public void setOpenOfficeHost(String host) {
+ this.openOfficeHost = host;
+ }
+
+ /**
+ * Sets the open office port.
+ *
+ * @param port the new open office port
+ */
+ public void setOpenOfficePort(int port) {
+ this.openOfficePort = port;
+ }
+
+ /**
+ * Convert.
+ *
+ * @param room the room
+ * @param fileSource the file source
+ * @param destDir the dest dir
+ */
+ public synchronized void convert(Integer room, File fileSource, File destDir) {
+
+ OpenOfficeConnection connection = new SocketOpenOfficeConnection(openOfficeHost, openOfficePort);
+ try {
+ logger.info("-- connecting to OpenOffice.org on port " + openOfficePort);
+ updatesMsgSender.sendMessage(room, ReturnCode.UPDATE, "Connecting to OpenOffice server.");
+ connection.connect();
+ } catch (ConnectException officeNotRunning) {
+ logger.error("ERROR: connection failed. Please make sure OpenOffice is running and listening on port "
+ + openOfficePort + ".");
+ updatesMsgSender.sendMessage(room, ReturnCode.OO_CONNECTION, "Cannot connect to OpenOffice.");
+ }
+ try {
+ updatesMsgSender.sendMessage(room, ReturnCode.UPDATE, "Successfully connected to OpenOffice server.");
+ DocumentConverter converter = new PptToSwfConverter(updatesMsgSender, room, connection);
+ File outputFile = new File(destDir.getAbsolutePath() + File.separator + "output.pdf");
+
+ // Set the tool to be used to convert from PDF to SWF.
+ ((PptToSwfConverter)converter).setSwftoolConverter(swftoolConverter);
+ // Start converting the document
+ converter.convert(fileSource, outputFile);
+ } finally {
+ logger.info("-- disconnecting");
+ connection.disconnect();
+ }
+ }
+
+ /**
+ * Sets the swftool converter.
+ *
+ * @param swftoolConverter the new swftool converter
+ */
+ public void setSwftoolConverter(String swftoolConverter) {
+ this.swftoolConverter = swftoolConverter;
+ }
+}
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/ReturnCode.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/ReturnCode.java
new file mode 100644
index 0000000000..640de7ddaa
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/ReturnCode.java
@@ -0,0 +1,96 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+
+package org.bigbluebutton.fileupload.document.impl;
+
+
+/**
+ * This class has the key words used in the update messages passed to the presentation red5 server application.
+ *
+ * When making changes to this class, make sure you also change
+ * org.blindsideproject.presentation.ReturnCode
+ * in the Presentation Application in Red5.
+ */
+public enum ReturnCode {
+
+
+ /** The FAIL. */
+ FAIL (0, "FAIL "),
+
+ /** The WRON g_ format. */
+ WRONG_FORMAT (1, "WRONG FORMAT"),
+
+ /** The O o_ connection. */
+ OO_CONNECTION (2, "OPEN OFFICE CONNECTION"),
+
+ /** The FIL e_ no t_ found. */
+ FILE_NOT_FOUND (3, "FILE NOT FOUND"),
+
+ /** The SWFTOOLS. */
+ SWFTOOLS (4, "SWFTOOLS"),
+
+ /** The EXTRACT. */
+ EXTRACT (5, "EXTRACT"),
+
+ /** The CONVERT. */
+ CONVERT (6, "CONVERT"),
+
+ /** The UPDATE. */
+ UPDATE (7, "UPDATE"),
+
+ /** The SUCCESS. */
+ SUCCESS (8, "SUCCESS");
+
+ /** The code. */
+ private final String code;
+
+ /** The value. */
+ private final int value;
+
+ /**
+ * Instantiates a new return code.
+ *
+ * @param value the value
+ * @param code the code
+ */
+ ReturnCode(int value, String code) {
+ this.value = value;
+ this.code = code;
+ }
+
+ /**
+ * Code.
+ *
+ * @return the string
+ */
+ public String code() {
+ return code;
+ }
+
+ /**
+ * Value.
+ *
+ * @return the int
+ */
+ public int value() {
+ return value;
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/SlideInfo.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/SlideInfo.java
new file mode 100644
index 0000000000..0fbd9e4861
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/SlideInfo.java
@@ -0,0 +1,82 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+
+import org.bigbluebutton.fileupload.document.impl.PptToJpegConverter;
+
+
+
+/**
+ * The Class SlideInfo.
+ */
+public class SlideInfo{
+
+ /**
+ * Instantiates a new slide info.
+ *
+ * @param strName the str name
+ * @param strPath the str path
+ * @param format the format
+ */
+ public SlideInfo(String strName, String strPath, PptToJpegConverter format){
+ this.strName = strName;
+ this.strPath = strPath;
+ this.format = format;
+ }
+
+
+ /**
+ * Gets the name.
+ *
+ * @return the name
+ */
+ public String getName(){
+ return strName;
+ }
+
+ /**
+ * Gets the path.
+ *
+ * @return the path
+ */
+ public String getPath(){
+ return strPath;
+ }
+
+ /**
+ * Gets the format.
+ *
+ * @return the format
+ */
+ public PptToJpegConverter getFormat(){
+ return format;
+ }
+
+ /** The str name. */
+ private String strName;
+
+ /** The str path. */
+ private String strPath;
+
+ /** The format. */
+ private PptToJpegConverter format;
+
+}
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/UpdatesMessageSender.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/UpdatesMessageSender.java
new file mode 100644
index 0000000000..c142de9b1c
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/document/impl/UpdatesMessageSender.java
@@ -0,0 +1,103 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.document.impl;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
+
+import org.springframework.jms.core.JmsTemplate;
+import org.springframework.jms.core.MessageCreator;
+
+
+/**
+ * This class has methods that are invoked to send update messages to the red5 presentation server application.
+ *
+ * @author ritzalam
+ */
+public class UpdatesMessageSender {
+
+ /** The template. */
+ private JmsTemplate template = null;
+
+ /** The destination. */
+ private Destination destination = null;
+
+ /**
+ * setter for template.
+ *
+ * @param template the template
+ */
+ public void setJmsTemplate(JmsTemplate template) {
+ this.template = template;
+ }
+
+ /**
+ * Setter for destination.
+ *
+ * @param destination the destination
+ */
+
+ public void setDestination(Destination destination) {
+ this.destination = destination;
+ }
+
+ /**
+ * This method sends the message string passed as a parameter to the destination.
+ *
+ * @param room conference room ID
+ * @param code the code
+ * @param message update message
+ */
+ public void sendMessage(final Integer room, final ReturnCode code, final String message) {
+ template.send(destination, new MessageCreator() {
+ public Message createMessage(Session session) throws JMSException {
+ Message msgToSend = session.createTextMessage(message);
+ msgToSend.setIntProperty("room", room);
+ msgToSend.setIntProperty("returnCode", code.value());
+ msgToSend.setStringProperty("message", message);
+ return msgToSend;
+ }
+ });
+ }
+
+ /**
+ * This method is used to send presentation upload update message.
+ *
+ * @param room conference room ID
+ * @param code the code
+ * @param totalNumSlides the total num slides
+ * @param curNumSlide the cur num slide
+ */
+ public void sendMessage(final Integer room, final ReturnCode code, final int totalNumSlides, final int curNumSlide) {
+ template.send(destination, new MessageCreator() {
+ public Message createMessage(Session session) throws JMSException {
+ Message msgToSend = session.createTextMessage("Progress update");
+ msgToSend.setIntProperty("room", room);
+ msgToSend.setIntProperty("returnCode", code.value());
+ msgToSend.setIntProperty("totalSlides", totalNumSlides);
+ msgToSend.setIntProperty("slidesCompleted", curNumSlide);
+
+ return msgToSend;
+ }
+ });
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadListener.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadListener.java
new file mode 100644
index 0000000000..ec90a7f78f
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadListener.java
@@ -0,0 +1,88 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.manager;
+
+import java.util.ArrayList;
+
+import org.bigbluebutton.fileupload.document.IProgressListener;
+// TODO: Auto-generated Javadoc
+
+/**
+ * The Class UploadListener.
+ *
+ * @author ritzalam
+ */
+public class UploadListener implements IProgressListener{
+
+ /** The room no. */
+ private String roomNo;
+
+ /** The messages. */
+ private ArrayList messages = new ArrayList ();
+
+ /* (non-Javadoc)
+ * @see org.blindsideproject.fileupload.document.IProgressListener#update(java.lang.String)
+ */
+ public void update(String newMessage)
+ {
+ }
+
+ /**
+ * Instantiates a new upload listener.
+ *
+ * @param roomNo the room no
+ */
+ public UploadListener (String roomNo)
+ {
+ this.roomNo = roomNo;
+ }
+
+ /**
+ * Adds the updated messages.
+ *
+ * @param newMessage the new message
+ */
+ public void addUpdatedMessages(String newMessage)
+ {
+ messages.add(newMessage);
+ }
+
+ /**
+ * Gets the updated messages.
+ *
+ * @return the updated messages
+ */
+ public ArrayList getUpdatedMessages()
+ {
+ return messages;
+ }
+
+ /**
+ * Sets the array list.
+ *
+ * @param messages the new array list
+ */
+ public void setArrayList(ArrayList messages)
+ {
+ this.messages = messages;
+ }
+
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadListenerManager.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadListenerManager.java
new file mode 100644
index 0000000000..2605833d1f
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadListenerManager.java
@@ -0,0 +1,89 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.manager;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+// TODO: Auto-generated Javadoc
+
+/**
+ * The Class UploadListenerManager.
+ *
+ * @author ritzalam
+ */
+public class UploadListenerManager {
+
+ /** The log. */
+ private static Log log = LogFactory.getLog(UploadListenerManager.class);
+
+ /** The room no. */
+ private String roomNo;
+
+ /** The upload listener. */
+ private UploadListener uploadListener;
+
+ /** The rooms. */
+ private Map rooms = new HashMap();
+
+ /**
+ * Gets the listener.
+ *
+ * @param roomNo the room no
+ *
+ * @return the listener
+ */
+ public UploadListener getListener (String roomNo)
+ {
+ log.info("getting upload listener..");
+ return rooms.get(roomNo);
+ }
+
+ /**
+ * Adds the listener.
+ *
+ * @param roomNo the room no
+ * @param uploadListener the upload listener
+ */
+ public void addListener(String roomNo , UploadListener uploadListener)
+ {
+ log.info("adding upload listener to UploadListenerManager...");
+ this.uploadListener = uploadListener;
+ this.roomNo = roomNo;
+ rooms.put(roomNo, this.uploadListener);
+ }
+
+ /**
+ * Creates the upload listener.
+ *
+ * @param roomNo the room no
+ *
+ * @return the upload listener
+ */
+ public UploadListener createUploadListener(String roomNo)
+ {
+ uploadListener = new UploadListener(roomNo);
+ log.info("creating upload listener..");
+ return uploadListener;
+ }
+
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadMonitor.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadMonitor.java
new file mode 100644
index 0000000000..f10e3292b6
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/manager/UploadMonitor.java
@@ -0,0 +1,83 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+
+package org.bigbluebutton.fileupload.manager;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.directwebremoting.*;
+import org.directwebremoting.proxy.dwr.Util;
+// TODO: Auto-generated Javadoc
+
+/**
+ * The Class UploadMonitor.
+ *
+ * @author ritzalam
+ */
+public class UploadMonitor {
+
+
+ /** The log. */
+ private static Log log = LogFactory.getLog(UploadMonitor.class);
+
+ /** The upload listener manager. */
+ private UploadListenerManager uploadListenerManager;
+
+ /** The upload listener. */
+ private UploadListener uploadListener;
+
+ /**
+ * Gets the update.
+ *
+ * @param roomNo the room no
+ *
+ * @return the update
+ */
+ public void getUpdate(String roomNo)
+ {
+ log.info("Enetering getUpdate...");
+ WebContext wctx = WebContextFactory.get();
+ Util utilThis = new Util(wctx.getScriptSession());
+
+ uploadListener = uploadListenerManager.getListener(roomNo);
+ log.info("Initialized uploadListener...");
+
+ for(int i = 0; i < uploadListener.getUpdatedMessages().size(); i++)
+ {
+ if(uploadListener.getUpdatedMessages().isEmpty() == false)
+ utilThis.setValue("response" , (String) uploadListener.getUpdatedMessages().get(i) );
+ }
+
+ log.info("response is being set to the updated messages");
+ }
+
+ /**
+ * Sets the upload listener manager.
+ *
+ * @param uploadListenerManager the new upload listener manager
+ */
+ public void setUploadListenerManager(UploadListenerManager uploadListenerManager) {
+ this.uploadListenerManager = uploadListenerManager;
+ }
+
+
+
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/web/FileUploadController.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/web/FileUploadController.java
new file mode 100644
index 0000000000..a6806ad8ec
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/web/FileUploadController.java
@@ -0,0 +1,377 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.web;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.bigbluebutton.fileupload.ISlideDatabase;
+import org.bigbluebutton.fileupload.SlideDescriptor;
+import org.bigbluebutton.fileupload.document.BaseException;
+import org.bigbluebutton.fileupload.document.UnsupportedPresentationDocumentException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
+
+
+// TODO: Auto-generated Javadoc
+/**
+ * This is the base class of blindside-servlet, which listen to the HTTP requests from blindside clients (Extends MultiActionController for this purpose).
+ * Requests from clients can be: File upload, Request for Slides, Request for slideXML or Request for slide descriptors
+ *
+ * This class uses FileSystemSlideManager.java and SlidePresentationDocument.java (keeping instances of those two classes).
+ * Basically, this class is used as an adapter class which relays Http client requests to other classes.
+ *
+ *
+ *
+ * Configuration that maps the Client requests to the methods of this class in blindside-servlet.xml
+ *
+ *
+ *
+ *
+ * displaySlides
+ * showSlides
+ * getXmlSlides
+ *
+ * streamImageContent
+ * processFileUpload
+ * clearDatabase
+ *
+ *
+ *
+ *
+ *
+ * @author ritzalam
+ */
+public class FileUploadController extends MultiActionController {
+
+ // register logging service
+ /** The logger. */
+ private final Log logger = LogFactory.getLog(getClass());
+
+ /** FileSystemSlideManager implements ISlideDatabase. */
+ private ISlideDatabase slideDatabase = null;
+
+ /** Used for loading saved slide presentation files before sending them to client. */
+ private SlidePresentationDocument slidePres = null;
+
+ /** Used for SlideXML creation. SlideXML holds the description of slides */
+ private static final String HEADER = "";
+
+ /** The Constant PRESENTATIONS. */
+ private static final String PRESENTATIONS = "";
+
+ /** The Constant PRESENTATIONS_END_TAG. */
+ private static final String PRESENTATIONS_END_TAG = "";
+
+ /** The Constant PRESENTATION. */
+ private static final String PRESENTATION = "";
+
+ /** The Constant PRESENTATION_END_TAG. */
+ private static final String PRESENTATION_END_TAG = "";
+
+ /** The Constant DESCRIPTION. */
+ private static final String DESCRIPTION = "";
+
+ /** The Constant DESCRIPTION_END_TAG. */
+ private static final String DESCRIPTION_END_TAG = "";
+
+ /** The Constant SLIDE. */
+ private static final String SLIDE = "";
+
+ /** The Constant SLIDE_END_TAG. */
+ private static final String SLIDE_END_TAG = "";
+
+ /** The Constant NAME. */
+ private static final String NAME = "";
+
+ /** The Constant NAME_END_TAG. */
+ private static final String NAME_END_TAG = "";
+
+ /** The Constant SOURCE. */
+ private static final String SOURCE = "";
+
+ /** The Constant HOST. */
+ private static final String HOST = "";
+
+ /** The Constant HOST_END_TAG. */
+ private static final String HOST_END_TAG = "";
+
+ /** The Constant ROOM. */
+ private static final String ROOM = "";
+
+ /** The Constant ROOM_END_TAG. */
+ private static final String ROOM_END_TAG = "";
+
+
+ /** The Constant host. */
+ private static final String host = "http://localhost:8080/bigbluebutton/file/display?name=";
+
+ /**
+ * Setter for slideDatabase.
+ *
+ * @param slideDatabase the slide database
+ */
+ public void setSlideDatabase(ISlideDatabase slideDatabase) {
+ this.slideDatabase = slideDatabase;
+ }
+
+ /**
+ * Display slides.
+ *
+ * @param request the request
+ * @param response the response
+ *
+ * @return the model and view
+ *
+ * @throws Exception the exception
+ */
+ public ModelAndView displaySlides(HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ return new ModelAndView("upload");
+
+ }
+
+ /**
+ * This method sends the List of slide descriptors for the room (given roomID) to HttpServletResponse.
+ * Calls getSlidesForRoom() method from FileSystemSlideManager class
+ *
+ * @param request HttpServletRequest
+ * @param response HttpServletResponse
+ *
+ * @return the model and view
+ *
+ * @throws Exception the exception
+ */
+ public ModelAndView showSlides(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Integer room = new Integer(request.getParameterValues("room")[0]);
+
+ logger.info("Show Slides [" + room + "]");
+
+ if (room == null) return new ModelAndView("upload");
+
+ return new ModelAndView("upload", "slides", getSlidesForRoom(room));
+ }
+
+ /**
+ * This method returns the List of slide descriptors for the room (given roomID).
+ * Calls getSlidesForRoom() method from FileSystemSlideManager class
+ *
+ * @param room RoomID
+ *
+ * @return List of SlideDescriptors of corresponding room
+ */
+ private List getSlidesForRoom(Integer room) {
+ return this.slideDatabase.getSlidesForRoom(room);
+ }
+
+ /**
+ * This handler method overwriting the method in MultiActionController.
+ * Its purpose is to stream slide XML from server to the HTTP response.
+ * It writes the response using HttpServletResponse.
+ *
+ * @param request HttpServletRequest
+ * @param response HttpServletResponse where the Slide XML is sent
+ *
+ * @return the xml slides
+ *
+ * @throws Exception the exception
+ */
+ public ModelAndView getXmlSlides(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ Integer room = new Integer(request.getParameterValues("room")[0]);
+
+ logger.info("Getting XML Slides [" + room + "]");
+ logger.info("Servlet Path = [" + request.getServletPath() + "]");
+ logger.info("Host = [" + request.getServerName() + ":" + request.getServerPort() + "]");
+ logger.info("Request URI = [" + request.getRequestURI() + "]");
+ logger.info("Request URL = [" + request.getRequestURL() + "]");
+
+ // get URL from client request
+ int lastIndex = request.getRequestURL().lastIndexOf("/");
+ String url = request.getRequestURL().substring(0, lastIndex);
+
+ // create slide presentation descriptor XML
+ String slidesXml = createXml(url, getSlidesForRoom(room));
+// String slidesXml = this.slideDatabase.getSlidesInXml(room);
+
+ logger.info("XML Slides = " + slidesXml);
+
+ // before sending the xml string to the client,
+ // set content type and header
+ response.setContentType("text/xml");
+ //Ask browser not to chache images
+ response.setHeader("Cache-Control", "no-cache");
+
+ // get ServletOutputStream from HttpServletResponse
+ ServletOutputStream out = response.getOutputStream();
+ // send the xml string to client
+ out.print(slidesXml);
+ out.flush();
+ out.close();
+ return null;
+ }
+
+ /**
+ * This method creates an xml formatted string (Slide description) that is returned to the client.
+ *
+ * @param url URL address from client's HttpRequest
+ * @param slides List of SlideDescriptors
+ *
+ * @return SlidesXML
+ */
+ private String createXml(String url, List slides) {
+
+ String displayUrl = url + "/display?name=";
+
+ String slidesXml = HEADER + "\n";
+ slidesXml += PRESENTATIONS + "\n" + "\t" + PRESENTATION + "\n";
+ slidesXml += "\t\t" + DESCRIPTION;
+
+ String description = "Presentation Slides";
+ slidesXml += description + DESCRIPTION_END_TAG + "\n";
+ logger.info("slidesXml = " + slidesXml);
+
+ for (Iterator it = slides.iterator(); it.hasNext();) {
+ slidesXml += SLIDE + NAME;
+ SlideDescriptor slide = (SlideDescriptor) it.next();
+ slidesXml += slide.getName() + NAME_END_TAG;
+ slidesXml += SOURCE + displayUrl + slide.getName() + SOURCE_END_TAG;
+ slidesXml += SLIDE_END_TAG + "\n";
+ }
+
+ slidesXml += PRESENTATION_END_TAG + PRESENTATIONS_END_TAG;
+
+ return slidesXml;
+ }
+
+
+ /*
+ * Don't do this for now. Need to get slides as quickly as possible.
+ * Let's do this when we can provide feedback to user through DWR.
+ *
+ public ModelAndView showThumbnails(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ String room = request.getParameterValues("room")[0];
+
+ logger.info("Show Thumbnails [" + room + "]");
+
+ return new ModelAndView("imageList", "slides",
+ this.slideDatabase.getThumbnailsForRoom(room));
+ }
+*/
+
+ /**
+ * This handler method overwriting the method in MultiActionController.
+ * Its purpose is to stream slide content from server to the HTTP response.
+ * It writes the response using HttpServletResponse parameter.
+ *
+ * @param request HttpServletRequest
+ * @param response HttpServletResponse where the image is sent
+ *
+ * @return the model and view
+ *
+ * @throws Exception the exception
+ */
+
+ public ModelAndView streamImageContent(HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ String filename = request.getParameterValues("name")[0];
+ int firstDash = filename.indexOf('-');
+ Integer room = new Integer(filename.substring(0, firstDash));
+
+ // Ask browser not to chache images
+ response.setHeader("Cache-Control", "no-cache");
+ // call streamImage method in FileSystemSlideManager to stream slide to client
+ this.slideDatabase.streamImage(room, filename, response.getOutputStream());
+
+ return null;
+ }
+
+ /**
+ * This method is called when the client HTTP request for file upload.
+ * Calls saveUploadedFile() from FileSystemManager class to save uploaded pdf file from client.
+ * Also creates Slide description XML file by calling createDefaultXml() from FileSystemManager class
+ *
+ * @param request the request
+ * @param response HttpServletResponse
+ *
+ * @return the model and view
+ *
+ * @throws Exception the exception
+ */
+ public ModelAndView processFileUpload(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ System.out.println("Processing upload");
+ MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+ // MultipartFile is a copy of file in memory, not in file system
+ MultipartFile multipartFile = multipartRequest.getFile("pres");
+ // get Room ID from HttpServletRequest
+ Integer conferenceRoom = new Integer(request.getParameterValues("room")[0]);
+
+ try {
+ // save MultipartFile in server fileSystem by calling saveUploadedFile in FileSystemSlideManager class
+ File file = this.slideDatabase.saveUploadedFile(multipartFile, conferenceRoom);
+ this.slideDatabase.createDefaultXml(conferenceRoom);
+ slidePres.load(file, new Integer(conferenceRoom));
+ } catch (IOException e) {
+ logger.error("Failed to save image into filesystem.\n" + e.getMessage());
+ } catch (UnsupportedPresentationDocumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return new ModelAndView("upload", "room", conferenceRoom);
+ }
+
+ /**
+ * Clear database.
+ *
+ * @param request the request
+ * @param response the response
+ *
+ * @return the model and view
+ *
+ * @throws Exception the exception
+ */
+ public ModelAndView clearDatabase(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ return new ModelAndView("redirect:imageList");
+ }
+
+ /**
+ * Setter for slidePres.
+ *
+ * @param slidePres the slide pres
+ */
+ public void setSlidePres(SlidePresentationDocument slidePres) {
+ this.slidePres = slidePres;
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/web/SlidePresentationDocument.java b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/web/SlidePresentationDocument.java
new file mode 100644
index 0000000000..e89ddc4da0
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/src/org/bigbluebutton/fileupload/web/SlidePresentationDocument.java
@@ -0,0 +1,292 @@
+/**
+* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+*
+* Copyright (c) 2008 by respective authors (see below).
+*
+* This program 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 2.1 of the License, or (at your option) any later
+* version.
+*
+* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*/
+
+package org.bigbluebutton.fileupload.web;
+
+import org.bigbluebutton.fileupload.document.UnsupportedPresentationDocumentException;
+import org.bigbluebutton.fileupload.document.ZipDocumentHandler;
+import org.bigbluebutton.fileupload.document.impl.FileSystemSlideManager;
+import org.bigbluebutton.fileupload.document.impl.PdfToSwfDocumentHandler;
+import org.bigbluebutton.fileupload.document.impl.PptDocumentHandler;
+import org.bigbluebutton.fileupload.document.impl.PptToSwfDocumentHandler;
+import org.bigbluebutton.fileupload.document.impl.ReturnCode;
+import org.bigbluebutton.fileupload.document.impl.UpdatesMessageSender;
+import org.bigbluebutton.fileupload.manager.UploadListener;
+import org.bigbluebutton.fileupload.manager.UploadListenerManager;
+import org.bigbluebutton.fileupload.manager.UploadMonitor;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import org.springframework.jms.core.JmsTemplate;
+import org.springframework.jms.core.MessageCreator;
+
+import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
+
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This class is used to convert the uploaded presentation slide to SWF file format.
+ * It assigns the converting requests to appropriate document handler class.
+ *
+ * @author ritzalam
+ */
+
+
+public class SlidePresentationDocument {
+
+ /** The log. */
+ private static Log log = LogFactory.getLog(SlidePresentationDocument.class);
+
+ /** The slide manager. */
+ private FileSystemSlideManager slideManager = null;
+
+ /** The ppt document handler. */
+ private PptDocumentHandler pptDocumentHandler = null;
+
+ /** The zip document handler. */
+ private ZipDocumentHandler zipDocumentHandler = null;
+ // handler for converting ppt to swf
+ /** The ppt to swf handler. */
+ private PptToSwfDocumentHandler pptToSwfHandler = null;
+
+ // handler for converting pdf to swf
+ /** The pdf to swf handler. */
+ private PdfToSwfDocumentHandler pdfToSwfHandler = null;
+
+
+ /** The uploaded file. */
+ private File uploadedFile = null;
+ // directory of the file to be uploaded to memory from file System
+ /** The dest dir. */
+ private File destDir = null;
+
+ /** The room. */
+ private Integer room;
+ // updatesMsgSender for sending updates to bigbluebutton red5 server
+ /** The updates msg sender. */
+ private UpdatesMessageSender updatesMsgSender = null;
+
+ /**
+ * This method takes care of loading the slides in the extracted folder.
+ *
+ * @param uploaded the uploaded
+ * @param room the room
+ *
+ * @throws UnsupportedPresentationDocumentException the unsupported presentation document exception
+ */
+ public void load(File uploaded, Integer room)
+ throws UnsupportedPresentationDocumentException
+ {
+ if ((uploaded.getName().toLowerCase().endsWith(".pdf")) ||
+ (uploaded.getName().toLowerCase().endsWith(".ppt")))
+ {
+ this.uploadedFile = uploaded;
+ this.room = room;
+
+ destDir = new File(slideManager.getBaseDirectory() + File.separator
+ + room + File.separator + slideManager.getExtractedFolder());
+
+ // Clean the directory of remnant files.
+ if (destDir.exists()) {
+ log.info("Directroy not empty = [" + destDir.getAbsolutePath() + "]- deleting");
+
+ /** This delete seems not to work. **/
+ // destDir.delete();
+ // Let's just loop through the file and delete one-by-one
+ File[] files = destDir.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ files[i].delete();
+ }
+
+ } else {
+ // Create a clean directory
+ destDir.mkdirs();
+ }
+
+ log.info("Loading file from [" + uploadedFile.getName() + "]");
+ // create and start DocumentLoader thread to convert presentation slides to swf format
+ DocumentLoader loader = new DocumentLoader();
+ Thread docLoader = new Thread(loader, "Document Loader");
+ docLoader.start();
+ } else {
+ // send unsupported file format error
+ updatesMsgSender.sendMessage(room, ReturnCode.WRONG_FORMAT, "Unsupported file type.");
+
+ throw new UnsupportedPresentationDocumentException("Unsupported file type.");
+ }
+ }
+
+ /**
+ * setter for slideManger.
+ *
+ * @param slideManager the slide manager
+ */
+ public void setSlideManager(FileSystemSlideManager slideManager) {
+ this.slideManager = slideManager;
+ }
+
+ /**
+ * setter for pptDocumentHandler.
+ *
+ * @param pptDocumentHandler the ppt document handler
+ */
+ public void setPptDocumentHandler(PptDocumentHandler pptDocumentHandler) {
+ this.pptDocumentHandler = pptDocumentHandler;
+ }
+
+ /**
+ * Sets the zip document handler.
+ *
+ * @param zipDocumentHandler the new zip document handler
+ */
+ public void setZipDocumentHandler(ZipDocumentHandler zipDocumentHandler) {
+ this.zipDocumentHandler = zipDocumentHandler;
+ }
+
+ /**
+ * Internal class used to perform the background loading of a slide presentation.
+ */
+ private class DocumentLoader implements Runnable {
+
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+
+ try {
+
+ if (uploadedFile.getName().toLowerCase().endsWith(".pdf")) {
+ // converting pdf format slide presentation
+ pdfToSwfHandler.convert(room, uploadedFile, destDir);
+ } else if (uploadedFile.getName().toLowerCase().endsWith(".ppt")) {
+ updatesMsgSender.sendMessage(room, ReturnCode.UPDATE, "Converting Powerpoint document.");
+// if (pptDocumentHandler == null)
+// log.error("PPTHandler == NULL!!!!");
+// pptDocumentHandler.convert(uploadedFile, destDir);
+ // converting ppt format slide presentation
+ pptToSwfHandler.convert(room, uploadedFile, destDir);
+ } else {
+ log.error("Unsupported File.");
+ updatesMsgSender.sendMessage(room, ReturnCode.WRONG_FORMAT, "Unsupported file type.");
+ return;
+ }
+
+ ArrayList generatedFiles = new ArrayList(0);
+ log.info("Loading slides from '" + destDir + "'.");
+
+ generatedFiles = slideManager.getExtractedSlides(destDir.getAbsolutePath());
+
+ // Update the user if no slides were generated (which is unlikely)
+ if (generatedFiles.size() < 1) {
+ if (log.isErrorEnabled()) {
+ log.error("Failed to generate slides.");
+ }
+
+ return;
+ }
+/*
+ File currentFile;
+
+ * Don't do this for now. Need to get slides as quickly as possible.
+ * Let's do this when we can provide feedback to user through DWR.
+ // Create thumnails
+ String thumbName = "thumb-";
+
+ for (int i = 0; i < generatedFiles.size(); i++) {
+ currentFile = (File) generatedFiles.get(i);
+ String filePath = currentFile.getParent();
+ String fileName = currentFile.getName();
+
+ File thumbNail = new File(filePath + File.separator + thumbName + fileName);
+
+ try {
+ slideManager.resizeImage(currentFile, thumbNail, 1.0f, 150);
+ log.info("Creating thumbnail '" + currentFile + "'.");
+
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Failed to create icon " + currentFile.getName());
+ }
+ }
+ }
+*/
+/* // Now resize the slides
+ for (int i = 0; i < generatedFiles.size(); i++) {
+ currentFile = (File) generatedFiles.get(i);
+ try {
+ slideManager.resizeImage(currentFile, currentFile, 1.0f, 400);
+ log.info("Resizing image '" + currentFile + "'.");
+
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Failed to resize image " + currentFile.getName());
+ }
+ }
+ }
+*/
+ String slidesXml = slideManager.createXml(room);
+ updatesMsgSender.sendMessage(room, ReturnCode.SUCCESS, slidesXml);
+
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Could not load document: \n ");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Sets the ppt to swf handler.
+ *
+ * @param pptToSwfHandler the new ppt to swf handler
+ */
+ public void setPptToSwfHandler(PptToSwfDocumentHandler pptToSwfHandler) {
+ this.pptToSwfHandler = pptToSwfHandler;
+ }
+
+ /**
+ * Sets the pdf to swf handler.
+ *
+ * @param pdfToSwfHandler the new pdf to swf handler
+ */
+ public void setPdfToSwfHandler(PdfToSwfDocumentHandler pdfToSwfHandler) {
+ this.pdfToSwfHandler = pdfToSwfHandler;
+ }
+
+ /**
+ * Sets the updates msg sender.
+ *
+ * @param updatesMsgSender the new updates msg sender
+ */
+ public void setUpdatesMsgSender(UpdatesMessageSender updatesMsgSender) {
+ this.updatesMsgSender = updatesMsgSender;
+ }
+}
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/applicationContext.xml b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000000..26a47e9e57
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/applicationContext.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+ /WEB-INF/bigbluebutton.properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tcp://localhost:61616
+
+
+
+
+
+
+
+
+
+
+
+
+ UpdatesQueue
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/bigbluebutton-servlet.xml b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/bigbluebutton-servlet.xml
new file mode 100644
index 0000000000..ac4466aa0a
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/bigbluebutton-servlet.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ displaySlides
+ showSlides
+ getXmlSlides
+
+ streamImageContent
+ processFileUpload
+ clearDatabase
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/bigbluebutton.properties b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/bigbluebutton.properties
new file mode 100644
index 0000000000..403e137e40
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/bigbluebutton.properties
@@ -0,0 +1,18 @@
+
+# These properties are for OpenOffice to be used for document
+# conversion (e.g. PPT to JPG)
+# Note: OpenOffice is now optional unless you want to support PPT uploads.
+openoffice.host=localhost
+openoffice.port=8100
+
+# Edit to point to your pdf2swf executable
+swftoolLocation=c:/tools/swftools/pdf2swf
+
+# Edit to point to your pdftk executable
+pdfExtractor=c:/tools/pdftk/pdftk
+
+# The base directory where uploaded slides are extracted
+presBaseDirectory=c:/upload
+extractedFolder=extracted
+
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/dwr.xml b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/dwr.xml
new file mode 100644
index 0000000000..e2cbf47748
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/dwr.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/geronimo-web.xml b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/geronimo-web.xml
new file mode 100644
index 0000000000..6950381ed8
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/geronimo-web.xml
@@ -0,0 +1,6 @@
+
+
+ /fileupload
+ true
+
\ No newline at end of file
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/jdbc.properties b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/jdbc.properties
new file mode 100644
index 0000000000..d7057078ef
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/jdbc.properties
@@ -0,0 +1,15 @@
+# Properties file with JDBC-related settings.
+# Applied by PropertyPlaceholderConfigurer from "applicationContext.xml".
+# Targeted at system administrators, to avoid touching the context XML files.
+
+jdbc.driverClassName=com.mysql.jdbc.Driver
+jdbc.url=jdbc:mysql://localhost:3306/imagedb
+jdbc.username=admin
+jdbc.password=
+imageDatabase.lobHandler=defaultLobHandler
+
+#jdbc.driverClassName=oracle.jdbc.OracleDriver
+#jdbc.url=jdbc:oracle:thin:@localhost:1521:imagedb
+#jdbc.username=scott
+#jdbc.password=tiger
+#imageDatabase.lobHandler=oracleLobHandler
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/activation.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/activation.jar
new file mode 100644
index 0000000000..6f193711e1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/activation.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/activemq-core-4.1.1.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/activemq-core-4.1.1.jar
new file mode 100644
index 0000000000..f003304b9c
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/activemq-core-4.1.1.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/backport-util-concurrent-2.1.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/backport-util-concurrent-2.1.jar
new file mode 100644
index 0000000000..96ab68922d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/backport-util-concurrent-2.1.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/bigbluebutton.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/bigbluebutton.jar
new file mode 100644
index 0000000000..3833fc3254
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/bigbluebutton.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/blindside.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/blindside.jar
new file mode 100644
index 0000000000..3262c8ec29
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/blindside.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/c3p0-0.9.0.4.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/c3p0-0.9.0.4.jar
new file mode 100644
index 0000000000..79a8009a7a
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/c3p0-0.9.0.4.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-collections.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-collections.jar
new file mode 100644
index 0000000000..75580be255
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-collections.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-fileupload.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-fileupload.jar
new file mode 100644
index 0000000000..fc5763d0d3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-fileupload.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-io.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-io.jar
new file mode 100644
index 0000000000..624fc1a724
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-io.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-logging.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-logging.jar
new file mode 100644
index 0000000000..2ff9bbd90d
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/commons-logging.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/cos.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/cos.jar
new file mode 100644
index 0000000000..6a4a1ff5f6
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/cos.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/dwr.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/dwr.jar
new file mode 100644
index 0000000000..8444d5205b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/dwr.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/freemarker.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/freemarker.jar
new file mode 100644
index 0000000000..737bfb592e
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/freemarker.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/geronimo-j2ee-management_1.0_spec-1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/geronimo-j2ee-management_1.0_spec-1.0.jar
new file mode 100644
index 0000000000..155e8f6d5f
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/geronimo-j2ee-management_1.0_spec-1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/geronimo-jms_1.1_spec-1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/geronimo-jms_1.1_spec-1.0.jar
new file mode 100644
index 0000000000..42bf403e28
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/geronimo-jms_1.1_spec-1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/jodconverter-2.2.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/jodconverter-2.2.0.jar
new file mode 100644
index 0000000000..f0fb516d05
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/jodconverter-2.2.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/juh-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/juh-2.1.0.jar
new file mode 100644
index 0000000000..4fe4fb46f3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/juh-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/jurt-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/jurt-2.1.0.jar
new file mode 100644
index 0000000000..4f3169e97b
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/jurt-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/log4j-1.2.14.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/log4j-1.2.14.jar
new file mode 100644
index 0000000000..6251307190
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/log4j-1.2.14.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/mail.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/mail.jar
new file mode 100644
index 0000000000..9d08d0aba0
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/mail.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/mysql.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/mysql.jar
new file mode 100644
index 0000000000..3148a353c3
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/mysql.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/quartz-1.6.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/quartz-1.6.0.jar
new file mode 100644
index 0000000000..fb653ccc03
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/quartz-1.6.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/ridl-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/ridl-2.1.0.jar
new file mode 100644
index 0000000000..e07cca09d1
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/ridl-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/slf4j-api-1.4.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/slf4j-api-1.4.0.jar
new file mode 100644
index 0000000000..9ce2532aa4
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/slf4j-api-1.4.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/slf4j-jdk14-1.4.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/slf4j-jdk14-1.4.0.jar
new file mode 100644
index 0000000000..579c9f60ce
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/slf4j-jdk14-1.4.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/spring.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/spring.jar
new file mode 100644
index 0000000000..477af648ab
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/spring.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/unoil-2.1.0.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/unoil-2.1.0.jar
new file mode 100644
index 0000000000..df18fbbd46
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/unoil-2.1.0.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/velocity-1.4.jar b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/velocity-1.4.jar
new file mode 100644
index 0000000000..04ec9d2f85
Binary files /dev/null and b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/lib/velocity-1.4.jar differ
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/log4j.properties b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/log4j.properties
new file mode 100644
index 0000000000..09e3550045
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/log4j.properties
@@ -0,0 +1,16 @@
+# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
+# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
+log4j.rootLogger=INFO, stdout, logfile
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
+
+log4j.appender.logfile=org.apache.log4j.RollingFileAppender
+log4j.appender.logfile.File=${fileupload.root}/WEB-INF/fileupload.log
+log4j.appender.logfile.MaxFileSize=512KB
+# Keep three backup files.
+log4j.appender.logfile.MaxBackupIndex=3
+# Pattern to output: date priority [category] - message
+log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
+log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/mail.properties b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/mail.properties
new file mode 100644
index 0000000000..289f191c5a
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/mail.properties
@@ -0,0 +1,7 @@
+# Properties file with mail-related settings, used for scheduled info emails.
+# Applied by PropertyPlaceholderConfigurer from "applicationContext.xml".
+# Targeted at system administrators, to avoid touching the context XML files.
+
+mail.host=
+mail.from=imagedb@springframework.org
+mail.to=
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/schedulingContext-quartz.xml b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/schedulingContext-quartz.xml
new file mode 100644
index 0000000000..1a354c34d6
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/schedulingContext-quartz.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/schedulingContext-timer.xml b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/schedulingContext-timer.xml
new file mode 100644
index 0000000000..37f1c69c72
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/schedulingContext-timer.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/views/imageList.ftl b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/views/imageList.ftl
new file mode 100644
index 0000000000..922a583c88
--- /dev/null
+++ b/bigbluebutton-servlet/bigbluebutton-servlet/war/WEB-INF/views/imageList.ftl
@@ -0,0 +1,28 @@
+
+
+
+
+
+<#list images as image>
+