You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/05/18 05:36:08 UTC

[01/26] openmeetings git commit: .gitattributes is added to normalize line endings

Repository: openmeetings
Updated Branches:
  refs/heads/3.3.x 68d078cd0 -> 1cb3518f0


.gitattributes is added to normalize line endings


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/11e8d9dc
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/11e8d9dc
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/11e8d9dc

Branch: refs/heads/3.3.x
Commit: 11e8d9dc5d2441b6394543d9f0e7b2109499c5e7
Parents: 68d078c
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu May 18 12:34:12 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu May 18 12:34:12 2017 +0700

----------------------------------------------------------------------
 .gitattributes | 8 ++++++++
 1 file changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/11e8d9dc/.gitattributes
----------------------------------------------------------------------
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..f797f9a
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,8 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text=auto
+
+*.java text
+*.xml  text
+
+*.png binary
+*.jpg binary


[14/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/JiraPlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/JiraPlugin.xml b/openmeetings-server/src/site/xdoc/JiraPlugin.xml
index 8224fc0..9a81d4d 100644
--- a/openmeetings-server/src/site/xdoc/JiraPlugin.xml
+++ b/openmeetings-server/src/site/xdoc/JiraPlugin.xml
@@ -1,51 +1,51 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Jira Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Jira Plugin for OpenMeetings">
-			<p>Sources are available at <a href="https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/jira">https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/jira</a></p>
-			<p>
-				To get SNAPSHOTS for testing please contact <a href="mail-lists.html">Mailing lists</a>
-			</p>
-		</section>
-
-		<section name="Features">
-			<p>The plugin contains the following features: </p>
-			<ul>
-				<li>Create videoconference rooms through Jira: </li>
-				<li>
-					<ol>
-						<li>Integrated with Jira issues </li>
-						<li>Configurable room type </li>
-					</ol>
-				</li>
-			</ul>
-		</section>
-
-		<section name="Demo video">
-			<p>The demo video of Jira plugin show you the plugin in action </p>
-			<iframe width="640" height="390" src="http://www.youtube.com/embed/xBdYj-OZvlc" frameborder="0" allowfullscreen=""></iframe>
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Jira Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Jira Plugin for OpenMeetings">
+			<p>Sources are available at <a href="https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/jira">https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/jira</a></p>
+			<p>
+				To get SNAPSHOTS for testing please contact <a href="mail-lists.html">Mailing lists</a>
+			</p>
+		</section>
+
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through Jira: </li>
+				<li>
+					<ol>
+						<li>Integrated with Jira issues </li>
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Demo video">
+			<p>The demo video of Jira plugin show you the plugin in action </p>
+			<iframe width="640" height="390" src="http://www.youtube.com/embed/xBdYj-OZvlc" frameborder="0" allowfullscreen=""></iframe>
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/JoomlaPlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/JoomlaPlugin.xml b/openmeetings-server/src/site/xdoc/JoomlaPlugin.xml
index a09f1cd..1baf855 100644
--- a/openmeetings-server/src/site/xdoc/JoomlaPlugin.xml
+++ b/openmeetings-server/src/site/xdoc/JoomlaPlugin.xml
@@ -1,60 +1,60 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Joomla Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="OpenMeetings Plugin for Joomla">
-			<p>
-				Plugin for Joomla currently is not open source. 
-				Please contact <a href="commercial-support.html" target="_blank" rel="nofollow">Commercial Support</a> to get it. 
-			</p>			
-		</section>
-		<section name="Features">
-			<p>The plugin contains the following features: </p>
-			<ul>
-				<li>Create videoconference rooms from Joomla: </li>
-				<li>
-					<ol>
-						<li>Create rooms</li>										
-						<li>Enter the room</li>
-					</ol>
-				</li>
-				<li>Access recordings from Joomla: </li>
-				<li>
-					<ol>
-						<li>Download recordings</li>										
-					</ol>
-				</li>
-			</ul>
-		</section>
-		<section name="Demo video">			
-			<div>
-				<b>OpenMeetings Joomla Plugin Installation</b><br/>              
-				<iframe width="640" height="360" src="https://www.youtube.com/embed/jt8ejgtHavc?feature=player_embedded" frameborder="0" allowfullscreen=""></iframe>
-			</div>
-			<br/>
-			<div>
-				<b>OpenMeetings Integration with Joomla</b><br/>              
-				<iframe width="640" height="360" src="https://www.youtube.com/embed/H61N0pfLusA?feature=player_embedded" frameborder="0" allowfullscreen=""></iframe>
-			</div>
-		</section>
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Joomla Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="OpenMeetings Plugin for Joomla">
+			<p>
+				Plugin for Joomla currently is not open source. 
+				Please contact <a href="commercial-support.html" target="_blank" rel="nofollow">Commercial Support</a> to get it. 
+			</p>			
+		</section>
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms from Joomla: </li>
+				<li>
+					<ol>
+						<li>Create rooms</li>										
+						<li>Enter the room</li>
+					</ol>
+				</li>
+				<li>Access recordings from Joomla: </li>
+				<li>
+					<ol>
+						<li>Download recordings</li>										
+					</ol>
+				</li>
+			</ul>
+		</section>
+		<section name="Demo video">			
+			<div>
+				<b>OpenMeetings Joomla Plugin Installation</b><br/>              
+				<iframe width="640" height="360" src="https://www.youtube.com/embed/jt8ejgtHavc?feature=player_embedded" frameborder="0" allowfullscreen=""></iframe>
+			</div>
+			<br/>
+			<div>
+				<b>OpenMeetings Integration with Joomla</b><br/>              
+				<iframe width="640" height="360" src="https://www.youtube.com/embed/H61N0pfLusA?feature=player_embedded" frameborder="0" allowfullscreen=""></iframe>
+			</div>
+		</section>
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/LanguageEditor.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/LanguageEditor.xml b/openmeetings-server/src/site/xdoc/LanguageEditor.xml
index 9c387e6..e2176d8 100644
--- a/openmeetings-server/src/site/xdoc/LanguageEditor.xml
+++ b/openmeetings-server/src/site/xdoc/LanguageEditor.xml
@@ -1,59 +1,59 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Language Editor</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Language Editor">
-
-			<p>Features:</p>
-			<ul>
-				<li>edit the labels of any language, changes will take effect as
-					soon as you re-login
-				</li>
-				<li>add new languages (for example to fit your co-operative design
-					and language of your company)
-				</li>
-				<li>export the language-files to an XML File (these language Files
-					can be used for your next installation or as contribution to the
-					project)
-				</li>
-				<li>
-					import of language files (
-					<i>you should restart the server if you face problems, as the
-						database cache might be invalid
-					</i>
-					)
-				</li>
-			</ul>
-			<p>Screen from the Administration Panel: </p>
-			<p>
-				<a class="fancybox-buttons" href="images/langeditor_screen_v2.png">
-					<img src="images/langeditor_screen_v2.png" alt="" width="475"
-						height="324" />
-				</a>
-			</p>
-
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Language Editor</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Language Editor">
+
+			<p>Features:</p>
+			<ul>
+				<li>edit the labels of any language, changes will take effect as
+					soon as you re-login
+				</li>
+				<li>add new languages (for example to fit your co-operative design
+					and language of your company)
+				</li>
+				<li>export the language-files to an XML File (these language Files
+					can be used for your next installation or as contribution to the
+					project)
+				</li>
+				<li>
+					import of language files (
+					<i>you should restart the server if you face problems, as the
+						database cache might be invalid
+					</i>
+					)
+				</li>
+			</ul>
+			<p>Screen from the Administration Panel: </p>
+			<p>
+				<a class="fancybox-buttons" href="images/langeditor_screen_v2.png">
+					<img src="images/langeditor_screen_v2.png" alt="" width="475"
+						height="324" />
+				</a>
+			</p>
+
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/LdapAndADS.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/LdapAndADS.xml b/openmeetings-server/src/site/xdoc/LdapAndADS.xml
index 02b0a0d..c43e3ee 100644
--- a/openmeetings-server/src/site/xdoc/LdapAndADS.xml
+++ b/openmeetings-server/src/site/xdoc/LdapAndADS.xml
@@ -1,96 +1,96 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>LDAP/ADS configuration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Ubuntu Installation">
-			<div>
-				Run the commands
-				<source>
-<![CDATA[
-sudo apt-get install slapd ldap-utils
-]]>
-				</source>
-			</div>
-			<div>
-				Modify file <tt>/etc/ldap/ldap.conf</tt> add highlighted attributes:
-				<source>
-<![CDATA[
-#
-# LDAP Defaults
-#
-# See ldap.conf(5) for details
-# This file should be world readable but not world writable.
-BASE    dc=unixmen,dc=com
-URI     ldap://192.168.1.200
-#SIZELIMIT      12
-#TIMELIMIT      15
-#DEREF          never
-# TLS certificates (needed for GnuTLS)
-TLS_CACERT      /etc/ssl/certs/ca-certificates.crt
-]]>
-				</source>
-			</div>
-			<div>
-				Run the Configuration assistant: <tt>sudo dpkg-reconfigure slapd</tt>
-			</div>
-			<div>
-				Test LDAP server: <tt>ldapsearch -x</tt>
-			</div>
-			<div>
-				Add/Edit/Delete users: <tt>sudo apt-get install phpldapadmin</tt>
-			</div>
-			<div>
-				Detailed reference: <a href="http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/">http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/</a>
-			</div>
-		</section>
-		<section name="LDAP and Active Directory Integration">
-			<p> In: $RED5_HOME/webapps/openmeetings/conf<br/>
-				you will find sample configurations for LDAP and Active Directory. The
-				nature of those Directory Servers are that they are individual for
-				every organization, so you have to modify of course at least the
-				path to your user-base et cetera.<br/>
-				<br/>
-				To activate any of those configurations you have to login into
-				OpenMeetings, goto Administration > Ldap.
-			</p>
-			<a class="fancybox-buttons" href="images/ldap_screen.png">
-				<img src="images/ldap_screen.png" alt="" width="442" height="282" />
-			</a>
-			<p>
-				Import is that you configure LDAP_SEARCH_PATH so that it points to the node of your directory server that contains the users
-			</p>
-			<p>
-				If you have multiple search paths you can either try to define a search path that points to multiple nodes or define multiple ldap configurations.
-			</p>
-			<p>
-				Successful integration is also reported with Novell eDirectory
-			</p>
-			<p>
-				You can configure multiple domains or different user-paths in the Administration of OpenMeetings. 
-			</p>
-			<p>
-				<b>NOTE: </b>You should specify file name <i>RELATIVE</i> to <tt>$RED5_HOME/webapps/openmeetings/conf</tt>
-			</p>
-		</section>
-
-	</body>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>LDAP/ADS configuration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Ubuntu Installation">
+			<div>
+				Run the commands
+				<source>
+<![CDATA[
+sudo apt-get install slapd ldap-utils
+]]>
+				</source>
+			</div>
+			<div>
+				Modify file <tt>/etc/ldap/ldap.conf</tt> add highlighted attributes:
+				<source>
+<![CDATA[
+#
+# LDAP Defaults
+#
+# See ldap.conf(5) for details
+# This file should be world readable but not world writable.
+BASE    dc=unixmen,dc=com
+URI     ldap://192.168.1.200
+#SIZELIMIT      12
+#TIMELIMIT      15
+#DEREF          never
+# TLS certificates (needed for GnuTLS)
+TLS_CACERT      /etc/ssl/certs/ca-certificates.crt
+]]>
+				</source>
+			</div>
+			<div>
+				Run the Configuration assistant: <tt>sudo dpkg-reconfigure slapd</tt>
+			</div>
+			<div>
+				Test LDAP server: <tt>ldapsearch -x</tt>
+			</div>
+			<div>
+				Add/Edit/Delete users: <tt>sudo apt-get install phpldapadmin</tt>
+			</div>
+			<div>
+				Detailed reference: <a href="http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/">http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/</a>
+			</div>
+		</section>
+		<section name="LDAP and Active Directory Integration">
+			<p> In: $RED5_HOME/webapps/openmeetings/conf<br/>
+				you will find sample configurations for LDAP and Active Directory. The
+				nature of those Directory Servers are that they are individual for
+				every organization, so you have to modify of course at least the
+				path to your user-base et cetera.<br/>
+				<br/>
+				To activate any of those configurations you have to login into
+				OpenMeetings, goto Administration > Ldap.
+			</p>
+			<a class="fancybox-buttons" href="images/ldap_screen.png">
+				<img src="images/ldap_screen.png" alt="" width="442" height="282" />
+			</a>
+			<p>
+				Import is that you configure LDAP_SEARCH_PATH so that it points to the node of your directory server that contains the users
+			</p>
+			<p>
+				If you have multiple search paths you can either try to define a search path that points to multiple nodes or define multiple ldap configurations.
+			</p>
+			<p>
+				Successful integration is also reported with Novell eDirectory
+			</p>
+			<p>
+				You can configure multiple domains or different user-paths in the Administration of OpenMeetings. 
+			</p>
+			<p>
+				<b>NOTE: </b>You should specify file name <i>RELATIVE</i> to <tt>$RED5_HOME/webapps/openmeetings/conf</tt>
+			</p>
+		</section>
+
+	</body>
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/MSSQLConfig.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/MSSQLConfig.xml b/openmeetings-server/src/site/xdoc/MSSQLConfig.xml
index 7d6e6a6..26e2a78 100644
--- a/openmeetings-server/src/site/xdoc/MSSQLConfig.xml
+++ b/openmeetings-server/src/site/xdoc/MSSQLConfig.xml
@@ -1,76 +1,76 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>MSSQL Configuration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="MSSQL Configuration">
-
-			<subsection name="Before you start">
-				<ul>
-					<li>You need Openmeetings 2.2 or later to use MSSQL integration</li>
-					<li>Make sure that you have set utf8 as collation for the openmeetings database
-						before you start the installation process of OpenMeetings!
-					</li>
-					<li>
-						make sure MSSQL is listening on TCP/IP connections! and username/password 
-						authentication is enabled for it
-						<br />
-						To verify if MSSQL connection is working: OpenMeetings will
-						automatically create all tables in the database and all tables
-						should have utf8 as encoding/collation!
-					</li>
-					<li>If you encounter issues, you can drop the db and then run
-						the web based installer again
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="Steps todo">
-				<ul>
-					<li>
-						You need to download the JDBC driver from Microsoft
-						<a href="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774" target="_blank"
-							rel="nofollow">http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774</a>
-						Unarchive appropriate file from it (sqljdbc.jar or sqljdbc4.jar) and place it into:
-						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
-					</li>
-					<li>
-						Run red5-service and goto the web-based installer:
-						http://localhost:5080/openmeetings/install
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="MSSQL Sample Configuration">
-				<p>
-					There is a sample configuration for MySQL that ships with
-					every release in:
-					<br />
-					/webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
-				</p>
-			</subsection>
-
-
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>MSSQL Configuration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="MSSQL Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>You need Openmeetings 2.2 or later to use MSSQL integration</li>
+					<li>Make sure that you have set utf8 as collation for the openmeetings database
+						before you start the installation process of OpenMeetings!
+					</li>
+					<li>
+						make sure MSSQL is listening on TCP/IP connections! and username/password 
+						authentication is enabled for it
+						<br />
+						To verify if MSSQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db and then run
+						the web based installer again
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						You need to download the JDBC driver from Microsoft
+						<a href="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774" target="_blank"
+							rel="nofollow">http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774</a>
+						Unarchive appropriate file from it (sqljdbc.jar or sqljdbc4.jar) and place it into:
+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="MSSQL Sample Configuration">
+				<p>
+					There is a sample configuration for MySQL that ships with
+					every release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/ManualTesting.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/ManualTesting.xml b/openmeetings-server/src/site/xdoc/ManualTesting.xml
index c319aac..326c47c 100644
--- a/openmeetings-server/src/site/xdoc/ManualTesting.xml
+++ b/openmeetings-server/src/site/xdoc/ManualTesting.xml
@@ -1,502 +1,502 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Manual Testing</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Introduction">
-
-			<p>
-				Below is a test plan for the OpenMeetings 2.1 pre-release testing.
-			</p>
-		</section>
-
-		<section name="Details">
-
-			<ol>
-				<li>
-					<b>User GUI tests</b>
-					<ol>
-						<li>
-							Login/logout 
-							<ol>
-								<li>Password recovering </li>
-								<li>Self-registering </li>
-								<li>"Visit Apache OpenMeetings" link </li>
-								<li>Enter wrong login/password </li>
-								<li>Enter correct login/password </li>
-								<li>Exit the system by click the Exit button </li>
-							</ol>
-						</li>
-						<li>
-							Dashboard
-							<ol>
-								<li>Correct user info in the upper left corner </li>
-								<li>Links in the "Help and support" section </li>
-								<li>It should be possible to enter user’s room from the dashboard </li>
-								<li>Room details should be shown correctly in the "Rooms in this section…" part of the screen </li>
-							</ol>					
-						</li>
-						<li>
-							Global chat 
-							<ol>
-								<li>Send/receive message where at least 3 users in the system </li>
-								<li>Adding a contact to the contact list </li>
-								<li>Private message </li>
-								<li>Showing user profile </li>
-								<li>Inviting user to the conference room </li>
-								<li>Copy chat log </li>
-								<li>Delete chat log </li>
-								<li>Changing font style in the massage </li>
-								<li>Adding emotions to the message </li>
-							</ol>
-							Attention! Correct RTL support does not work in the current implementation 
-						</li>
-						<li>
-							Calendar view
-							<ol>
-								<li>Change view (weekly/daily/monthly) and moving between the dates </li>
-								<li>Adding/removing/moving by mouse an event </li>
-							</ol>
-						</li>
-						<li>
-							Calendar invitation window
-							<ol>
-								<li>Creating/updating/deleting an event </li>
-								<li>Inviting 3 internal and 3 external guests </li>
-								<li>Different reminder types: receiving e-mail invitation for internal and external guests </li>
-								<li>Password protected invitation </li>
-								<li>Inviting to the rooms of the different types </li>
-								<li>Choosing time zone for external guest </li>
-								<li>Correct user data in the invitations </li>
-								<li>SMS reminder for internal and external guests </li>
-								<li>E-mail reminder for internal and external guests </li>
-								<li>It should be possible to enter to the event via invitation link room at the particular time slot only </li>
-								<li>Enter the room via invitation window </li>
-							</ol>
-						</li>
-						<li>
-							My Profile: User profile should contain correct user info and allow to edit this 
-						</li>
-						<li>
-							Contacts and Messages
-							<ol>
-								<li>Add/remove a message </li> 
-								<li>Creating a new folder </li>
-								<li>Moving between the folders </li>
-								<li>Marking messages as read/unread </li>
-								<li>Message filters </li>
-								<li>Contact list </li>
-							</ol>
-						</li>
-						<li>
-							User settings
-							<ol>
-								<li>Possibility to change the user info </li>
-								<li>Changing time zone and language (should start to work after user re-login </li>
-								<li>Community settings or different users </li>
-								<li>Display settings</li> 
-							</ol>
-						</li>
-						<li>
-							Search users
-							<ol>
-								<li>Send a private message </li>
-								<li>Adding a contact </li>
-								<li>View contact details via user list </li>
-							</ol>
-						</li>
-						<li>
-							Room lists 
-							<ol>
-								<li>Public rooms, private rooms and my rooms should contain correct room lists </li>
-								<li>User list for the selected room </li>
-								<li>Room details for the selected room </li>
-							</ol>
-						</li>
-						<li>
-							Recordings
-							<ol> 
-								<li>The list should contain available recordings in public and private folders </li>
-								<li>Info panel should contain actual info about the recording </li>
-								<li>Downloading a recording is different formats (AVI/FLV) </li>
-								<li>Play the recording in OpenMeetings </li>
-								<li>Play downloaded recording by Windows player </li>
-								<li>Remove a recording from the folder </li>
-							</ol>
-						</li>
-						<li>
-							Restricted room testing – general issues (should be tested with at least 3 attendees)
-							<ol>
-								<li>Enter the room: different cases for the cam/micro, choosing of the cam resolution, test recording, allow/deny of video </li>
-								<li>User list should be shown correctly </li>
-								<li>Correct user credentials after  the room entering </li>
-								<li>Add moderator permissions to the user </li>
-								<li>Turn micro on/off in the user list </li>
-								<li>Increasing/decreasing sound level and turning micro on/off in the video window </li>
-								<li>Turn micro on/off in the user list to another user – possible by the moderator only </li>
-								<li>Increasing/decreasing sound level and turning micro on/off in the video window - possible by the moderator only </li>
-								<li>Allow/deny drawing on whiteboard – possible by the moderator only </li>
-								<li>Allow/deny screen sharing – possible by the moderator only </li>
-								<li>Allow/deny remote screen control – possible by the moderator only </li>
-								<li>Allow/deny exclusive audio – possible by the moderator only </li>
-								<li>Re-start devise settings via user list </li>
-								<li>Re-start devise settings via video window </li>
-								<li>Kick the user off by the moderator </li>
-								<li>Click F8 key to arrange videos </li>
-								<li>Activity and actions panel should contain correct info </li>
-								<li>Exit the room </li>
-							</ol>
-						</li>
-						<li>
-							Restricted room testing: file uploading + documents
-							<ol>
-								<li>Upload a document with "Load directly to whiteboard" switch turned on </li>
-								<li>Upload a with "Load directly to whiteboard" switch turned on off </li>
-								<li>Upload a document with the localized file name and spaces in the name </li>
-								<li>Uploading a document into different folders: private files should be visible only their owner only </li>
-								<li>Removing a file from the room </li>
-								<li>Home and public drive size should change correctly </li>
-								<li>Adding a new folder </li>
-								<li>Removing a folder </li>
-								<li>Load a document of each supported type and check that it’s shown correctly </li>
-							</ol>
-						</li>
-						<li>
-							Restricted room testing – whiteboard and properties panels (should be tested with at least 3 attendees)
-							<ol>
-								<li>Adding a removing a whiteboard </li>
-								<li>Full-fit switch </li>
-								<li>Clear whiteboard </li>
-								<li>Clear objects of current slide only </li>
-								<li>Save and export </li>
-								<li>Undo </li>
-								<li>Select an object </li>
-								<li>Pointer </li>
-								<li>Text </li>
-								<li>Paint </li>
-								<li>Draw line </li>
-								<li>Draw underline </li>
-								<li>Rectangle </li>
-								<li>Ellipse </li>
-								<li>Arrow </li>
-								<li>Cliparts</li>
-							</ol>						
-						</li>
-						<li>
-							Restricted room testing – chat (should be tested with at least 3 attendees)
-							<ol>
-								<li>Send a message </li>
-								<li>Start a private chat </li>
-								<li>Chat moderation </li>
-								<li>Font style </li>
-								<li>Emotions </li>
-								<li>Show/copy chat log </li>
-								<li>Delete server chat log </li>
-							</ol>
-						</li>
-						<li>
-							Restricted room testing – screen sharing and recordings (should be tested with at least 3 attendees)
-							<ol>
-								<li>"Share record/screen" button in the room </li>
-								<li>Desktop sharer: start/stop sharing </li>
-								<li>Change the shared screen area (X-offset, Y-offset, width, height) </li>
-								<li>Change the screen sharing quality </li>
-								<li>Start/stop recordings – need to check that it works as expected </li>
-							</ol>
-						</li>
-						<li>
-							Restricted room testing – Actions menu
-							<ol>
-								<li>Send invitation: send English and localized message </li>
-								<li>Send invitation with password </li>
-								<li>Send invitations with 3 different time periods </li>
-								<li>Change time zone of the invitation </li>
-								<li>Change language of the invitation </li>
-								<li>Send invitation screen: "Generate URL" button – check the same things as for the invitations sent by email </li>
-								<li>Apply to be moderator </li>
-								<li>Apply to whiteboard access </li>
-								<li>Apply to audio/video access </li>
-								<li>Create a poll </li>
-								<li>Poll results </li>
-								<li>Vote </li>
-								<li>Default whiteboard settings: check all of them </li>
-							</ol>
-						</li>
-						<li>
-							Conference room testing
-							<ol>
-								<li>User list should look in another way in compare with restricted type </li>
-								<li>Generally, all should look OK when enter the room </li>
-							</ol>
-						</li>
-						<li>
-							Interview room testing (should be tested with at least 3 attendees)
-							<ol>
-								<li>User list should look as expected </li>
-								<li>Change a user for video pod </li>
-								<li>Start/stop recordings </li>
-							</ol>
-						</li>						
-					</ol>			
-				</li>
-				<li>
-					<b>Admin GUI tests</b>
-					<ol>
-						<li>
-							Users
-							<ol>
-								<li>Add/edit/remove/search user in the table </li>
-								<li>Move between screens where there are many users in the table </li>
-								<li>Edit text fields </li>
-								<li>Change a time zone, re-login and check the calendar </li>
-								<li>Change a language, re-login and check the GUI language </li>
-								<li>Е-mail: e-mails should pass </li>
-								<li>Phone and SMS switch: if set and turned on, sms messages should pass </li>
-								<li>Change a status – non-active user cannot login </li>
-								<li>Change user role and re-login </li>
-								<li>Change user group  - user has an access only to the rooms belong to his group </li>
-								<li>Change community settings and check </li>
-							</ol>
-						</li>
-						<li>
-							Connections
-							<ol>
-								<li>Should be tested with at least 3 users in the system </li>
-								<li>Sessionvars table should be shown correctly </li>
-								<li>Kick the user from the system </li>
-							</ol>
-						</li>
-						<li>
-							Groups 
-							<ol>
-								<li>Add/remove/edit/search an group </li>
-								<li>Add/remove a user from the user list of selected group </li>
-							</ol>
-						</li>
-						<li>
-							Conference rooms
-							<ol>
-								<li>Add/remove/edit/search a room </li>
-								<li>User list for the given room should contain actual list </li>
-								<li>Turn the Moderation switch on/off and enter the room </li>
-								<li>Add/remove a user to the default moderator list </li>
-								<li>Check max participants number in the room </li>
-								<li>Change room type and enter the room </li>
-								<li>Turn public switch on/off </li>
-								<li>Turn "Demo switch" on/off, change the demonstration time </li>
-								<li>Turn "Allow user questions" on/off and enter the room </li>
-								<li>Turn "Audio only" switch on/off and enter the room </li>
-								<li>Set "Close URL" to some URL, enter the room and then exit – you should be re-directed correspondingly </li>
-								<li>Check that SIP settings work as expected </li>
-								<li>Check that "Allow recordings" switch  works as expected </li>
-								<li>Check that "Layout options" switch work as expected </li>
-								<li>Check that "Allow font styles" switch works as expected </li>
-							</ol>
-						</li>
-						<li>					
-							Configuration
-							<ol>
-								<li>Allow_frontend_register </li>
-								<li>Mail server settings </li>
-								<li>SMS provider settings </li>
-								<li>Application.name </li>
-								<li>Default_lang_id </li>
-								<li>default time zone </li>
-								<li>SIP settings </li>
-								<li>Reminder minutes </li>
-							</ol>
-						</li>
-						<li>					
-							Language editor 
-							<ol>
-								<li>Add/remove/edit/search a key </li>
-								<li>Import/export of localization files </li>
-							</ol>
-						</li>
-						<li>					
-							LDAP: Add/remove/edit/search a record
-						</li>
-						<li>
-							Backup
-							<ol>
-								<li>System import </li>
-								<li>System backup </li>
-								<li>TBD – need to add tests for command line admin here </li>
-							</ol> 
-						</li>
-						<li>
-							Servers: Add/remove/edit/search a server
-						</li>						
-					</ol>
-				</li>
-				<li>
-					<b>SIP integration tests</b> (should be tested with at least 3 attendees in the room; for restricted and interview rooms)
-					<ol>
-						<li>Call from the room to the external phone number </li>
-						<li>Call from external phone number to the room </li>
-						<li>Call from the software phone to the room </li>
-						<li>Call from the software phone with video to the room </li>
-					</ol>
-				</li>
-				<li>
-					<b>Network testing script</b>
-				</li>
-				<li>
-					<b>Site integration tests</b>
-					<ol>
-						<li>Enter OpenMeetings room from Moodle site </li>
-						<li>Check that recordings link are shown on the Moodle site </li>
-						<li>Enter OpenMeetings room from Joomla site </li>
-						<li>Check that recordings link are shown on the Joomla site </li>
-						<li>Enter OpenMeetings room from Drupal site </li>
-						<li>Check that recordings link are shown on the Drupal site </li>
-					</ol>
-				</li>
-				<li>
-					<b>Extended test plan for the recordings and screen sharing testing</b>
-					<ol>
-						<li><b>Interview room testing</b>
-							<ol>
-								<li>
-									Just a 5 minutes recording:
-									<ol>
-										<li>Enter a room with user A</li>
-										<li>Enter a room with user B</li>
-										<li>Open videos for both users</li>
-										<li>Start recording with user A</li>
-										<li>Wait for 5 minutes</li>
-										<li>Stop recording by user A</li>
-										<li>Repeat steps 1.1 – 1.6 3 times</li>
-										<li>Exit room</li>
-										<li>Wait some time</li>
-										<li>Check that all the recordings are processed and work as expected</li>
-										<li>there should not be a delay between the video and sound</li>
-									</ol>
-								</li>
-								<li>Just a 30 minutes recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
-								<li>Just an 1 hour recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
-								<li>
-									5-minutes recording: user exits the room before the recording gets stopped
-									<ol>
-										<li>Enter a room with user A</li>
-										<li>Enter a room with user B</li>
-										<li>Open videos for both users</li>
-										<li>Start recording with user A</li>
-										<li>Exit the room by user B</li>
-										<li>Stop recording by user A</li>
-										<li>Repeat steps 1.4.1 – 1.4.6 3 times</li>
-										<li>Exit room</li>
-										<li>Wait some time</li>
-										<li>Check that all the recordings are processed and work as expected</li>
-										<li>There should not be a delay between the video and sound</li>
-									</ol>
-								</li>
-								<li>
-									5-minutes recording: user A starts recording, user B stops
-									<ol>
-										<li>Enter a room with user A</li>
-										<li>Enter a room with user B</li>
-										<li>Open videos for both users</li>
-										<li>Start recording with user A</li>
-										<li>Stop recording by user B</li>
-										<li>Exit room</li>
-										<li>Wait some time</li>
-										<li>Check that all the recordings are processed as expected</li>
-									</ol>
-								</li>
-							</ol>
-						</li>
-						<li>
-							<b>Conference room testing</b>
-							<ol>				
-								<li>
-									Screen sharing
-									<ol>
-										<li>Enter a room with user A</li>
-										<li>Enter a room with user B</li>
-										<li>Enter a room by user C</li>
-										<li>Open videos for all the users</li>
-										<li>Start screen sharing session by user A, choose High quality</li>
-										<li>Check that A's screen looks correctly for users B and C and sound is OK in the room</li>
-										<li>Stop screen sharing by user A after 5 minutes</li>
-										<li>Repeat steps 2.1.1-2.1.7 3 times</li>
-										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose "Very high quality" on the step 2.1.5</li>
-										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose "Medium quality" on the step 2.1.5</li>
-										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose "Low quality" on the step 2.1.5</li>
-										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose some random height and width on the step 2.1.5</li>
-										<li>Repeat steps 2.1.1-2.1.7 one more time, but turn the "Notify on disconnect" switch on the step 2.1.5</li>									
-									</ol>
-								</li>
-								<li>
-									Recordings
-									<ol>
-										<li>Enter a room with user A</li>
-										<li>Enter a room with user B</li>
-										<li>Enter a room by user C</li>
-										<li>Open videos for all the users</li>
-										<li>Start recording session by user A, choose High quality</li>
-										<li>Stop recording session by user A after 5 minutes</li>
-										<li>Repeat steps 2.2.1-2.2.6 3 times</li>
-										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose "Very high quality" on the step 2.2.5</li>
-										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose "Medium quality" on the step 2.2.5</li>
-										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose "Low quality" on the step 2.2.5</li>
-										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose some random height and width on the step 2.2.5</li>
-										<li>Repeat steps 2.2.1-2.2.6 one more time, but turn the "Notify on disconnect" switch on the step 2.2.5</li>
-										<li>Go to the A's recordings list and check that all the recordings are there, processed without errors and work as expected</li>
-									</ol>
-								</li>
-								<li>
-									Recordings + screen sharing: user enters the room after recording is started
-									<ol>
-										<li>Enter conference room by user A</li>
-										<li>Start screen sharing and recordings with default parameters by user A</li>
-										<li>Enter the room by user B, check that screen sharing is OK. Wait 5 minutes</li>
-										<li>Enter the room by user C, check that screen sharing is OK. Wait 5 minutes</li>
-										<li>Exit the room by user B; wait 3 minutes</li>
-										<li>Exit the room by user C; wait 3 minutes</li>
-										<li>Exit the room by user A</li>
-										<li>Repeat steps 2.3.1-2.3.7 3 times</li>
-										<li>Go to the recordings list for user A and check that all the recordings are OK and work as expected</li>
-									</ol>
-								</li>
-								<li>
-									Stress test
-									<ol>
-										<li>Enter the room by the users A, B, C, D and E</li>
-										<li>Open A, B, C, D and E videos</li>
-										<li>Start screen sharing and recordings session with high quality by user A</li>
-										<li>Wait 30 minutes</li>
-										<li>Stop screen sharing</li>
-										<li>Go to A's recordings list and check that created recording is OK</li>
-										<li>Repeat steps 2.3.1-2.3.6 3 times</li>
-									</ol>
-								</li>
-							</ol>
-						</li>
-					</ol>
-				</li>
-
-			</ol>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Manual Testing</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Introduction">
+
+			<p>
+				Below is a test plan for the OpenMeetings 2.1 pre-release testing.
+			</p>
+		</section>
+
+		<section name="Details">
+
+			<ol>
+				<li>
+					<b>User GUI tests</b>
+					<ol>
+						<li>
+							Login/logout 
+							<ol>
+								<li>Password recovering </li>
+								<li>Self-registering </li>
+								<li>"Visit Apache OpenMeetings" link </li>
+								<li>Enter wrong login/password </li>
+								<li>Enter correct login/password </li>
+								<li>Exit the system by click the Exit button </li>
+							</ol>
+						</li>
+						<li>
+							Dashboard
+							<ol>
+								<li>Correct user info in the upper left corner </li>
+								<li>Links in the "Help and support" section </li>
+								<li>It should be possible to enter user’s room from the dashboard </li>
+								<li>Room details should be shown correctly in the "Rooms in this section…" part of the screen </li>
+							</ol>					
+						</li>
+						<li>
+							Global chat 
+							<ol>
+								<li>Send/receive message where at least 3 users in the system </li>
+								<li>Adding a contact to the contact list </li>
+								<li>Private message </li>
+								<li>Showing user profile </li>
+								<li>Inviting user to the conference room </li>
+								<li>Copy chat log </li>
+								<li>Delete chat log </li>
+								<li>Changing font style in the massage </li>
+								<li>Adding emotions to the message </li>
+							</ol>
+							Attention! Correct RTL support does not work in the current implementation 
+						</li>
+						<li>
+							Calendar view
+							<ol>
+								<li>Change view (weekly/daily/monthly) and moving between the dates </li>
+								<li>Adding/removing/moving by mouse an event </li>
+							</ol>
+						</li>
+						<li>
+							Calendar invitation window
+							<ol>
+								<li>Creating/updating/deleting an event </li>
+								<li>Inviting 3 internal and 3 external guests </li>
+								<li>Different reminder types: receiving e-mail invitation for internal and external guests </li>
+								<li>Password protected invitation </li>
+								<li>Inviting to the rooms of the different types </li>
+								<li>Choosing time zone for external guest </li>
+								<li>Correct user data in the invitations </li>
+								<li>SMS reminder for internal and external guests </li>
+								<li>E-mail reminder for internal and external guests </li>
+								<li>It should be possible to enter to the event via invitation link room at the particular time slot only </li>
+								<li>Enter the room via invitation window </li>
+							</ol>
+						</li>
+						<li>
+							My Profile: User profile should contain correct user info and allow to edit this 
+						</li>
+						<li>
+							Contacts and Messages
+							<ol>
+								<li>Add/remove a message </li> 
+								<li>Creating a new folder </li>
+								<li>Moving between the folders </li>
+								<li>Marking messages as read/unread </li>
+								<li>Message filters </li>
+								<li>Contact list </li>
+							</ol>
+						</li>
+						<li>
+							User settings
+							<ol>
+								<li>Possibility to change the user info </li>
+								<li>Changing time zone and language (should start to work after user re-login </li>
+								<li>Community settings or different users </li>
+								<li>Display settings</li> 
+							</ol>
+						</li>
+						<li>
+							Search users
+							<ol>
+								<li>Send a private message </li>
+								<li>Adding a contact </li>
+								<li>View contact details via user list </li>
+							</ol>
+						</li>
+						<li>
+							Room lists 
+							<ol>
+								<li>Public rooms, private rooms and my rooms should contain correct room lists </li>
+								<li>User list for the selected room </li>
+								<li>Room details for the selected room </li>
+							</ol>
+						</li>
+						<li>
+							Recordings
+							<ol> 
+								<li>The list should contain available recordings in public and private folders </li>
+								<li>Info panel should contain actual info about the recording </li>
+								<li>Downloading a recording is different formats (AVI/FLV) </li>
+								<li>Play the recording in OpenMeetings </li>
+								<li>Play downloaded recording by Windows player </li>
+								<li>Remove a recording from the folder </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – general issues (should be tested with at least 3 attendees)
+							<ol>
+								<li>Enter the room: different cases for the cam/micro, choosing of the cam resolution, test recording, allow/deny of video </li>
+								<li>User list should be shown correctly </li>
+								<li>Correct user credentials after  the room entering </li>
+								<li>Add moderator permissions to the user </li>
+								<li>Turn micro on/off in the user list </li>
+								<li>Increasing/decreasing sound level and turning micro on/off in the video window </li>
+								<li>Turn micro on/off in the user list to another user – possible by the moderator only </li>
+								<li>Increasing/decreasing sound level and turning micro on/off in the video window - possible by the moderator only </li>
+								<li>Allow/deny drawing on whiteboard – possible by the moderator only </li>
+								<li>Allow/deny screen sharing – possible by the moderator only </li>
+								<li>Allow/deny remote screen control – possible by the moderator only </li>
+								<li>Allow/deny exclusive audio – possible by the moderator only </li>
+								<li>Re-start devise settings via user list </li>
+								<li>Re-start devise settings via video window </li>
+								<li>Kick the user off by the moderator </li>
+								<li>Click F8 key to arrange videos </li>
+								<li>Activity and actions panel should contain correct info </li>
+								<li>Exit the room </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing: file uploading + documents
+							<ol>
+								<li>Upload a document with "Load directly to whiteboard" switch turned on </li>
+								<li>Upload a with "Load directly to whiteboard" switch turned on off </li>
+								<li>Upload a document with the localized file name and spaces in the name </li>
+								<li>Uploading a document into different folders: private files should be visible only their owner only </li>
+								<li>Removing a file from the room </li>
+								<li>Home and public drive size should change correctly </li>
+								<li>Adding a new folder </li>
+								<li>Removing a folder </li>
+								<li>Load a document of each supported type and check that it’s shown correctly </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – whiteboard and properties panels (should be tested with at least 3 attendees)
+							<ol>
+								<li>Adding a removing a whiteboard </li>
+								<li>Full-fit switch </li>
+								<li>Clear whiteboard </li>
+								<li>Clear objects of current slide only </li>
+								<li>Save and export </li>
+								<li>Undo </li>
+								<li>Select an object </li>
+								<li>Pointer </li>
+								<li>Text </li>
+								<li>Paint </li>
+								<li>Draw line </li>
+								<li>Draw underline </li>
+								<li>Rectangle </li>
+								<li>Ellipse </li>
+								<li>Arrow </li>
+								<li>Cliparts</li>
+							</ol>						
+						</li>
+						<li>
+							Restricted room testing – chat (should be tested with at least 3 attendees)
+							<ol>
+								<li>Send a message </li>
+								<li>Start a private chat </li>
+								<li>Chat moderation </li>
+								<li>Font style </li>
+								<li>Emotions </li>
+								<li>Show/copy chat log </li>
+								<li>Delete server chat log </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – screen sharing and recordings (should be tested with at least 3 attendees)
+							<ol>
+								<li>"Share record/screen" button in the room </li>
+								<li>Desktop sharer: start/stop sharing </li>
+								<li>Change the shared screen area (X-offset, Y-offset, width, height) </li>
+								<li>Change the screen sharing quality </li>
+								<li>Start/stop recordings – need to check that it works as expected </li>
+							</ol>
+						</li>
+						<li>
+							Restricted room testing – Actions menu
+							<ol>
+								<li>Send invitation: send English and localized message </li>
+								<li>Send invitation with password </li>
+								<li>Send invitations with 3 different time periods </li>
+								<li>Change time zone of the invitation </li>
+								<li>Change language of the invitation </li>
+								<li>Send invitation screen: "Generate URL" button – check the same things as for the invitations sent by email </li>
+								<li>Apply to be moderator </li>
+								<li>Apply to whiteboard access </li>
+								<li>Apply to audio/video access </li>
+								<li>Create a poll </li>
+								<li>Poll results </li>
+								<li>Vote </li>
+								<li>Default whiteboard settings: check all of them </li>
+							</ol>
+						</li>
+						<li>
+							Conference room testing
+							<ol>
+								<li>User list should look in another way in compare with restricted type </li>
+								<li>Generally, all should look OK when enter the room </li>
+							</ol>
+						</li>
+						<li>
+							Interview room testing (should be tested with at least 3 attendees)
+							<ol>
+								<li>User list should look as expected </li>
+								<li>Change a user for video pod </li>
+								<li>Start/stop recordings </li>
+							</ol>
+						</li>						
+					</ol>			
+				</li>
+				<li>
+					<b>Admin GUI tests</b>
+					<ol>
+						<li>
+							Users
+							<ol>
+								<li>Add/edit/remove/search user in the table </li>
+								<li>Move between screens where there are many users in the table </li>
+								<li>Edit text fields </li>
+								<li>Change a time zone, re-login and check the calendar </li>
+								<li>Change a language, re-login and check the GUI language </li>
+								<li>Е-mail: e-mails should pass </li>
+								<li>Phone and SMS switch: if set and turned on, sms messages should pass </li>
+								<li>Change a status – non-active user cannot login </li>
+								<li>Change user role and re-login </li>
+								<li>Change user group  - user has an access only to the rooms belong to his group </li>
+								<li>Change community settings and check </li>
+							</ol>
+						</li>
+						<li>
+							Connections
+							<ol>
+								<li>Should be tested with at least 3 users in the system </li>
+								<li>Sessionvars table should be shown correctly </li>
+								<li>Kick the user from the system </li>
+							</ol>
+						</li>
+						<li>
+							Groups 
+							<ol>
+								<li>Add/remove/edit/search an group </li>
+								<li>Add/remove a user from the user list of selected group </li>
+							</ol>
+						</li>
+						<li>
+							Conference rooms
+							<ol>
+								<li>Add/remove/edit/search a room </li>
+								<li>User list for the given room should contain actual list </li>
+								<li>Turn the Moderation switch on/off and enter the room </li>
+								<li>Add/remove a user to the default moderator list </li>
+								<li>Check max participants number in the room </li>
+								<li>Change room type and enter the room </li>
+								<li>Turn public switch on/off </li>
+								<li>Turn "Demo switch" on/off, change the demonstration time </li>
+								<li>Turn "Allow user questions" on/off and enter the room </li>
+								<li>Turn "Audio only" switch on/off and enter the room </li>
+								<li>Set "Close URL" to some URL, enter the room and then exit – you should be re-directed correspondingly </li>
+								<li>Check that SIP settings work as expected </li>
+								<li>Check that "Allow recordings" switch  works as expected </li>
+								<li>Check that "Layout options" switch work as expected </li>
+								<li>Check that "Allow font styles" switch works as expected </li>
+							</ol>
+						</li>
+						<li>					
+							Configuration
+							<ol>
+								<li>Allow_frontend_register </li>
+								<li>Mail server settings </li>
+								<li>SMS provider settings </li>
+								<li>Application.name </li>
+								<li>Default_lang_id </li>
+								<li>default time zone </li>
+								<li>SIP settings </li>
+								<li>Reminder minutes </li>
+							</ol>
+						</li>
+						<li>					
+							Language editor 
+							<ol>
+								<li>Add/remove/edit/search a key </li>
+								<li>Import/export of localization files </li>
+							</ol>
+						</li>
+						<li>					
+							LDAP: Add/remove/edit/search a record
+						</li>
+						<li>
+							Backup
+							<ol>
+								<li>System import </li>
+								<li>System backup </li>
+								<li>TBD – need to add tests for command line admin here </li>
+							</ol> 
+						</li>
+						<li>
+							Servers: Add/remove/edit/search a server
+						</li>						
+					</ol>
+				</li>
+				<li>
+					<b>SIP integration tests</b> (should be tested with at least 3 attendees in the room; for restricted and interview rooms)
+					<ol>
+						<li>Call from the room to the external phone number </li>
+						<li>Call from external phone number to the room </li>
+						<li>Call from the software phone to the room </li>
+						<li>Call from the software phone with video to the room </li>
+					</ol>
+				</li>
+				<li>
+					<b>Network testing script</b>
+				</li>
+				<li>
+					<b>Site integration tests</b>
+					<ol>
+						<li>Enter OpenMeetings room from Moodle site </li>
+						<li>Check that recordings link are shown on the Moodle site </li>
+						<li>Enter OpenMeetings room from Joomla site </li>
+						<li>Check that recordings link are shown on the Joomla site </li>
+						<li>Enter OpenMeetings room from Drupal site </li>
+						<li>Check that recordings link are shown on the Drupal site </li>
+					</ol>
+				</li>
+				<li>
+					<b>Extended test plan for the recordings and screen sharing testing</b>
+					<ol>
+						<li><b>Interview room testing</b>
+							<ol>
+								<li>
+									Just a 5 minutes recording:
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Wait for 5 minutes</li>
+										<li>Stop recording by user A</li>
+										<li>Repeat steps 1.1 – 1.6 3 times</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed and work as expected</li>
+										<li>there should not be a delay between the video and sound</li>
+									</ol>
+								</li>
+								<li>Just a 30 minutes recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
+								<li>Just an 1 hour recording: do steps 1.1.1-1.16 one time; then check the result recording</li>
+								<li>
+									5-minutes recording: user exits the room before the recording gets stopped
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Exit the room by user B</li>
+										<li>Stop recording by user A</li>
+										<li>Repeat steps 1.4.1 – 1.4.6 3 times</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed and work as expected</li>
+										<li>There should not be a delay between the video and sound</li>
+									</ol>
+								</li>
+								<li>
+									5-minutes recording: user A starts recording, user B stops
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Open videos for both users</li>
+										<li>Start recording with user A</li>
+										<li>Stop recording by user B</li>
+										<li>Exit room</li>
+										<li>Wait some time</li>
+										<li>Check that all the recordings are processed as expected</li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li>
+							<b>Conference room testing</b>
+							<ol>				
+								<li>
+									Screen sharing
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Enter a room by user C</li>
+										<li>Open videos for all the users</li>
+										<li>Start screen sharing session by user A, choose High quality</li>
+										<li>Check that A's screen looks correctly for users B and C and sound is OK in the room</li>
+										<li>Stop screen sharing by user A after 5 minutes</li>
+										<li>Repeat steps 2.1.1-2.1.7 3 times</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose "Very high quality" on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose "Medium quality" on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose "Low quality" on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose some random height and width on the step 2.1.5</li>
+										<li>Repeat steps 2.1.1-2.1.7 one more time, but turn the "Notify on disconnect" switch on the step 2.1.5</li>									
+									</ol>
+								</li>
+								<li>
+									Recordings
+									<ol>
+										<li>Enter a room with user A</li>
+										<li>Enter a room with user B</li>
+										<li>Enter a room by user C</li>
+										<li>Open videos for all the users</li>
+										<li>Start recording session by user A, choose High quality</li>
+										<li>Stop recording session by user A after 5 minutes</li>
+										<li>Repeat steps 2.2.1-2.2.6 3 times</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose "Very high quality" on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose "Medium quality" on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose "Low quality" on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose some random height and width on the step 2.2.5</li>
+										<li>Repeat steps 2.2.1-2.2.6 one more time, but turn the "Notify on disconnect" switch on the step 2.2.5</li>
+										<li>Go to the A's recordings list and check that all the recordings are there, processed without errors and work as expected</li>
+									</ol>
+								</li>
+								<li>
+									Recordings + screen sharing: user enters the room after recording is started
+									<ol>
+										<li>Enter conference room by user A</li>
+										<li>Start screen sharing and recordings with default parameters by user A</li>
+										<li>Enter the room by user B, check that screen sharing is OK. Wait 5 minutes</li>
+										<li>Enter the room by user C, check that screen sharing is OK. Wait 5 minutes</li>
+										<li>Exit the room by user B; wait 3 minutes</li>
+										<li>Exit the room by user C; wait 3 minutes</li>
+										<li>Exit the room by user A</li>
+										<li>Repeat steps 2.3.1-2.3.7 3 times</li>
+										<li>Go to the recordings list for user A and check that all the recordings are OK and work as expected</li>
+									</ol>
+								</li>
+								<li>
+									Stress test
+									<ol>
+										<li>Enter the room by the users A, B, C, D and E</li>
+										<li>Open A, B, C, D and E videos</li>
+										<li>Start screen sharing and recordings session with high quality by user A</li>
+										<li>Wait 30 minutes</li>
+										<li>Stop screen sharing</li>
+										<li>Go to A's recordings list and check that created recording is OK</li>
+										<li>Repeat steps 2.3.1-2.3.6 3 times</li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+					</ol>
+				</li>
+
+			</ol>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/MoodlePlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/MoodlePlugin.xml b/openmeetings-server/src/site/xdoc/MoodlePlugin.xml
index 9248b24..8bb9935 100644
--- a/openmeetings-server/src/site/xdoc/MoodlePlugin.xml
+++ b/openmeetings-server/src/site/xdoc/MoodlePlugin.xml
@@ -1,76 +1,76 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Moodle Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Moodle Plugin for OpenMeetings">
-			<p>
-				You can get the latest Version of the Plugin for Moodle from the
-				<a href="https://moodle.org/plugins/view.php?plugin=mod_openmeetings"
-					target="_blank" rel="nofollow">Moodle Plugin database</a>
-				.
-			</p>
-		</section>
-		
-		<section name="Installation of the Moodle Plugin for Apache OpenMeetings">
-			<p>
-				You simply download the ZIP or TAR package and unzip it to Moodle's "mod" directory.<br/>
-				Eventually you need to unzip the package into a folder called "openmeetings".
-				The folder structure is:<br/>
-				$MOODLE_HOME/mod/openmeetings/*.php
-				<br />
-				Then you visit the admin interface of Moodle, for example <u>http://$your_moodle_host/$MOODLE_WWW_ROOT/admin</u><br/>
-				Moodle will detect that there is a new plugin and will show the plugin installation screen:
-			</p>
-			<a class="fancybox-buttons" href="images/moodle_install_plugin.png">
-				<img src="images/moodle_install_plugin.png" alt="" width="430"
-					height="220" />
-			</a>
-			<p>
-				After you have clicked on "Update database" Moodle will show you the plugin configuration screen:
-			</p>
-			<a class="fancybox-buttons" href="images/moodle_configure_plugin.png">
-				<img src="images/moodle_configure_plugin.png" alt="" width="500"
-					height="300" />
-			</a>
-		</section>
-		
-		<section name="Adding a new conference room to a Moodle course">
-			
-			<p>
-				After installation of the plugin you can go to the course pages in Moodle and turn editing on.
-				Then you choose the activity "OpenMeetings", Moodle will then show you the conference room 
-				configuration with all the options:
-			</p>
-			<a class="fancybox-buttons" href="images/moodle_add_activity_plugin.png">
-				<img src="images/moodle_add_activity_plugin.png" alt="" width="430"
-					height="360" />
-			</a>
-		</section>
-		
-		<section name="Demo video">
-			<p>The demo video of SugarCRM plugin show you the plugin in action </p>
-			<iframe width="640" height="390" src="http://www.youtube.com/embed/pPgv7zkPXAk" frameborder="0" allowfullscreen=""></iframe>
-		</section>
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Moodle Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Moodle Plugin for OpenMeetings">
+			<p>
+				You can get the latest Version of the Plugin for Moodle from the
+				<a href="https://moodle.org/plugins/view.php?plugin=mod_openmeetings"
+					target="_blank" rel="nofollow">Moodle Plugin database</a>
+				.
+			</p>
+		</section>
+		
+		<section name="Installation of the Moodle Plugin for Apache OpenMeetings">
+			<p>
+				You simply download the ZIP or TAR package and unzip it to Moodle's "mod" directory.<br/>
+				Eventually you need to unzip the package into a folder called "openmeetings".
+				The folder structure is:<br/>
+				$MOODLE_HOME/mod/openmeetings/*.php
+				<br />
+				Then you visit the admin interface of Moodle, for example <u>http://$your_moodle_host/$MOODLE_WWW_ROOT/admin</u><br/>
+				Moodle will detect that there is a new plugin and will show the plugin installation screen:
+			</p>
+			<a class="fancybox-buttons" href="images/moodle_install_plugin.png">
+				<img src="images/moodle_install_plugin.png" alt="" width="430"
+					height="220" />
+			</a>
+			<p>
+				After you have clicked on "Update database" Moodle will show you the plugin configuration screen:
+			</p>
+			<a class="fancybox-buttons" href="images/moodle_configure_plugin.png">
+				<img src="images/moodle_configure_plugin.png" alt="" width="500"
+					height="300" />
+			</a>
+		</section>
+		
+		<section name="Adding a new conference room to a Moodle course">
+			
+			<p>
+				After installation of the plugin you can go to the course pages in Moodle and turn editing on.
+				Then you choose the activity "OpenMeetings", Moodle will then show you the conference room 
+				configuration with all the options:
+			</p>
+			<a class="fancybox-buttons" href="images/moodle_add_activity_plugin.png">
+				<img src="images/moodle_add_activity_plugin.png" alt="" width="430"
+					height="360" />
+			</a>
+		</section>
+		
+		<section name="Demo video">
+			<p>The demo video of SugarCRM plugin show you the plugin in action </p>
+			<iframe width="640" height="390" src="http://www.youtube.com/embed/pPgv7zkPXAk" frameborder="0" allowfullscreen=""></iframe>
+		</section>
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/MySQLConfig.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/MySQLConfig.xml b/openmeetings-server/src/site/xdoc/MySQLConfig.xml
index 4b4419a..31d9bf2 100644
--- a/openmeetings-server/src/site/xdoc/MySQLConfig.xml
+++ b/openmeetings-server/src/site/xdoc/MySQLConfig.xml
@@ -1,76 +1,76 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>MySQL Configuration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="MySQL Configuration">
-
-			<subsection name="Before you start">
-				<ul>
-					<li>Make sure that you have set utf8 as
-						default/server-character-set in your MySQL configuration (my.cnf)
-						before you start the installation process of OpenMeetings!
-					</li>
-					<li>
-						make sure MySQL is listening on TCP/IP connections!
-						<br />
-						To verify if MySQL connection is working: OpenMeetings will
-						automatically create all tables in the database and all tables
-						should have utf8 as encoding/collation!
-					</li>
-					<li>If you encounter issues, you can drop the db and then run
-						the web based installer again
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="Steps todo">
-				<ul>
-					<li>
-						You need to download the JConnector from mysql
-						<a href="http://www.mysql.com/downloads/connector/j/" target="_blank"
-							rel="nofollow">http://www.mysql.com/downloads/connector/j/</a>
-						and place it into:
-						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
-					</li>
-					<li>
-						Run red5-service and goto the web-based installer:
-						http://localhost:5080/openmeetings/install
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="MySQL Sample Configuration">
-				<p>
-					There is a sample configuration for MySQL that ships with
-					every
-					release in:
-					<br />
-					/webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
-				</p>
-			</subsection>
-
-
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>MySQL Configuration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="MySQL Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>Make sure that you have set utf8 as
+						default/server-character-set in your MySQL configuration (my.cnf)
+						before you start the installation process of OpenMeetings!
+					</li>
+					<li>
+						make sure MySQL is listening on TCP/IP connections!
+						<br />
+						To verify if MySQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db and then run
+						the web based installer again
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						You need to download the JConnector from mysql
+						<a href="http://www.mysql.com/downloads/connector/j/" target="_blank"
+							rel="nofollow">http://www.mysql.com/downloads/connector/j/</a>
+						and place it into:
+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>
+					</li>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="MySQL Sample Configuration">
+				<p>
+					There is a sample configuration for MySQL that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/Navigation.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/Navigation.xml b/openmeetings-server/src/site/xdoc/Navigation.xml
index 03a7932..2b2e861 100644
--- a/openmeetings-server/src/site/xdoc/Navigation.xml
+++ b/openmeetings-server/src/site/xdoc/Navigation.xml
@@ -1,44 +1,44 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Change main navigation</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Changing the main navigation">
-
-			<p>To customize the main menu (for example remove entries or changing
-				the order) you can edit the tables:  </p>
-			<ul>
-				<li>navimain </li>
-				<li>naviglobal </li>
-			</ul>
-			<p></p>
-			<p>
-				You need to make sure that you
-				<strong>restart red5 after doing changes to the database</strong>
-				, there is a database cache, so changes might not take affect as
-				long as you did not restart.
-			</p>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Change main navigation</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Changing the main navigation">
+
+			<p>To customize the main menu (for example remove entries or changing
+				the order) you can edit the tables:  </p>
+			<ul>
+				<li>navimain </li>
+				<li>naviglobal </li>
+			</ul>
+			<p></p>
+			<p>
+				You need to make sure that you
+				<strong>restart red5 after doing changes to the database</strong>
+				, there is a database cache, so changes might not take affect as
+				long as you did not restart.
+			</p>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file


[24/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
index c6f2d18..140c719 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
@@ -1,191 +1,191 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao.room;
-
-import org.apache.openmeetings.db.entity.room.Room;
-import org.asteriskjava.manager.DefaultManagerConnection;
-import org.asteriskjava.manager.ManagerConnection;
-import org.asteriskjava.manager.ManagerConnectionFactory;
-import org.asteriskjava.manager.ResponseEvents;
-import org.asteriskjava.manager.action.ConfbridgeListAction;
-import org.asteriskjava.manager.action.DbDelAction;
-import org.asteriskjava.manager.action.DbDelTreeAction;
-import org.asteriskjava.manager.action.DbGetAction;
-import org.asteriskjava.manager.action.DbPutAction;
-import org.asteriskjava.manager.action.EventGeneratingAction;
-import org.asteriskjava.manager.action.ManagerAction;
-import org.asteriskjava.manager.action.OriginateAction;
-import org.asteriskjava.manager.response.ManagerError;
-import org.asteriskjava.manager.response.ManagerResponse;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-public class SipDao {
-	private static final Logger log = Red5LoggerFactory.getLogger(SipDao.class);
-	public static final String ASTERISK_OM_FAMILY = "openmeetings";
-	public static final String ASTERISK_OM_KEY = "rooms";
-	private String sipHostname;
-	private int sipPort;
-	private String sipUsername;
-	private String sipPassword;
-	private long timeout;
-	private ManagerConnectionFactory factory;
-
-	@SuppressWarnings("unused")
-	private SipDao() {
-		// prohibited default constructor
-	}
-
-	public SipDao(String sipHostname, int sipPort, String sipUsername, String sipPassword, long timeout) {
-		this.sipHostname = sipHostname;
-		this.sipPort = sipPort;
-		this.sipUsername = sipUsername;
-		this.sipPassword = sipPassword;
-		this.timeout = timeout;
-		factory = new ManagerConnectionFactory(this.sipHostname, this.sipPort, this.sipUsername, this.sipPassword);
-	}
-
-	private ManagerConnection getConnection() {
-		DefaultManagerConnection con = (DefaultManagerConnection)factory.createManagerConnection(); // TODO secure
-		con.setDefaultEventTimeout(timeout);
-		con.setDefaultResponseTimeout(timeout);
-		con.setSocketReadTimeout((int)timeout);
-		con.setSocketTimeout((int)timeout);
-		return con;
-	}
-	
-	private ManagerResponse exec(ManagerAction action) {
-		if (factory == null) {
-			log.warn("There is no Asterisk configured");
-			return null;
-		}
-		ManagerConnection con = getConnection();
-		try {
-			con.login();
-			ManagerResponse r = con.sendAction(action);
-			if (r != null) {
-				log.debug(r.toString());
-			}
-			return (r instanceof ManagerError) ? null : r;
-		} catch (Exception e) {
-			log.error("Error while executing ManagerAction: " + action, e);
-		} finally {
-			try {
-				con.logoff();
-			} catch (Exception e) {
-				// no-op
-			}
-		}
-		return null;
-	}
-
-	private ResponseEvents execEvent(EventGeneratingAction action) {
-		if (factory == null) {
-			log.warn("There is no Asterisk configured");
-			return null;
-		}
-		ManagerConnection con = getConnection();
-		try {
-			con.login("on");
-			ResponseEvents r = con.sendEventGeneratingAction(action);
-			if (r != null) {
-				log.debug(r.getResponse().toString());
-			}
-			return (r == null || r.getResponse() instanceof ManagerError) ? null : r;
-		} catch (Exception e) {
-			log.error("Error while executing EventGeneratingAction: " + action, e);
-		} finally {
-			try {
-				con.logoff();
-			} catch (Exception e) {
-				// no-op
-			}
-		}
-		return null;
-	}
-
-	private static String getKey(String confno) {
-		return ASTERISK_OM_KEY + "/" + confno;
-	}
-
-	public String get(String confno) {
-		String pin = null;
-		DbGetAction da = new DbGetAction(ASTERISK_OM_FAMILY, getKey(confno));
-		ManagerResponse r = exec(da);
-		if (r != null) {
-			pin = r.getResponse();
-		}
-		return pin;
-	}
-
-	public void update(String confno, String pin) {
-		delete(confno);
-		DbPutAction da = new DbPutAction(ASTERISK_OM_FAMILY, getKey(confno), pin);
-		exec(da);
-	}
-
-	public void delete() {
-		DbDelTreeAction da = new DbDelTreeAction(ASTERISK_OM_FAMILY, ASTERISK_OM_KEY);
-		exec(da);
-	}
-
-	public void delete(String confno) {
-		DbDelAction da = new DbDelAction(ASTERISK_OM_FAMILY, getKey(confno));
-		exec(da);
-	}
-
-	public Integer countUsers(String confno) {
-		if (confno == null) {
-			return null;
-		}
-		ConfbridgeListAction da = new ConfbridgeListAction(confno);
-		ResponseEvents r = execEvent(da);
-		if (r != null) {
-			log.debug("SipDao::countUsers size == " + r.getEvents().size());
-			// "- 1" here means: ListComplete event 
-			return r.getEvents().size() - 1; // TODO check if was successfull
-		}
-		return 0;
-	}
-	
-	/**
-	 * Perform call to specified phone number and join to conference
-	 * 
-	 * @param number
-	 *            number to call
-	 * @param r
-	 *            room to be connected to the call
-	 */
-	public void joinToConfCall(String number, Room r) {
-		String sipNumber = (r != null && r.getConfno() != null) ? r.getConfno() : null;
-		if (sipNumber == null) {
-			log.warn("Failed to get SIP number for room: {}", r);
-			return;
-		}
-
-		OriginateAction oa = new OriginateAction();
-		oa.setChannel(String.format("Local/%s@rooms-originate", sipNumber));
-		oa.setContext("rooms-out");
-		oa.setExten(number);
-		oa.setPriority(1);
-		oa.setTimeout(timeout);
-
-		exec(oa); //TODO handle response
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.asteriskjava.manager.DefaultManagerConnection;
+import org.asteriskjava.manager.ManagerConnection;
+import org.asteriskjava.manager.ManagerConnectionFactory;
+import org.asteriskjava.manager.ResponseEvents;
+import org.asteriskjava.manager.action.ConfbridgeListAction;
+import org.asteriskjava.manager.action.DbDelAction;
+import org.asteriskjava.manager.action.DbDelTreeAction;
+import org.asteriskjava.manager.action.DbGetAction;
+import org.asteriskjava.manager.action.DbPutAction;
+import org.asteriskjava.manager.action.EventGeneratingAction;
+import org.asteriskjava.manager.action.ManagerAction;
+import org.asteriskjava.manager.action.OriginateAction;
+import org.asteriskjava.manager.response.ManagerError;
+import org.asteriskjava.manager.response.ManagerResponse;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class SipDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SipDao.class);
+	public static final String ASTERISK_OM_FAMILY = "openmeetings";
+	public static final String ASTERISK_OM_KEY = "rooms";
+	private String sipHostname;
+	private int sipPort;
+	private String sipUsername;
+	private String sipPassword;
+	private long timeout;
+	private ManagerConnectionFactory factory;
+
+	@SuppressWarnings("unused")
+	private SipDao() {
+		// prohibited default constructor
+	}
+
+	public SipDao(String sipHostname, int sipPort, String sipUsername, String sipPassword, long timeout) {
+		this.sipHostname = sipHostname;
+		this.sipPort = sipPort;
+		this.sipUsername = sipUsername;
+		this.sipPassword = sipPassword;
+		this.timeout = timeout;
+		factory = new ManagerConnectionFactory(this.sipHostname, this.sipPort, this.sipUsername, this.sipPassword);
+	}
+
+	private ManagerConnection getConnection() {
+		DefaultManagerConnection con = (DefaultManagerConnection)factory.createManagerConnection(); // TODO secure
+		con.setDefaultEventTimeout(timeout);
+		con.setDefaultResponseTimeout(timeout);
+		con.setSocketReadTimeout((int)timeout);
+		con.setSocketTimeout((int)timeout);
+		return con;
+	}
+	
+	private ManagerResponse exec(ManagerAction action) {
+		if (factory == null) {
+			log.warn("There is no Asterisk configured");
+			return null;
+		}
+		ManagerConnection con = getConnection();
+		try {
+			con.login();
+			ManagerResponse r = con.sendAction(action);
+			if (r != null) {
+				log.debug(r.toString());
+			}
+			return (r instanceof ManagerError) ? null : r;
+		} catch (Exception e) {
+			log.error("Error while executing ManagerAction: " + action, e);
+		} finally {
+			try {
+				con.logoff();
+			} catch (Exception e) {
+				// no-op
+			}
+		}
+		return null;
+	}
+
+	private ResponseEvents execEvent(EventGeneratingAction action) {
+		if (factory == null) {
+			log.warn("There is no Asterisk configured");
+			return null;
+		}
+		ManagerConnection con = getConnection();
+		try {
+			con.login("on");
+			ResponseEvents r = con.sendEventGeneratingAction(action);
+			if (r != null) {
+				log.debug(r.getResponse().toString());
+			}
+			return (r == null || r.getResponse() instanceof ManagerError) ? null : r;
+		} catch (Exception e) {
+			log.error("Error while executing EventGeneratingAction: " + action, e);
+		} finally {
+			try {
+				con.logoff();
+			} catch (Exception e) {
+				// no-op
+			}
+		}
+		return null;
+	}
+
+	private static String getKey(String confno) {
+		return ASTERISK_OM_KEY + "/" + confno;
+	}
+
+	public String get(String confno) {
+		String pin = null;
+		DbGetAction da = new DbGetAction(ASTERISK_OM_FAMILY, getKey(confno));
+		ManagerResponse r = exec(da);
+		if (r != null) {
+			pin = r.getResponse();
+		}
+		return pin;
+	}
+
+	public void update(String confno, String pin) {
+		delete(confno);
+		DbPutAction da = new DbPutAction(ASTERISK_OM_FAMILY, getKey(confno), pin);
+		exec(da);
+	}
+
+	public void delete() {
+		DbDelTreeAction da = new DbDelTreeAction(ASTERISK_OM_FAMILY, ASTERISK_OM_KEY);
+		exec(da);
+	}
+
+	public void delete(String confno) {
+		DbDelAction da = new DbDelAction(ASTERISK_OM_FAMILY, getKey(confno));
+		exec(da);
+	}
+
+	public Integer countUsers(String confno) {
+		if (confno == null) {
+			return null;
+		}
+		ConfbridgeListAction da = new ConfbridgeListAction(confno);
+		ResponseEvents r = execEvent(da);
+		if (r != null) {
+			log.debug("SipDao::countUsers size == " + r.getEvents().size());
+			// "- 1" here means: ListComplete event 
+			return r.getEvents().size() - 1; // TODO check if was successfull
+		}
+		return 0;
+	}
+	
+	/**
+	 * Perform call to specified phone number and join to conference
+	 * 
+	 * @param number
+	 *            number to call
+	 * @param r
+	 *            room to be connected to the call
+	 */
+	public void joinToConfCall(String number, Room r) {
+		String sipNumber = (r != null && r.getConfno() != null) ? r.getConfno() : null;
+		if (sipNumber == null) {
+			log.warn("Failed to get SIP number for room: {}", r);
+			return;
+		}
+
+		OriginateAction oa = new OriginateAction();
+		oa.setChannel(String.format("Local/%s@rooms-originate", sipNumber));
+		oa.setContext("rooms-out");
+		oa.setExten(number);
+		oa.setPriority(1);
+		oa.setTimeout(timeout);
+
+		exec(oa); //TODO handle response
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
index 698dbe0..920647a 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
@@ -1,206 +1,206 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao.server;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
-
-/**
- * Methods to add/get/remove {@link Client}s to the session
- *
- *
- * @author sebawagner
- *
- */
-public interface ISessionManager {
-	void clearCache();
-
-	/**
-	 * Notified on server start, when the session manager should be started and
-	 * eventually caches cleared/setup
-	 */
-	void sessionStart();
-
-	Client add(Client c, Server server);
-	/**
-	 * add a new client item
-	 *
-	 * @param streamId
-	 * @param scopeName
-	 * @param remotePort
-	 * @param remoteAddress
-	 * @param swfUrl
-	 * @param server
-	 * @return
-	 */
-	Client addClientListItem(String streamId, String scopeName, int remotePort, String remoteAddress, String swfUrl, Server server);
-
-	Collection<Client> getClients();
-
-	/**
-	 * loads the server into the client (only if database cache is used)
-	 *
-	 * @return
-	 */
-	Collection<Client> getClientsWithServer();
-
-	/**
-	 * Get a client by its streamId
-	 *
-	 * @param streamId
-	 * @param server
-	 * @return
-	 */
-	Client getClientByStreamId(String streamId, Server server);
-
-	/**
-	 * get a client by its publicSID and the server,
-	 *
-	 * @param publicSID
-	 * @param server
-	 * @return
-	 */
-	Client getClientByPublicSID(String publicSID, Server server);
-
-	/**
-	 * same as {@link #getClientByPublicSID(String, boolean, Server)} but it ignores
-	 * if the server part, so it will deliver any client just by its publicSID.<br/>
-	 * <br/>
-	 * <b>Note:</b>
-	 * This method requires more time to find the user, so under normal circumstances
-	 * you should use {@link #getClientByPublicSID(String, boolean, Server)}!
-	 *
-	 * @param publicSID
-	 * @return
-	 */
-	ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
-
-	/**
-	 *
-	 * @param userId
-	 * @return
-	 *
-	 * @deprecated There could be multiple users logged in with the same userid,
-	 *             then this call would return a list not a single user
-	 */
-	@Deprecated
-	Client getClientByUserId(Long userId);
-
-	/**
-	 * Update the session object of the audio/video-connection and additionally
-	 * swap the values to the session object of the user that holds the full
-	 * session object
-	 *
-	 * @param streamId
-	 * @param rcm
-	 * @return
-	 */
-	boolean updateAVClientByStreamId(String streamId, Client rcm, Server server);
-
-	/**
-	 * Update the session object
-	 *
-	 * updateRoomCount is only <i>one</i> time true, in
-	 * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, String)
-	 * .
-	 *
-	 * @param streamId
-	 * @param rcm
-	 * @param updateRoomCount
-	 *            true means the count for the room has to be updated
-	 * @return
-	 */
-	boolean updateClientByStreamId(String streamId, Client rcm, boolean updateRoomCount, Server server);
-
-	/**
-	 * Remove a client from the session store
-	 *
-	 * @param streamId
-	 * @return
-	 */
-	boolean removeClient(String streamId, Server server);
-
-	/**
-	 * Get all ClientList Objects of that room and domain This Function is
-	 * needed cause it is invoked internally AFTER the current user has been
-	 * already removed from the ClientList to see if the Room is empty again and
-	 * the PollList can be removed
-	 * @param roomId
-	 * @return
-	 */
-	List<Client> getClientListByRoom(Long roomId);
-
-	Collection<Client> getClientListByRoomAll(Long roomId);
-
-	/**
-	 * get the current Moderator in this room
-	 *
-	 * @param roomname
-	 * @return
-	 */
-	List<Client> getCurrentModeratorByRoom(Long roomId);
-
-	/**
-	 * Get list of current client sessions
-	 *
-	 * @param start
-	 * @param max
-	 * @param orderby
-	 * @param asc
-	 * @return
-	 */
-	SearchResult<Client> getListByStartAndMax(int start, int max, String orderby, boolean asc);
-
-	/**
-	 * returns number of current users recording
-	 *
-	 * @param roomId
-	 * @return
-	 */
-	long getRecordingCount(long roomId);
-
-	/**
-	 * returns a number of current users publishing screensharing
-	 *
-	 * @param roomId
-	 * @return
-	 */
-	long getPublishingCount(long roomId);
-
-	/**
-	 * Get a list of all servers of all rooms on that server, serverId = null
-	 * means it is a local session on the master.
-	 *
-	 * @param server
-	 * @return a set, a roomId can be only one time in this list
-	 */
-	List<Long> getActiveRoomIdsByServer(Server server);
-
-	/**
-	 * Get some statistics about the current sessions
-	 *
-	 * @return
-	 */
-	String getSessionStatistics();
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+
+/**
+ * Methods to add/get/remove {@link Client}s to the session
+ *
+ *
+ * @author sebawagner
+ *
+ */
+public interface ISessionManager {
+	void clearCache();
+
+	/**
+	 * Notified on server start, when the session manager should be started and
+	 * eventually caches cleared/setup
+	 */
+	void sessionStart();
+
+	Client add(Client c, Server server);
+	/**
+	 * add a new client item
+	 *
+	 * @param streamId
+	 * @param scopeName
+	 * @param remotePort
+	 * @param remoteAddress
+	 * @param swfUrl
+	 * @param server
+	 * @return
+	 */
+	Client addClientListItem(String streamId, String scopeName, int remotePort, String remoteAddress, String swfUrl, Server server);
+
+	Collection<Client> getClients();
+
+	/**
+	 * loads the server into the client (only if database cache is used)
+	 *
+	 * @return
+	 */
+	Collection<Client> getClientsWithServer();
+
+	/**
+	 * Get a client by its streamId
+	 *
+	 * @param streamId
+	 * @param server
+	 * @return
+	 */
+	Client getClientByStreamId(String streamId, Server server);
+
+	/**
+	 * get a client by its publicSID and the server,
+	 *
+	 * @param publicSID
+	 * @param server
+	 * @return
+	 */
+	Client getClientByPublicSID(String publicSID, Server server);
+
+	/**
+	 * same as {@link #getClientByPublicSID(String, boolean, Server)} but it ignores
+	 * if the server part, so it will deliver any client just by its publicSID.<br/>
+	 * <br/>
+	 * <b>Note:</b>
+	 * This method requires more time to find the user, so under normal circumstances
+	 * you should use {@link #getClientByPublicSID(String, boolean, Server)}!
+	 *
+	 * @param publicSID
+	 * @return
+	 */
+	ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
+
+	/**
+	 *
+	 * @param userId
+	 * @return
+	 *
+	 * @deprecated There could be multiple users logged in with the same userid,
+	 *             then this call would return a list not a single user
+	 */
+	@Deprecated
+	Client getClientByUserId(Long userId);
+
+	/**
+	 * Update the session object of the audio/video-connection and additionally
+	 * swap the values to the session object of the user that holds the full
+	 * session object
+	 *
+	 * @param streamId
+	 * @param rcm
+	 * @return
+	 */
+	boolean updateAVClientByStreamId(String streamId, Client rcm, Server server);
+
+	/**
+	 * Update the session object
+	 *
+	 * updateRoomCount is only <i>one</i> time true, in
+	 * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, String)
+	 * .
+	 *
+	 * @param streamId
+	 * @param rcm
+	 * @param updateRoomCount
+	 *            true means the count for the room has to be updated
+	 * @return
+	 */
+	boolean updateClientByStreamId(String streamId, Client rcm, boolean updateRoomCount, Server server);
+
+	/**
+	 * Remove a client from the session store
+	 *
+	 * @param streamId
+	 * @return
+	 */
+	boolean removeClient(String streamId, Server server);
+
+	/**
+	 * Get all ClientList Objects of that room and domain This Function is
+	 * needed cause it is invoked internally AFTER the current user has been
+	 * already removed from the ClientList to see if the Room is empty again and
+	 * the PollList can be removed
+	 * @param roomId
+	 * @return
+	 */
+	List<Client> getClientListByRoom(Long roomId);
+
+	Collection<Client> getClientListByRoomAll(Long roomId);
+
+	/**
+	 * get the current Moderator in this room
+	 *
+	 * @param roomname
+	 * @return
+	 */
+	List<Client> getCurrentModeratorByRoom(Long roomId);
+
+	/**
+	 * Get list of current client sessions
+	 *
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	SearchResult<Client> getListByStartAndMax(int start, int max, String orderby, boolean asc);
+
+	/**
+	 * returns number of current users recording
+	 *
+	 * @param roomId
+	 * @return
+	 */
+	long getRecordingCount(long roomId);
+
+	/**
+	 * returns a number of current users publishing screensharing
+	 *
+	 * @param roomId
+	 * @return
+	 */
+	long getPublishingCount(long roomId);
+
+	/**
+	 * Get a list of all servers of all rooms on that server, serverId = null
+	 * means it is a local session on the master.
+	 *
+	 * @param server
+	 * @return a set, a roomId can be only one time in this list
+	 */
+	List<Long> getActiveRoomIdsByServer(Server server);
+
+	/**
+	 * Get some statistics about the current sessions
+	 *
+	 * @return
+	 */
+	String getSessionStatistics();
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
index ed612eb..dad22cf 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
@@ -1,222 +1,222 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao.server;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.util.DaoHelper;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 
- * CRUD for {@link Server}
- * 
- * @author solomax, sebawagner
- * 
- */
-@Transactional
-public class ServerDao implements IDataProviderDao<Server> {
-	private static final Logger log = Red5LoggerFactory.getLogger(ServerDao.class, webAppRootKey);
-	public final static String[] searchFields = { "name", "address", "comment" };
-
-	@PersistenceContext
-	private EntityManager em;
-
-	@Autowired
-	private UserDao userDao;
-	
-	/**
-	 * Get a list of all available servers
-	 * 
-	 * @return
-	 */
-	public List<Server> getServerList() {
-		log.debug("getServerList enter");
-		TypedQuery<Server> q = em.createNamedQuery("getAllServers",
-				Server.class);
-		return q.getResultList();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.apache.openmeetings.data.OmDAO#get(int, int)
-	 */
-	@Override
-	public List<Server> get(int start, int max) {
-		TypedQuery<Server> q = em.createNamedQuery("getAllServers", Server.class);
-		q.setFirstResult(start);
-		q.setMaxResults(max);
-		return q.getResultList();
-	}
-
-	@Override
-	public List<Server> get(String search, int start, int count, String order) {
-		TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery(
-				"Server", "s", search, true, false, order, searchFields),
-				Server.class);
-		q.setFirstResult(start);
-		q.setMaxResults(count);
-		return q.getResultList();
-	}
-
-	/**
-	 * get the list of all servers in the cluster that are ready to receive a
-	 * ping (active = true)
-	 * 
-	 * @return
-	 */
-	public List<Server> getActiveServers() {
-		return em.createNamedQuery("getActiveServers", Server.class)
-				.getResultList();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.apache.openmeetings.data.OmDAO#count()
-	 */
-	@Override
-	public long count() {
-		log.debug("getServerCount enter");
-		TypedQuery<Long> q = em.createNamedQuery("getServerCount", Long.class);
-
-		return q.getSingleResult();
-	}
-
-	@Override
-	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Server",
-				"s", search, true, true, null, searchFields), Long.class);
-		return q.getSingleResult();
-	}
-
-	@Override
-	public Server get(long id) {
-		return get(Long.valueOf(id));
-	}
-	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.apache.openmeetings.data.OmDAO#get(long)
-	 */
-	@Override
-	public Server get(Long id) {
-		Server result = null;
-		log.debug("getServer enter, id = " + id);
-		TypedQuery<Server> q = em.createNamedQuery("getServerById",
-				Server.class);
-		q.setParameter("id", id);
-		try {
-			result = q.getSingleResult();
-		} catch (NoResultException e) {
-			// noop
-		}
-		return result;
-	}
-
-	/**
-	 * Get server by its address
-	 * 
-	 * @param address
-	 * @return
-	 */
-	public Server getServerByAddress(String address) {
-		log.debug("getServer enter, address = " + address);
-		TypedQuery<Server> q = em.createNamedQuery("getServerByAddress",
-				Server.class);
-		q.setParameter("address", address);
-		List<Server> list = q.getResultList();
-		return list.size() > 0 ? list.get(0) : null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.apache.openmeetings.data.OmDAO#update(org.apache.openmeetings.persistence
-	 * .beans.OmEntity, long)
-	 */
-	@Override
-	public Server update(Server entity, Long userId) {
-		entity.setDeleted(false);
-		if (entity.getId() == null) {
-			entity.setInserted(new Date());
-			if (userId != null) {
-				entity.setInsertedby(userDao.get(userId));
-			}
-			em.persist(entity);
-		} else {
-			entity.setUpdated(new Date());
-			if (userId != null) {
-				entity.setUpdatedby(userDao.get(userId));
-			}
-			em.merge(entity);
-		}
-		return entity;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.apache.openmeetings.data.OmDAO#delete(org.apache.openmeetings.persistence
-	 * .beans.OmEntity, long)
-	 */
-	@Override
-	public void delete(Server entity, Long userId) {
-		if (entity.getId() != null) {
-			entity.setUpdated(new Date());
-			if (userId != null) {
-				entity.setUpdatedby(userDao.get(userId));
-			}
-			entity.setDeleted(true);
-			em.merge(entity);
-		}
-	}
-
-	/**
-	 * get {@link Server} by name
-	 * 
-	 * @param name
-	 * @return
-	 */
-	public List<Server> getServersByName(String name) {
-		TypedQuery<Server> q = em.createNamedQuery("getServerByName",
-				Server.class);
-		q.setParameter("name", name);
-		return q.getResultList();
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.DaoHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * CRUD for {@link Server}
+ * 
+ * @author solomax, sebawagner
+ * 
+ */
+@Transactional
+public class ServerDao implements IDataProviderDao<Server> {
+	private static final Logger log = Red5LoggerFactory.getLogger(ServerDao.class, webAppRootKey);
+	public final static String[] searchFields = { "name", "address", "comment" };
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private UserDao userDao;
+	
+	/**
+	 * Get a list of all available servers
+	 * 
+	 * @return
+	 */
+	public List<Server> getServerList() {
+		log.debug("getServerList enter");
+		TypedQuery<Server> q = em.createNamedQuery("getAllServers",
+				Server.class);
+		return q.getResultList();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.openmeetings.data.OmDAO#get(int, int)
+	 */
+	@Override
+	public List<Server> get(int start, int max) {
+		TypedQuery<Server> q = em.createNamedQuery("getAllServers", Server.class);
+		q.setFirstResult(start);
+		q.setMaxResults(max);
+		return q.getResultList();
+	}
+
+	@Override
+	public List<Server> get(String search, int start, int count, String order) {
+		TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery(
+				"Server", "s", search, true, false, order, searchFields),
+				Server.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	/**
+	 * get the list of all servers in the cluster that are ready to receive a
+	 * ping (active = true)
+	 * 
+	 * @return
+	 */
+	public List<Server> getActiveServers() {
+		return em.createNamedQuery("getActiveServers", Server.class)
+				.getResultList();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.openmeetings.data.OmDAO#count()
+	 */
+	@Override
+	public long count() {
+		log.debug("getServerCount enter");
+		TypedQuery<Long> q = em.createNamedQuery("getServerCount", Long.class);
+
+		return q.getSingleResult();
+	}
+
+	@Override
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Server",
+				"s", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+
+	@Override
+	public Server get(long id) {
+		return get(Long.valueOf(id));
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.openmeetings.data.OmDAO#get(long)
+	 */
+	@Override
+	public Server get(Long id) {
+		Server result = null;
+		log.debug("getServer enter, id = " + id);
+		TypedQuery<Server> q = em.createNamedQuery("getServerById",
+				Server.class);
+		q.setParameter("id", id);
+		try {
+			result = q.getSingleResult();
+		} catch (NoResultException e) {
+			// noop
+		}
+		return result;
+	}
+
+	/**
+	 * Get server by its address
+	 * 
+	 * @param address
+	 * @return
+	 */
+	public Server getServerByAddress(String address) {
+		log.debug("getServer enter, address = " + address);
+		TypedQuery<Server> q = em.createNamedQuery("getServerByAddress",
+				Server.class);
+		q.setParameter("address", address);
+		List<Server> list = q.getResultList();
+		return list.size() > 0 ? list.get(0) : null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.openmeetings.data.OmDAO#update(org.apache.openmeetings.persistence
+	 * .beans.OmEntity, long)
+	 */
+	@Override
+	public Server update(Server entity, Long userId) {
+		entity.setDeleted(false);
+		if (entity.getId() == null) {
+			entity.setInserted(new Date());
+			if (userId != null) {
+				entity.setInsertedby(userDao.get(userId));
+			}
+			em.persist(entity);
+		} else {
+			entity.setUpdated(new Date());
+			if (userId != null) {
+				entity.setUpdatedby(userDao.get(userId));
+			}
+			em.merge(entity);
+		}
+		return entity;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.openmeetings.data.OmDAO#delete(org.apache.openmeetings.persistence
+	 * .beans.OmEntity, long)
+	 */
+	@Override
+	public void delete(Server entity, Long userId) {
+		if (entity.getId() != null) {
+			entity.setUpdated(new Date());
+			if (userId != null) {
+				entity.setUpdatedby(userDao.get(userId));
+			}
+			entity.setDeleted(true);
+			em.merge(entity);
+		}
+	}
+
+	/**
+	 * get {@link Server} by name
+	 * 
+	 * @param name
+	 * @return
+	 */
+	public List<Server> getServersByName(String name) {
+		TypedQuery<Server> q = em.createNamedQuery("getServerByName",
+				Server.class);
+		q.setParameter("name", name);
+		return q.getResultList();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
index 423b05c..d74064e 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
@@ -1,146 +1,146 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao.user;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.util.DaoHelper;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-public class GroupDao implements IGroupAdminDataProviderDao<Group> {
-	public final static String[] searchFields = {"name"};
-	@PersistenceContext
-	private EntityManager em;
-
-	@Override
-	public Group get(long id) {
-		return get(Long.valueOf(id));
-	}
-	
-	@Override
-	public Group get(Long id) {
-		TypedQuery<Group> query = em.createNamedQuery("getGroupById", Group.class);
-		query.setParameter("id", id);
-		Group o = null;
-		try {
-			o = query.getSingleResult();
-		} catch (NoResultException e) {
-			// o = null;
-		}
-		return o;
-	}
-
-	public Group get(String name) {
-		List<Group> groups = em.createNamedQuery("getGroupByName", Group.class).setParameter("name", name).getResultList();
-		return groups == null || groups.isEmpty() ? null : groups.get(0);
-	}
-
-	@Override
-	public List<Group> get(int start, int count) {
-		TypedQuery<Group> q = em.createNamedQuery("getNondeletedGroups", Group.class);
-		q.setFirstResult(start);
-		q.setMaxResults(count);
-		return q.getResultList();
-	}
-
-	@Override
-	public List<Group> get(String search, int start, int count, String sort) {
-		TypedQuery<Group> q = em.createQuery(DaoHelper.getSearchQuery("Group", "g", search, true, false, sort, searchFields), Group.class);
-		q.setFirstResult(start);
-		q.setMaxResults(count);
-		return q.getResultList();
-	}
-
-	@Override
-	public List<Group> get(String search, Long adminId, int start, int count, String order) {
-		TypedQuery<Group> q = em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", null, search, true, true, false
-				, "gu.user.id = :adminId AND gu.moderator = true", order, searchFields), Group.class);
-		q.setParameter("adminId", adminId);
-		q.setFirstResult(start);
-		q.setMaxResults(count);
-		return q.getResultList();
-	}
-
-	@Override
-	public long count() {
-		TypedQuery<Long> q = em.createNamedQuery("countGroups", Long.class);
-		return q.getSingleResult();
-	}
-
-	@Override
-	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Group", "o", search, true, true, null, searchFields), Long.class);
-		return q.getSingleResult();
-	}
-
-	@Override
-	public long count(String search, Long adminId) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", null, search, true, true, true
-				, "gu.user.id = :adminId AND gu.moderator = true", null, searchFields), Long.class);
-		q.setParameter("adminId", adminId);
-		return q.getSingleResult();
-	}
-
-	public List<Group> get(Collection<Long> ids) {
-		return em.createNamedQuery("getGroupsByIds", Group.class).setParameter("ids", ids).getResultList();
-	}
-
-	public List<Group> getLimited() {
-		return em.createNamedQuery("getLimitedGroups", Group.class).getResultList();
-	}
-
-	@Override
-	public Group update(Group entity, Long userId) {
-		if (entity.getId() == null) {
-			if (userId != null) {
-				entity.setInsertedby(userId);
-			}
-			entity.setInserted(new Date());
-			em.persist(entity);
-		} else {
-			if (userId != null) {
-				entity.setUpdatedby(userId);
-			}
-			entity.setUpdated(new Date());
-			em.merge(entity);
-		}
-		return entity;
-	}
-
-	@Override
-	public void delete(Group g, Long userId) {
-		em.createNamedQuery("deleteGroupUsersByGroup").setParameter("id", g.getId()).executeUpdate();
-
-		g.setDeleted(true);
-		if (userId != null) {
-			g.setUpdatedby(userId);
-		}
-		em.merge(g);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class GroupDao implements IGroupAdminDataProviderDao<Group> {
+	public final static String[] searchFields = {"name"};
+	@PersistenceContext
+	private EntityManager em;
+
+	@Override
+	public Group get(long id) {
+		return get(Long.valueOf(id));
+	}
+	
+	@Override
+	public Group get(Long id) {
+		TypedQuery<Group> query = em.createNamedQuery("getGroupById", Group.class);
+		query.setParameter("id", id);
+		Group o = null;
+		try {
+			o = query.getSingleResult();
+		} catch (NoResultException e) {
+			// o = null;
+		}
+		return o;
+	}
+
+	public Group get(String name) {
+		List<Group> groups = em.createNamedQuery("getGroupByName", Group.class).setParameter("name", name).getResultList();
+		return groups == null || groups.isEmpty() ? null : groups.get(0);
+	}
+
+	@Override
+	public List<Group> get(int start, int count) {
+		TypedQuery<Group> q = em.createNamedQuery("getNondeletedGroups", Group.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	@Override
+	public List<Group> get(String search, int start, int count, String sort) {
+		TypedQuery<Group> q = em.createQuery(DaoHelper.getSearchQuery("Group", "g", search, true, false, sort, searchFields), Group.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	@Override
+	public List<Group> get(String search, Long adminId, int start, int count, String order) {
+		TypedQuery<Group> q = em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", null, search, true, true, false
+				, "gu.user.id = :adminId AND gu.moderator = true", order, searchFields), Group.class);
+		q.setParameter("adminId", adminId);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	@Override
+	public long count() {
+		TypedQuery<Long> q = em.createNamedQuery("countGroups", Long.class);
+		return q.getSingleResult();
+	}
+
+	@Override
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Group", "o", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+
+	@Override
+	public long count(String search, Long adminId) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", null, search, true, true, true
+				, "gu.user.id = :adminId AND gu.moderator = true", null, searchFields), Long.class);
+		q.setParameter("adminId", adminId);
+		return q.getSingleResult();
+	}
+
+	public List<Group> get(Collection<Long> ids) {
+		return em.createNamedQuery("getGroupsByIds", Group.class).setParameter("ids", ids).getResultList();
+	}
+
+	public List<Group> getLimited() {
+		return em.createNamedQuery("getLimitedGroups", Group.class).getResultList();
+	}
+
+	@Override
+	public Group update(Group entity, Long userId) {
+		if (entity.getId() == null) {
+			if (userId != null) {
+				entity.setInsertedby(userId);
+			}
+			entity.setInserted(new Date());
+			em.persist(entity);
+		} else {
+			if (userId != null) {
+				entity.setUpdatedby(userId);
+			}
+			entity.setUpdated(new Date());
+			em.merge(entity);
+		}
+		return entity;
+	}
+
+	@Override
+	public void delete(Group g, Long userId) {
+		em.createNamedQuery("deleteGroupUsersByGroup").setParameter("id", g.getId()).executeUpdate();
+
+		g.setDeleted(true);
+		if (userId != null) {
+			g.setUpdatedby(userId);
+		}
+		em.merge(g);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
index 53d85a7..bcc6d5c 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
@@ -1,124 +1,124 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao.user;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.util.DaoHelper;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-public class GroupUserDao implements IDataProviderDao<GroupUser> {
-	@PersistenceContext
-	private EntityManager em;
-	public final static String[] searchFields = {"user.lastname", "user.firstname", "user.login", "user.address.email"};
-
-	@Override
-	public GroupUser get(long id) {
-		return get(Long.valueOf(id));
-	}
-	
-	@Override
-	public GroupUser get(Long id) {
-		TypedQuery<GroupUser> q = em.createNamedQuery("getGroupUsersById", GroupUser.class);
-		q.setParameter("id", id);
-		return q.getSingleResult();
-	}
-
-	@Override
-	public List<GroupUser> get(int start, int count) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	@Override
-	public List<GroupUser> get(String search, int start, int count, String sort) {
-		throw new RuntimeException("Should not be used");
-	}
-	
-	public List<GroupUser> get(long groupId, String search, int start, int count, String sort) {
-		TypedQuery<GroupUser> q = em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", null, search, false, false, "ou.group.id = :groupId", sort, searchFields), GroupUser.class);
-		q.setParameter("groupId", groupId);
-		q.setFirstResult(start);
-		q.setMaxResults(count);
-		return q.getResultList();
-	}
-	
-	public List<GroupUser> get(long groupId, int start, int count) {
-		TypedQuery<GroupUser> q = em.createNamedQuery("getGroupUsersByGroupId", GroupUser.class);
-		q.setParameter("id", groupId);
-		q.setFirstResult(start);
-		q.setMaxResults(count);
-		return q.getResultList();
-	}
-
-	public GroupUser getByGroupAndUser(long groupId, long userId) {
-		try {
-			List<GroupUser> list = em.createNamedQuery("isUserInGroup", GroupUser.class)
-					.setParameter("groupId", groupId).setParameter("userId", userId).getResultList();
-			if (list != null && !list.isEmpty()) {
-				return list.get(0);
-			}
-		} catch (Exception e) {
-			//no-op
-		}
-		return null;
-	}
-	
-	public boolean isUserInGroup(long groupId, long userId) {
-		return em.createNamedQuery("isUserInGroup", GroupUser.class)
-				.setParameter("groupId", groupId).setParameter("userId", userId).getResultList().size() > 0;
-	}
-	
-	@Override
-	public long count() {
-		throw new RuntimeException("Should not be used");
-	}
-
-	@Override
-	public long count(String search) {
-		throw new RuntimeException("Should not be used");
-	}
-	
-	public long count(long groupId, String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", search, false, true, null, searchFields), Long.class);
-		return q.getSingleResult();
-	}
-	
-	public long count(long groupId) {
-		TypedQuery<Long> q = em.createNamedQuery("countGroupUsers", Long.class);
-		q.setParameter("id", groupId);
-		return q.getSingleResult();
-	}
-
-	@Override
-	public GroupUser update(GroupUser entity, Long userId) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	@Override
-	public void delete(GroupUser entity, Long userId) {
-		throw new RuntimeException("Should not be used");
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class GroupUserDao implements IDataProviderDao<GroupUser> {
+	@PersistenceContext
+	private EntityManager em;
+	public final static String[] searchFields = {"user.lastname", "user.firstname", "user.login", "user.address.email"};
+
+	@Override
+	public GroupUser get(long id) {
+		return get(Long.valueOf(id));
+	}
+	
+	@Override
+	public GroupUser get(Long id) {
+		TypedQuery<GroupUser> q = em.createNamedQuery("getGroupUsersById", GroupUser.class);
+		q.setParameter("id", id);
+		return q.getSingleResult();
+	}
+
+	@Override
+	public List<GroupUser> get(int start, int count) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	@Override
+	public List<GroupUser> get(String search, int start, int count, String sort) {
+		throw new RuntimeException("Should not be used");
+	}
+	
+	public List<GroupUser> get(long groupId, String search, int start, int count, String sort) {
+		TypedQuery<GroupUser> q = em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", null, search, false, false, "ou.group.id = :groupId", sort, searchFields), GroupUser.class);
+		q.setParameter("groupId", groupId);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public List<GroupUser> get(long groupId, int start, int count) {
+		TypedQuery<GroupUser> q = em.createNamedQuery("getGroupUsersByGroupId", GroupUser.class);
+		q.setParameter("id", groupId);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public GroupUser getByGroupAndUser(long groupId, long userId) {
+		try {
+			List<GroupUser> list = em.createNamedQuery("isUserInGroup", GroupUser.class)
+					.setParameter("groupId", groupId).setParameter("userId", userId).getResultList();
+			if (list != null && !list.isEmpty()) {
+				return list.get(0);
+			}
+		} catch (Exception e) {
+			//no-op
+		}
+		return null;
+	}
+	
+	public boolean isUserInGroup(long groupId, long userId) {
+		return em.createNamedQuery("isUserInGroup", GroupUser.class)
+				.setParameter("groupId", groupId).setParameter("userId", userId).getResultList().size() > 0;
+	}
+	
+	@Override
+	public long count() {
+		throw new RuntimeException("Should not be used");
+	}
+
+	@Override
+	public long count(String search) {
+		throw new RuntimeException("Should not be used");
+	}
+	
+	public long count(long groupId, String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", search, false, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+	
+	public long count(long groupId) {
+		TypedQuery<Long> q = em.createNamedQuery("countGroupUsers", Long.class);
+		q.setParameter("id", groupId);
+		return q.getSingleResult();
+	}
+
+	@Override
+	public GroupUser update(GroupUser entity, Long userId) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	@Override
+	public void delete(GroupUser entity, Long userId) {
+		throw new RuntimeException("Should not be used");
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
index 5562c37..dc14f03 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
@@ -1,199 +1,199 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.entity.basic;
-
-import java.util.Calendar;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-
-@Entity
-@NamedQueries({
-	@NamedQuery(name = "getMailMessageById", query = "SELECT m FROM MailMessage m WHERE m.id = :id")
-	, @NamedQuery(name = "getMailMessages", query = "SELECT m FROM MailMessage m ORDER BY m.updated, m.inserted")
-	, @NamedQuery(name = "getMailMessagesByStatus", query = "SELECT m FROM MailMessage m WHERE m.status = :status ORDER BY m.updated, m.inserted")
-	, @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM MailMessage m")
-	, @NamedQuery(name = "resetMailStatusByDate", query = "UPDATE MailMessage m SET m.status = :noneStatus WHERE m.status = :sendingStatus AND m.updated < :date")
-	, @NamedQuery(name = "resetMailStatusById", query = "UPDATE MailMessage m SET m.errorCount = 0, m.status = :noneStatus WHERE m.id = :id")
-})
-@Table(name = "email_queue")
-public class MailMessage implements IDataProviderEntity {
-	private static final long serialVersionUID = 1L;
-
-	public enum Status {
-		NONE, SENDING, ERROR, DONE
-	}
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-	@Column(name = "id")
-	private Long id;
-
-	@Lob
-	@Column(name = "recipients")
-	private String recipients;
-
-	@Column(name = "replyTo")
-	private String replyTo;
-
-	@Column(name = "subject")
-	private String subject;
-
-	@Lob
-	@Column(name = "body")
-	private String body;
-
-	@Lob
-	@Column(name = "ics")
-	private byte[] ics;
-
-	@Column(name = "status", nullable = false)
-	@Enumerated(EnumType.STRING)
-	private Status status = Status.NONE;
-
-	@Column(name = "inserted")
-	private Calendar inserted;
-
-	@Column(name = "updated")
-	private Calendar updated;
-
-	@Column(name = "error_count", nullable = false)
-	private int errorCount = 0;
-
-	@Lob
-	@Column(name = "last_error")
-	private String lastError;
-
-	public MailMessage() {
-		this(null, null, null, null, null);
-	}
-	
-	public MailMessage(String recipients, String replyTo, String subject, String body) {
-		this(recipients, replyTo, subject, body, null);
-	}
-	
-	public MailMessage(String recipients, String replyTo, String subject, String body, byte[] ics) {
-		this.recipients = recipients;
-		this.replyTo = replyTo;
-		this.subject = subject;
-		this.body = body;
-		this.ics = ics;
-	}
-	
-	@Override
-	public Long getId() {
-		return id;
-	}
-
-	@Override
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getRecipients() {
-		return recipients;
-	}
-
-	public void setRecipients(String recipients) {
-		this.recipients = recipients;
-	}
-
-	public String getReplyTo() {
-		return replyTo;
-	}
-
-	public void setReplyTo(String replyTo) {
-		this.replyTo = replyTo;
-	}
-
-	public String getSubject() {
-		return subject;
-	}
-
-	public void setSubject(String subject) {
-		this.subject = subject;
-	}
-
-	public String getBody() {
-		return body;
-	}
-
-	public void setBody(String body) {
-		this.body = body;
-	}
-
-	public Status getStatus() {
-		return status;
-	}
-
-	public void setStatus(Status status) {
-		this.status = status;
-	}
-
-	public Calendar getInserted() {
-		return inserted;
-	}
-
-	public void setInserted(Calendar inserted) {
-		this.inserted = inserted;
-	}
-
-	public Calendar getUpdated() {
-		return updated;
-	}
-
-	public void setUpdated(Calendar updated) {
-		this.updated = updated;
-	}
-
-	public byte[] getIcs() {
-		return ics;
-	}
-
-	public void setIcs(byte[] ics) {
-		this.ics = ics;
-	}
-
-	public int getErrorCount() {
-		return errorCount;
-	}
-
-	public void setErrorCount(int errorCount) {
-		this.errorCount = errorCount;
-	}
-
-	public String getLastError() {
-		return lastError;
-	}
-
-	public void setLastError(String lastError) {
-		this.lastError = lastError;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.util.Calendar;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getMailMessageById", query = "SELECT m FROM MailMessage m WHERE m.id = :id")
+	, @NamedQuery(name = "getMailMessages", query = "SELECT m FROM MailMessage m ORDER BY m.updated, m.inserted")
+	, @NamedQuery(name = "getMailMessagesByStatus", query = "SELECT m FROM MailMessage m WHERE m.status = :status ORDER BY m.updated, m.inserted")
+	, @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM MailMessage m")
+	, @NamedQuery(name = "resetMailStatusByDate", query = "UPDATE MailMessage m SET m.status = :noneStatus WHERE m.status = :sendingStatus AND m.updated < :date")
+	, @NamedQuery(name = "resetMailStatusById", query = "UPDATE MailMessage m SET m.errorCount = 0, m.status = :noneStatus WHERE m.id = :id")
+})
+@Table(name = "email_queue")
+public class MailMessage implements IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	public enum Status {
+		NONE, SENDING, ERROR, DONE
+	}
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+
+	@Lob
+	@Column(name = "recipients")
+	private String recipients;
+
+	@Column(name = "replyTo")
+	private String replyTo;
+
+	@Column(name = "subject")
+	private String subject;
+
+	@Lob
+	@Column(name = "body")
+	private String body;
+
+	@Lob
+	@Column(name = "ics")
+	private byte[] ics;
+
+	@Column(name = "status", nullable = false)
+	@Enumerated(EnumType.STRING)
+	private Status status = Status.NONE;
+
+	@Column(name = "inserted")
+	private Calendar inserted;
+
+	@Column(name = "updated")
+	private Calendar updated;
+
+	@Column(name = "error_count", nullable = false)
+	private int errorCount = 0;
+
+	@Lob
+	@Column(name = "last_error")
+	private String lastError;
+
+	public MailMessage() {
+		this(null, null, null, null, null);
+	}
+	
+	public MailMessage(String recipients, String replyTo, String subject, String body) {
+		this(recipients, replyTo, subject, body, null);
+	}
+	
+	public MailMessage(String recipients, String replyTo, String subject, String body, byte[] ics) {
+		this.recipients = recipients;
+		this.replyTo = replyTo;
+		this.subject = subject;
+		this.body = body;
+		this.ics = ics;
+	}
+	
+	@Override
+	public Long getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getRecipients() {
+		return recipients;
+	}
+
+	public void setRecipients(String recipients) {
+		this.recipients = recipients;
+	}
+
+	public String getReplyTo() {
+		return replyTo;
+	}
+
+	public void setReplyTo(String replyTo) {
+		this.replyTo = replyTo;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public void setBody(String body) {
+		this.body = body;
+	}
+
+	public Status getStatus() {
+		return status;
+	}
+
+	public void setStatus(Status status) {
+		this.status = status;
+	}
+
+	public Calendar getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Calendar inserted) {
+		this.inserted = inserted;
+	}
+
+	public Calendar getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Calendar updated) {
+		this.updated = updated;
+	}
+
+	public byte[] getIcs() {
+		return ics;
+	}
+
+	public void setIcs(byte[] ics) {
+		this.ics = ics;
+	}
+
+	public int getErrorCount() {
+		return errorCount;
+	}
+
+	public void setErrorCount(int errorCount) {
+		this.errorCount = errorCount;
+	}
+
+	public String getLastError() {
+		return lastError;
+	}
+
+	public void setLastError(String lastError) {
+		this.lastError = lastError;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
index 7859b49..046bc92 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
@@ -1,304 +1,304 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.entity.server;
-
-import java.util.Calendar;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.Lob;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.openjpa.persistence.jdbc.ForeignKey;
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.openmeetings.db.entity.user.User;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
-
-@Entity
-@NamedQueries({
-		@NamedQuery(name = "getAllServers", query = "SELECT s FROM Server s WHERE s.deleted = false ORDER BY s.id"),
-		@NamedQuery(name = "getServerCount", query = "SELECT COUNT(s) FROM Server s WHERE s.deleted = false"),
-		@NamedQuery(name = "getServerById", query = "SELECT s FROM Server s LEFT JOIN FETCH s.insertedby LEFT JOIN FETCH s.updatedby WHERE s.deleted = false AND s.id = :id"),
-		@NamedQuery(name = "getServerByName", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.name LIKE :name"),
-		@NamedQuery(name = "getServerByAddress", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.address LIKE :address"),
-		@NamedQuery(name = "getServersWithNoUsers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.id NOT IN (SELECT u.server.id FROM User u where u.server.id IS NOT NULL)"),
-		@NamedQuery(name = "getServerWithMinimumUsers", query = "SELECT s.id, COUNT(u) AS cnt FROM User u JOIN u.server s WHERE s.deleted = false GROUP BY s.id ORDER BY cnt"),
-		@NamedQuery(name = "getActiveServers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.active = true") //
-})
-@Table(name = "server")
-@Root
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Server implements IDataProviderEntity {
-	private static final long serialVersionUID = 1L;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-	@Column(name = "id")
-	@Element(data = true)
-	private Long id;
-
-	@Column(name = "name")
-	@Element(data = true)
-	private String name;
-
-	@Column(name = "address")
-	@Element(data = true)
-	private String address;
-
-	@Column(name = "inserted")
-	public Date inserted;
-
-	@Column(name = "updated")
-	public Date updated;
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "insertedby_id", updatable = true, insertable = true)
-	@ForeignKey(enabled = true)
-	public User insertedby;
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "updatedby_id", updatable = true, insertable = true)
-	@ForeignKey(enabled = true)
-	public User updatedby;
-
-	@Lob
-	@Column(name = "comment", length = 2048)
-	@Element(data = true, required = false)
-	private String comment;
-
-	@Column(name = "last_ping", nullable = true)
-	@Element(data = true, required = false)
-	private Calendar lastPing;
-	
-	@Column(name = "port", nullable = true)
-	@Element(data = true, required = false)
-	private int port;
-
-	@Column(name = "protocol", nullable = true)
-	@Element(data = true, required = false)
-	private String protocol;
-
-	@Column(name = "webapp", nullable = true)
-	@Element(data = true, required = false)
-	private String webapp;
-
-	@Column(name = "login", nullable = true)
-	@Element(data = true, required = false)
-	private String user;
-
-	@Column(name = "pass", nullable = true)
-	@Element(data = true, required = false)
-	private String pass;
-
-	@Column(name = "active", nullable = false)
-	@Element(data = true, required = false)
-	private boolean active;
-	
-	@Column(name = "deleted", nullable = false)
-	@Element(data = true)
-	private boolean deleted = false;
-
-	@Override
-	public Long getId() {
-		return id;
-	}
-
-	@Override
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	public boolean isDeleted() {
-		return deleted;
-	}
-
-	public void setDeleted(boolean deleted) {
-		this.deleted = deleted;
-	}
-
-	public Date getInserted() {
-		return inserted;
-	}
-
-	public void setInserted(Date inserted) {
-		this.inserted = inserted;
-	}
-
-	public Date getUpdated() {
-		return updated;
-	}
-
-	public void setUpdated(Date updated) {
-		this.updated = updated;
-	}
-
-	public User getInsertedby() {
-		return insertedby;
-	}
-
-	public void setInsertedby(User insertedby) {
-		this.insertedby = insertedby;
-	}
-
-	public User getUpdatedby() {
-		return updatedby;
-	}
-
-	public void setUpdatedby(User updatedby) {
-		this.updatedby = updatedby;
-	}
-
-	public String getComment() {
-		return comment;
-	}
-
-	public void setComment(String comment) {
-		this.comment = comment;
-	}
-	
-	public Calendar getLastPing() {
-		return lastPing;
-	}
-
-	public void setLastPing(Calendar lastPing) {
-		this.lastPing = lastPing;
-	}
-
-	public int getPort() {
-		return port;
-	}
-
-	public void setPort(int port) {
-		this.port = port;
-	}
-
-	public String getProtocol() {
-		return protocol;
-	}
-
-	public void setProtocol(String protocol) {
-		this.protocol = protocol;
-	}
-
-	public String getWebapp() {
-		return webapp;
-	}
-
-	public void setWebapp(String webapp) {
-		this.webapp = webapp;
-	}
-
-	public String getUser() {
-		return user;
-	}
-
-	public void setUser(String user) {
-		this.user = user;
-	}
-
-	public String getPass() {
-		return pass;
-	}
-
-	public void setPass(String pass) {
-		this.pass = pass;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-	public boolean isActive() {
-		return active;
-	}
-
-	public void setActive(boolean active) {
-		this.active = active;
-	}
-
-	@Override
-	public String toString() {
-		return "Server [id=" + id + ", name=" + name + ", address=" + address
-				+ ", port=" + port + ", user=" + user + ", pass=" + pass
-				+ ", protocol=" + protocol 
-				+ ", active=" + active + ", webapp=" + webapp + ", deleted="
-				+ deleted + "]";
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((address == null) ? 0 : address.hashCode());
-		result = prime * result + ((id == null) ? 0 : id.hashCode());
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		Server other = (Server) obj;
-		if (address == null) {
-			if (other.address != null)
-				return false;
-		} else if (!address.equals(other.address))
-			return false;
-		if (id == null) {
-			if (other.id != null)
-				return false;
-		} else if (!id.equals(other.id))
-			return false;
-		return true;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+		@NamedQuery(name = "getAllServers", query = "SELECT s FROM Server s WHERE s.deleted = false ORDER BY s.id"),
+		@NamedQuery(name = "getServerCount", query = "SELECT COUNT(s) FROM Server s WHERE s.deleted = false"),
+		@NamedQuery(name = "getServerById", query = "SELECT s FROM Server s LEFT JOIN FETCH s.insertedby LEFT JOIN FETCH s.updatedby WHERE s.deleted = false AND s.id = :id"),
+		@NamedQuery(name = "getServerByName", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.name LIKE :name"),
+		@NamedQuery(name = "getServerByAddress", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.address LIKE :address"),
+		@NamedQuery(name = "getServersWithNoUsers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.id NOT IN (SELECT u.server.id FROM User u where u.server.id IS NOT NULL)"),
+		@NamedQuery(name = "getServerWithMinimumUsers", query = "SELECT s.id, COUNT(u) AS cnt FROM User u JOIN u.server s WHERE s.deleted = false GROUP BY s.id ORDER BY cnt"),
+		@NamedQuery(name = "getActiveServers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.active = true") //
+})
+@Table(name = "server")
+@Root
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Server implements IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true)
+	private Long id;
+
+	@Column(name = "name")
+	@Element(data = true)
+	private String name;
+
+	@Column(name = "address")
+	@Element(data = true)
+	private String address;
+
+	@Column(name = "inserted")
+	public Date inserted;
+
+	@Column(name = "updated")
+	public Date updated;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "insertedby_id", updatable = true, insertable = true)
+	@ForeignKey(enabled = true)
+	public User insertedby;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "updatedby_id", updatable = true, insertable = true)
+	@ForeignKey(enabled = true)
+	public User updatedby;
+
+	@Lob
+	@Column(name = "comment", length = 2048)
+	@Element(data = true, required = false)
+	private String comment;
+
+	@Column(name = "last_ping", nullable = true)
+	@Element(data = true, required = false)
+	private Calendar lastPing;
+	
+	@Column(name = "port", nullable = true)
+	@Element(data = true, required = false)
+	private int port;
+
+	@Column(name = "protocol", nullable = true)
+	@Element(data = true, required = false)
+	private String protocol;
+
+	@Column(name = "webapp", nullable = true)
+	@Element(data = true, required = false)
+	private String webapp;
+
+	@Column(name = "login", nullable = true)
+	@Element(data = true, required = false)
+	private String user;
+
+	@Column(name = "pass", nullable = true)
+	@Element(data = true, required = false)
+	private String pass;
+
+	@Column(name = "active", nullable = false)
+	@Element(data = true, required = false)
+	private boolean active;
+	
+	@Column(name = "deleted", nullable = false)
+	@Element(data = true)
+	private boolean deleted = false;
+
+	@Override
+	public Long getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public User getInsertedby() {
+		return insertedby;
+	}
+
+	public void setInsertedby(User insertedby) {
+		this.insertedby = insertedby;
+	}
+
+	public User getUpdatedby() {
+		return updatedby;
+	}
+
+	public void setUpdatedby(User updatedby) {
+		this.updatedby = updatedby;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+	
+	public Calendar getLastPing() {
+		return lastPing;
+	}
+
+	public void setLastPing(Calendar lastPing) {
+		this.lastPing = lastPing;
+	}
+
+	public int getPort() {
+		return port;
+	}
+
+	public void setPort(int port) {
+		this.port = port;
+	}
+
+	public String getProtocol() {
+		return protocol;
+	}
+
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+
+	public String getWebapp() {
+		return webapp;
+	}
+
+	public void setWebapp(String webapp) {
+		this.webapp = webapp;
+	}
+
+	public String getUser() {
+		return user;
+	}
+
+	public void setUser(String user) {
+		this.user = user;
+	}
+
+	public String getPass() {
+		return pass;
+	}
+
+	public void setPass(String pass) {
+		this.pass = pass;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public boolean isActive() {
+		return active;
+	}
+
+	public void setActive(boolean active) {
+		this.active = active;
+	}
+
+	@Override
+	public String toString() {
+		return "Server [id=" + id + ", name=" + name + ", address=" + address
+				+ ", port=" + port + ", user=" + user + ", pass=" + pass
+				+ ", protocol=" + protocol 
+				+ ", active=" + active + ", webapp=" + webapp + ", deleted="
+				+ deleted + "]";
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((address == null) ? 0 : address.hashCode());
+		result = prime * result + ((id == null) ? 0 : id.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Server other = (Server) obj;
+		if (address == null) {
+			if (other.address != null)
+				return false;
+		} else if (!address.equals(other.address))
+			return false;
+		if (id == null) {
+			if (other.id != null)
+				return false;
+		} else if (!id.equals(other.id))
+			return false;
+		return true;
+	}
+}


[21/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/BaseURLLoadTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/BaseURLLoadTest.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/BaseURLLoadTest.lzx
index 4282969..a0e7eda 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/BaseURLLoadTest.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/BaseURLLoadTest.lzx
@@ -1,146 +1,146 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="BaseURLLoadTest" extends="NetworkTest">
-
-	<switch>
-		<when property="$as3">
-			<passthrough>
-				import flash.events.*;
-				import flash.net.*;
-				import flash.utils.*;
-			</passthrough>
-		</when>
-	</switch>
-
-	<attribute name="testsCount" type="number" value="0" />
-	<attribute name="testTypeParameter" type="string" value="null" />
-	<attribute name="verbose" type="boolean" value="true" />
-
-	<attribute name="startTime" type="number" value="0" />
-	<attribute name="wholeTime" type="number" value="0" />
-	<attribute name="maxTime" type="number" value="0" />
-	<attribute name="minTime" type="number" value="999999" />
-	<attribute name="finishedTestsCount" type="number" value="0" />
-	<attribute name="successfulTestsCount" type="number" value="0" />
-
-	<attribute name="hostUrl" type="string" value="" />
-	<attribute name="loaderInited" type="boolean" value="false" />
-	<attribute name="request" value="null" />
-	<attribute name="loader" value="null" />
-
-	<method name="initLoader">
-		hostUrl = getBaseUrl() + "services/networktest?type=" + testTypeParameter;
-		request = new URLRequest(hostUrl);
-
-		loader = new URLLoader();
-		loader.addEventListener(Event.COMPLETE, this.onComplete);
-		loader.addEventListener(IOErrorEvent.IO_ERROR, this.onError);
-		loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onError);
-
-		loaderInited = true;
-	</method>
-
-	<method name="start">
-		if (!loaderInited) {
-			this.initLoader();
-		}
-		finishedTestsCount = 0;
-		successfulTestsCount = 0;
-		wholeTime = 0;
-		maxTime = 0;
-		minTime = 999999;
-
-		this.log(lbl('report.start') + " " + hostUrl);
-		startTime = getTimer();
-		loader.load(request);
-	</method>
-
-	<method name="forcedStop">
-		loader.close();
-		this.log("stopped");
-	</method>
-
-	<method name="onComplete" args="e">
-		<![CDATA[
-		var endTime = getTimer();
-		var pingTime = endTime - startTime;
-		wholeTime += pingTime;
-		if (pingTime > maxTime) {
-			maxTime = pingTime;
-		}
-		if (pingTime < minTime) {
-			minTime = pingTime;
-		}
-
-		if (verbose) {
-			this.log(lbl('ping.load') + " = " + pingTime + " " + lbl('ms'));
-		}
-
-		finishedTestsCount++;
-		successfulTestsCount++;
-		if (finishedTestsCount < testsCount && running) {
-			startTime = getTimer();
-			loader.load(request);
-		} else {
-			this.report();
-		}
-		]]>
-	</method>
-
-	<method name="onError" args="e">
-		<![CDATA[
-		if (verbose) {
-			this.log("Error - " + e);
-		}
-
-		finishedTestsCount++;
-		if (finishedTestsCount < testsCount && running) {
-			startTime = getTimer();
-			loader.load(request);
-		} else {
-			this.report();
-		}
-		]]>
-	</method>
-
-	<method name="report">
-		var report = lbl('report') + ":";
-		if (successfulTestsCount > 0) {
-			report += "\n" + this.generateReport();
-		} else {
-			report += " " + lbl('report.con.err');
-		}
-		this.log(report);
-
-		if (successfulTestsCount > 0) {
-			this.setPassed();
-		} else {
-			this.setFailed();
-		}
-	</method>
-
-	<method name="generateReport" />
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="BaseURLLoadTest" extends="NetworkTest">
+
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.events.*;
+				import flash.net.*;
+				import flash.utils.*;
+			</passthrough>
+		</when>
+	</switch>
+
+	<attribute name="testsCount" type="number" value="0" />
+	<attribute name="testTypeParameter" type="string" value="null" />
+	<attribute name="verbose" type="boolean" value="true" />
+
+	<attribute name="startTime" type="number" value="0" />
+	<attribute name="wholeTime" type="number" value="0" />
+	<attribute name="maxTime" type="number" value="0" />
+	<attribute name="minTime" type="number" value="999999" />
+	<attribute name="finishedTestsCount" type="number" value="0" />
+	<attribute name="successfulTestsCount" type="number" value="0" />
+
+	<attribute name="hostUrl" type="string" value="" />
+	<attribute name="loaderInited" type="boolean" value="false" />
+	<attribute name="request" value="null" />
+	<attribute name="loader" value="null" />
+
+	<method name="initLoader">
+		hostUrl = getBaseUrl() + "services/networktest?type=" + testTypeParameter;
+		request = new URLRequest(hostUrl);
+
+		loader = new URLLoader();
+		loader.addEventListener(Event.COMPLETE, this.onComplete);
+		loader.addEventListener(IOErrorEvent.IO_ERROR, this.onError);
+		loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onError);
+
+		loaderInited = true;
+	</method>
+
+	<method name="start">
+		if (!loaderInited) {
+			this.initLoader();
+		}
+		finishedTestsCount = 0;
+		successfulTestsCount = 0;
+		wholeTime = 0;
+		maxTime = 0;
+		minTime = 999999;
+
+		this.log(lbl('report.start') + " " + hostUrl);
+		startTime = getTimer();
+		loader.load(request);
+	</method>
+
+	<method name="forcedStop">
+		loader.close();
+		this.log("stopped");
+	</method>
+
+	<method name="onComplete" args="e">
+		<![CDATA[
+		var endTime = getTimer();
+		var pingTime = endTime - startTime;
+		wholeTime += pingTime;
+		if (pingTime > maxTime) {
+			maxTime = pingTime;
+		}
+		if (pingTime < minTime) {
+			minTime = pingTime;
+		}
+
+		if (verbose) {
+			this.log(lbl('ping.load') + " = " + pingTime + " " + lbl('ms'));
+		}
+
+		finishedTestsCount++;
+		successfulTestsCount++;
+		if (finishedTestsCount < testsCount && running) {
+			startTime = getTimer();
+			loader.load(request);
+		} else {
+			this.report();
+		}
+		]]>
+	</method>
+
+	<method name="onError" args="e">
+		<![CDATA[
+		if (verbose) {
+			this.log("Error - " + e);
+		}
+
+		finishedTestsCount++;
+		if (finishedTestsCount < testsCount && running) {
+			startTime = getTimer();
+			loader.load(request);
+		} else {
+			this.report();
+		}
+		]]>
+	</method>
+
+	<method name="report">
+		var report = lbl('report') + ":";
+		if (successfulTestsCount > 0) {
+			report += "\n" + this.generateReport();
+		} else {
+			report += " " + lbl('report.con.err');
+		}
+		this.log(report);
+
+		if (successfulTestsCount > 0) {
+			this.setPassed();
+		} else {
+			this.setFailed();
+		}
+	</method>
+
+	<method name="generateReport" />
+
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/DownloadSpeedTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/DownloadSpeedTest.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/DownloadSpeedTest.lzx
index 5b195e7..dd8a083 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/DownloadSpeedTest.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/DownloadSpeedTest.lzx
@@ -1,50 +1,50 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="DownloadSpeedTest" extends="BaseURLLoadTest">
-
-	<handler name="oninit">
-		this.setAttribute("testsCount", 1);
-		this.setAttribute("testName", lbl('dwn'));
-		this.setAttribute("testTypeParameter", "download");
-		this.setAttribute("verbose", false);
-		this.setAttribute("resultText", true);
-	</handler>
-
-	<method name="generateReport">
-		var mBytes = loader.bytesTotal/(1024*1024);
-		var timeSec = wholeTime/1000;
-		var speed = mBytes/timeSec;
-
-		var report = lbl('dwn.bytes') + ": " + mBytes + " " + lbl('mb') + "\n";
-		report += lbl('dwn.time') + ": " + timeSec + " " + lbl('sec') + "\n";
-		report += lbl('dwn.speed') + ": " + speed + " " + lbl('mb') + "/" + lbl('sec') + "\n";
-
-		resultLabel.setAttribute("text", "");
-		resultLabel.addFormat("%.2f\n%s", speed, lbl('mb') + "/" + lbl('sec'));
-
-		return report;
-	</method>
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="DownloadSpeedTest" extends="BaseURLLoadTest">
+
+	<handler name="oninit">
+		this.setAttribute("testsCount", 1);
+		this.setAttribute("testName", lbl('dwn'));
+		this.setAttribute("testTypeParameter", "download");
+		this.setAttribute("verbose", false);
+		this.setAttribute("resultText", true);
+	</handler>
+
+	<method name="generateReport">
+		var mBytes = loader.bytesTotal/(1024*1024);
+		var timeSec = wholeTime/1000;
+		var speed = mBytes/timeSec;
+
+		var report = lbl('dwn.bytes') + ": " + mBytes + " " + lbl('mb') + "\n";
+		report += lbl('dwn.time') + ": " + timeSec + " " + lbl('sec') + "\n";
+		report += lbl('dwn.speed') + ": " + speed + " " + lbl('mb') + "/" + lbl('sec') + "\n";
+
+		resultLabel.setAttribute("text", "");
+		resultLabel.addFormat("%.2f\n%s", speed, lbl('mb') + "/" + lbl('sec'));
+
+		return report;
+	</method>
+
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/JitterTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/JitterTest.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/JitterTest.lzx
index e4b2f3d..2bf8d3e 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/JitterTest.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/JitterTest.lzx
@@ -1,57 +1,57 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="JitterTest" extends="BaseURLLoadTest">
-
-	<handler name="oninit">
-		this.setAttribute("testsCount", 100);
-		this.setAttribute("testName", lbl('jitter'));
-		this.setAttribute("testTypeParameter", "jitter");
-		this.setAttribute("verbose", false);
-		this.setAttribute("resultText", true);
-	</handler>
-
-	<method name="generateReport">
-		<![CDATA[
-		var averageTime = wholeTime / successfulTestsCount;
-		var jitterMax = maxTime - averageTime;
-		var jitterMin = minTime - averageTime;
-		var report = lbl('jitter.avg') + ": " + averageTime + " " + lbl('ms') + "\n";
-		report += lbl('jitter.min') + ": " + minTime + " " + lbl('ms') + "\n";
-		report += lbl('jitter.max') + ": " + maxTime + " " + lbl('ms') + "\n";
-		report += lbl('jitter') + ": " + jitterMax + " " + lbl('ms') + "; " + jitterMin + " " + lbl('ms') + " \n";
-
-		var max = -jitterMin;
-		if (jitterMax > max) {
-			max = jitterMax;
-		}
-
-		resultLabel.setAttribute("text", "");
-		resultLabel.addFormat("%.0d\n%s", max, lbl('ms'));
-
-		return report;
-		]]>
-	</method>
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="JitterTest" extends="BaseURLLoadTest">
+
+	<handler name="oninit">
+		this.setAttribute("testsCount", 100);
+		this.setAttribute("testName", lbl('jitter'));
+		this.setAttribute("testTypeParameter", "jitter");
+		this.setAttribute("verbose", false);
+		this.setAttribute("resultText", true);
+	</handler>
+
+	<method name="generateReport">
+		<![CDATA[
+		var averageTime = wholeTime / successfulTestsCount;
+		var jitterMax = maxTime - averageTime;
+		var jitterMin = minTime - averageTime;
+		var report = lbl('jitter.avg') + ": " + averageTime + " " + lbl('ms') + "\n";
+		report += lbl('jitter.min') + ": " + minTime + " " + lbl('ms') + "\n";
+		report += lbl('jitter.max') + ": " + maxTime + " " + lbl('ms') + "\n";
+		report += lbl('jitter') + ": " + jitterMax + " " + lbl('ms') + "; " + jitterMin + " " + lbl('ms') + " \n";
+
+		var max = -jitterMin;
+		if (jitterMax > max) {
+			max = jitterMax;
+		}
+
+		resultLabel.setAttribute("text", "");
+		resultLabel.addFormat("%.0d\n%s", max, lbl('ms'));
+
+		return report;
+		]]>
+	</method>
+
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/NetworkTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/NetworkTest.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/NetworkTest.lzx
index 811a3cb..e837748 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/NetworkTest.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/NetworkTest.lzx
@@ -1,128 +1,128 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="NetworkTest" extends="view">
-
-	<attribute name="testName" type="string" value="null" />
-	<attribute name="protocol" type="string" value="null" />
-	<attribute name="host" type="string" value="null" />
-	<attribute name="port" type="number" value="null" />
-	<attribute name="running" type="boolean" value="false" />
-	<attribute name="allTests" type="boolean" value="false" />
-	<attribute name="resultText" type="boolean" value="false" />
-
-	<method name="start" />
-	<method name="forcedStop" />
-
-	<method name="startAllTestsMode">
-		allTests = true;
-		this.setRunning();
-	</method>
-
-	<view name="picture">
-		<view name="rsc" resource="notrun" width="113" height="113" />
-	</view>
-	<text name="nameLabel" text="${parent.testName}" x="${(parent.picture.rsc.width - this.width)/2}"
-		y="$once{parent.picture.rsc.height}"
-	/>
-	<text name="resultLabel" visible="false" fgcolor="white" align="center" fontsize="16" />
-
-	<handler name="onclick">
-		if (running) {
-			this.setStopped();
-		} else {
-			allTests = false;
-			this.setRunning();
-		}
-	</handler>
-
-	<method name="handleAllTestsMode">
-		if (allTests) {
-			canvas.testsView.testAll();
-		}
-	</method>
-	
-	<method name="setPassed">
-		if (running) {
-			running=false;
-			if (resultText) {
-				picture.rsc.setAttribute("resource", "passed_result");
-				var x = (picture.rsc.width - resultLabel.width)/2;
-				var y = (picture.rsc.height - resultLabel.height)/2;
-				resultLabel.setAttribute("x", x);
-				resultLabel.setAttribute("y", y);
-				resultLabel.setAttribute("visible", true);
-			} else {
-				picture.rsc.setAttribute("resource", "passed");
-			}
-			canvas.setAttribute("busy", false);
-			this.handleAllTestsMode();
-		}
-	</method>
-
-	<method name="setFailed">
-		if (running) {
-			running=false;
-			picture.rsc.setAttribute("resource", "failed");
-			canvas.setAttribute("busy", false);
-			this.handleAllTestsMode();
-		}
-	</method>
-
-	<method name="setRunning">
-		if (canvas.busy) {
-			return;
-		}
-		canvas.setAttribute("busy", true);
-		this.start();
-		running=true;
-		resultLabel.setAttribute("visible", false);
-		picture.rsc.setAttribute("resource", "running");
-		picture.rsc.play();
-	</method>
-
-	<method name="setStopped">
-		this.forcedStop();
-		running=false;
-		picture.rsc.setAttribute("resource", "notrun");
-		canvas.setAttribute("busy", false);
-		this.handleAllTestsMode();
-	</method>
-
-	<method name="log" args="message">
-		var str = testName + ": " + message + "\n";
-		canvas.log += str;
-		if ($debug) Debug.write(str);
-	</method>
-
-	<method name="getBaseUrl">
-		var hostUrl = protocol + "://" + host + ":" + port + canvas.uriContext;
-		return hostUrl + (hostUrl.slice(-1) == '/' ? '' : '/');
-	</method>
-
-	<method name="lbl" args="key">
-		return canvas.lbl(key);
-	</method>
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="NetworkTest" extends="view">
+
+	<attribute name="testName" type="string" value="null" />
+	<attribute name="protocol" type="string" value="null" />
+	<attribute name="host" type="string" value="null" />
+	<attribute name="port" type="number" value="null" />
+	<attribute name="running" type="boolean" value="false" />
+	<attribute name="allTests" type="boolean" value="false" />
+	<attribute name="resultText" type="boolean" value="false" />
+
+	<method name="start" />
+	<method name="forcedStop" />
+
+	<method name="startAllTestsMode">
+		allTests = true;
+		this.setRunning();
+	</method>
+
+	<view name="picture">
+		<view name="rsc" resource="notrun" width="113" height="113" />
+	</view>
+	<text name="nameLabel" text="${parent.testName}" x="${(parent.picture.rsc.width - this.width)/2}"
+		y="$once{parent.picture.rsc.height}"
+	/>
+	<text name="resultLabel" visible="false" fgcolor="white" align="center" fontsize="16" />
+
+	<handler name="onclick">
+		if (running) {
+			this.setStopped();
+		} else {
+			allTests = false;
+			this.setRunning();
+		}
+	</handler>
+
+	<method name="handleAllTestsMode">
+		if (allTests) {
+			canvas.testsView.testAll();
+		}
+	</method>
+	
+	<method name="setPassed">
+		if (running) {
+			running=false;
+			if (resultText) {
+				picture.rsc.setAttribute("resource", "passed_result");
+				var x = (picture.rsc.width - resultLabel.width)/2;
+				var y = (picture.rsc.height - resultLabel.height)/2;
+				resultLabel.setAttribute("x", x);
+				resultLabel.setAttribute("y", y);
+				resultLabel.setAttribute("visible", true);
+			} else {
+				picture.rsc.setAttribute("resource", "passed");
+			}
+			canvas.setAttribute("busy", false);
+			this.handleAllTestsMode();
+		}
+	</method>
+
+	<method name="setFailed">
+		if (running) {
+			running=false;
+			picture.rsc.setAttribute("resource", "failed");
+			canvas.setAttribute("busy", false);
+			this.handleAllTestsMode();
+		}
+	</method>
+
+	<method name="setRunning">
+		if (canvas.busy) {
+			return;
+		}
+		canvas.setAttribute("busy", true);
+		this.start();
+		running=true;
+		resultLabel.setAttribute("visible", false);
+		picture.rsc.setAttribute("resource", "running");
+		picture.rsc.play();
+	</method>
+
+	<method name="setStopped">
+		this.forcedStop();
+		running=false;
+		picture.rsc.setAttribute("resource", "notrun");
+		canvas.setAttribute("busy", false);
+		this.handleAllTestsMode();
+	</method>
+
+	<method name="log" args="message">
+		var str = testName + ": " + message + "\n";
+		canvas.log += str;
+		if ($debug) Debug.write(str);
+	</method>
+
+	<method name="getBaseUrl">
+		var hostUrl = protocol + "://" + host + ":" + port + canvas.uriContext;
+		return hostUrl + (hostUrl.slice(-1) == '/' ? '' : '/');
+	</method>
+
+	<method name="lbl" args="key">
+		return canvas.lbl(key);
+	</method>
+
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/PingTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/PingTest.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/PingTest.lzx
index 6217cc3..61d484b 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/PingTest.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/PingTest.lzx
@@ -1,43 +1,43 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="PingTest" extends="BaseURLLoadTest">
-
-	<handler name="oninit">
-		this.setAttribute("testsCount", 10);
-		this.setAttribute("testName", lbl('ping'));
-		this.setAttribute("testTypeParameter", "ping");
-	</handler>
-
-	<method name="generateReport">
-		var averageTime = wholeTime / successfulTestsCount;
-		var packetsLost = testsCount - successfulTestsCount;
-		var report = lbl('ping.avg') + ": " + averageTime + " " + lbl('ms') + "\n";
-		report += lbl('ping.rcv') + ": " + successfulTestsCount + "\n";
-		report += lbl('ping.lost') + ": " + packetsLost + "\n";
-
-		return report;
-	</method>
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="PingTest" extends="BaseURLLoadTest">
+
+	<handler name="oninit">
+		this.setAttribute("testsCount", 10);
+		this.setAttribute("testName", lbl('ping'));
+		this.setAttribute("testTypeParameter", "ping");
+	</handler>
+
+	<method name="generateReport">
+		var averageTime = wholeTime / successfulTestsCount;
+		var packetsLost = testsCount - successfulTestsCount;
+		var report = lbl('ping.avg') + ": " + averageTime + " " + lbl('ms') + "\n";
+		report += lbl('ping.rcv') + ": " + successfulTestsCount + "\n";
+		report += lbl('ping.lost') + ": " + packetsLost + "\n";
+
+		return report;
+	</method>
+
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/PortAvailabilityTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/PortAvailabilityTest.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/PortAvailabilityTest.lzx
index 65e1d95..ea60c7e 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/PortAvailabilityTest.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/PortAvailabilityTest.lzx
@@ -1,90 +1,90 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="PortAvailabilityTest" extends="NetworkTest">
-
-	<switch>
-		<when property="$as3">
-			<passthrough>
-				import flash.events.*;
-				import flash.net.*;
-				import flash.system.*;
-			</passthrough>
-		</when>
-	</switch>
-
-	<rtmpConnection name="rtmp" debug="true" />
-
-	<handler name="oninit">
-		this.setAttribute("testName", lbl('port'));
-	</handler>
-
-	<method name="start">
-		var hostUrl = protocol + "://" + host + ":" + port + canvas.rtmpUriPath;
-		rtmp.setAttribute("src", hostUrl);
-		this.log(": " + lbl('report.start') + " " + hostUrl);
-
-		canvas.publicSID = "networktest";
-		rtmp.connect();
-	</method>
-
-	<method name="forcedStop">
-		this.log(lbl('port.stopped'));
-		disconnect();
-	</method>
-
-	<method name="disconnect">
-		rtmp._nc.close();
-		rtmp.setAttribute('status', 'disconnected');
-		rtmp.setAttribute('stage', 0);
-	</method>
-	
-	<handler name="onconnect" reference="rtmp">
-		if (running) {
-			this.log(lbl('port.avail') + "\n");
-			this.setPassed();
-			disconnect();
-		}
-	</handler>
-
-	<handler name="onerror" args="e" reference="rtmp">
-		if (running) {
-			this.log(lbl('report.con.err') + " - " + e + "\n");
-			this.setFailed();
-		}
-	</handler>
-
-	<handler name="onstatus" args="e" reference="rtmp">
-		if (running) {
-			switch(e) {
-				case "timed out":
-				case "connection failed":
-					this.setFailed();
-					break;
-			}
-			if($debug) Debug.write(testName + ": RTMP connect status - ", e);
-		}
-	</handler>
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="PortAvailabilityTest" extends="NetworkTest">
+
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.events.*;
+				import flash.net.*;
+				import flash.system.*;
+			</passthrough>
+		</when>
+	</switch>
+
+	<rtmpConnection name="rtmp" debug="true" />
+
+	<handler name="oninit">
+		this.setAttribute("testName", lbl('port'));
+	</handler>
+
+	<method name="start">
+		var hostUrl = protocol + "://" + host + ":" + port + canvas.rtmpUriPath;
+		rtmp.setAttribute("src", hostUrl);
+		this.log(": " + lbl('report.start') + " " + hostUrl);
+
+		canvas.publicSID = "networktest";
+		rtmp.connect();
+	</method>
+
+	<method name="forcedStop">
+		this.log(lbl('port.stopped'));
+		disconnect();
+	</method>
+
+	<method name="disconnect">
+		rtmp._nc.close();
+		rtmp.setAttribute('status', 'disconnected');
+		rtmp.setAttribute('stage', 0);
+	</method>
+	
+	<handler name="onconnect" reference="rtmp">
+		if (running) {
+			this.log(lbl('port.avail') + "\n");
+			this.setPassed();
+			disconnect();
+		}
+	</handler>
+
+	<handler name="onerror" args="e" reference="rtmp">
+		if (running) {
+			this.log(lbl('report.con.err') + " - " + e + "\n");
+			this.setFailed();
+		}
+	</handler>
+
+	<handler name="onstatus" args="e" reference="rtmp">
+		if (running) {
+			switch(e) {
+				case "timed out":
+				case "connection failed":
+					this.setFailed();
+					break;
+			}
+			if($debug) Debug.write(testName + ": RTMP connect status - ", e);
+		}
+	</handler>
+
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/UploadSpeedTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/UploadSpeedTest.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/UploadSpeedTest.lzx
index 5edca71..92ea5bf 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/UploadSpeedTest.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/UploadSpeedTest.lzx
@@ -1,124 +1,124 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="UploadSpeedTest" extends="NetworkTest">
-
-	<switch>
-		<when property="$as3">
-			<passthrough>
-				import flash.events.*;
-				import flash.net.*;
-				import flash.utils.*;
-			</passthrough>
-		</when>
-	</switch>
-
-	<attribute name="startTime" type="number" value="0" />
-
-	<attribute name="hostUrl" type="string" value="" />
-	<attribute name="loaderInited" type="boolean" value="false" />
-	<attribute name="vars" value="null" />
-	<attribute name="request" value="null" />
-	<attribute name="loader" value="null" />
-
-	<handler name="oninit">
-		this.setAttribute("testName", lbl('upl'));
-		this.setAttribute("resultText", true);
-	</handler>
-
-	<method name="initLoader">
-		hostUrl = getBaseUrl() + "services/networktest";
-		loader = new RestCall({
-			url: hostUrl
-			, method: URLRequestMethod.POST
-			, dataFormat: URLLoaderDataFormat.BINARY
-			, contentType: "multipart/form-data; charset=utf-8; boundary=" + UploadPostHelper.getBoundary()
-			, errorCallback: onError
-			, successCallback: onComplete
-			});
-		vars = UploadPostHelper.getPostData('aaa', getData());
-		if ($debug) Debug.write("initLoader:: ");//, vars
-		loaderInited = true;
-	</method>
-
-	<method name="start">
-		if ($debug) Debug.write("start:: ", request);
-		if (!loaderInited) {
-			this.initLoader();
-		}
-
-		if ($debug) Debug.write("going to start:: ", loader);
-		this.log(lbl('report.start') + " " + hostUrl);
-		startTime = getTimer();
-		request = loader.load(vars);
-		if ($debug) Debug.write("load:: ", request);
-	</method>
-
-	<method name="forcedStop">
-		loader.close();
-		this.log("stopped");
-	</method>
-
-	<method name="onComplete" args="e">
-		if ($debug) Debug.write("onComplete:: ", e);
-		if (running) {
-			var endTime = getTimer();
-			var loadTime = endTime - startTime;
-			var loadTimeSec = loadTime/1000;
-			var mBytes = request.data.length/(1024*1024);
-			var speed = mBytes / loadTimeSec;
-
-			var report = "report:\n";
-			report += lbl('upl.bytes') + ": " + mBytes + " " + lbl('mb') + "\n";
-			report += lbl('upl.time') + ": " + loadTimeSec + " " + lbl('sec') + "\n";
-			report += lbl('upl.speed') + ": " + speed + " " + lbl('mb') + "/" + lbl('sec') + "\n";
-
-			resultLabel.setAttribute("text", "");
-			resultLabel.addFormat("%.2f\n%s", speed, lbl('mb') + "/" + lbl('sec'));
-			this.log(report);
-			this.setPassed();
-		}
-	</method>
-
-	<method name="onError" args="e">
-		if ($debug) Debug.write("onError:: ", e);
-		if (running) {
-			this.log(lbl('report.error') + " - " + e);
-			this.setFailed();
-		}
-	</method>
-
-	<!-- returns a 1 Mb string-->
-	<method name="getData">
-	<![CDATA[
-		var result:ByteArray = new ByteArray();
-		for (var i = 0; i < 64 * 16384; ++i) {
-			result.writeByte(i % 256);
-		}
-		result.position = 0;
-		return result;
-	]]>
-	</method>
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="UploadSpeedTest" extends="NetworkTest">
+
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.events.*;
+				import flash.net.*;
+				import flash.utils.*;
+			</passthrough>
+		</when>
+	</switch>
+
+	<attribute name="startTime" type="number" value="0" />
+
+	<attribute name="hostUrl" type="string" value="" />
+	<attribute name="loaderInited" type="boolean" value="false" />
+	<attribute name="vars" value="null" />
+	<attribute name="request" value="null" />
+	<attribute name="loader" value="null" />
+
+	<handler name="oninit">
+		this.setAttribute("testName", lbl('upl'));
+		this.setAttribute("resultText", true);
+	</handler>
+
+	<method name="initLoader">
+		hostUrl = getBaseUrl() + "services/networktest";
+		loader = new RestCall({
+			url: hostUrl
+			, method: URLRequestMethod.POST
+			, dataFormat: URLLoaderDataFormat.BINARY
+			, contentType: "multipart/form-data; charset=utf-8; boundary=" + UploadPostHelper.getBoundary()
+			, errorCallback: onError
+			, successCallback: onComplete
+			});
+		vars = UploadPostHelper.getPostData('aaa', getData());
+		if ($debug) Debug.write("initLoader:: ");//, vars
+		loaderInited = true;
+	</method>
+
+	<method name="start">
+		if ($debug) Debug.write("start:: ", request);
+		if (!loaderInited) {
+			this.initLoader();
+		}
+
+		if ($debug) Debug.write("going to start:: ", loader);
+		this.log(lbl('report.start') + " " + hostUrl);
+		startTime = getTimer();
+		request = loader.load(vars);
+		if ($debug) Debug.write("load:: ", request);
+	</method>
+
+	<method name="forcedStop">
+		loader.close();
+		this.log("stopped");
+	</method>
+
+	<method name="onComplete" args="e">
+		if ($debug) Debug.write("onComplete:: ", e);
+		if (running) {
+			var endTime = getTimer();
+			var loadTime = endTime - startTime;
+			var loadTimeSec = loadTime/1000;
+			var mBytes = request.data.length/(1024*1024);
+			var speed = mBytes / loadTimeSec;
+
+			var report = "report:\n";
+			report += lbl('upl.bytes') + ": " + mBytes + " " + lbl('mb') + "\n";
+			report += lbl('upl.time') + ": " + loadTimeSec + " " + lbl('sec') + "\n";
+			report += lbl('upl.speed') + ": " + speed + " " + lbl('mb') + "/" + lbl('sec') + "\n";
+
+			resultLabel.setAttribute("text", "");
+			resultLabel.addFormat("%.2f\n%s", speed, lbl('mb') + "/" + lbl('sec'));
+			this.log(report);
+			this.setPassed();
+		}
+	</method>
+
+	<method name="onError" args="e">
+		if ($debug) Debug.write("onError:: ", e);
+		if (running) {
+			this.log(lbl('report.error') + " - " + e);
+			this.setFailed();
+		}
+	</method>
+
+	<!-- returns a 1 Mb string-->
+	<method name="getData">
+	<![CDATA[
+		var result:ByteArray = new ByteArray();
+		for (var i = 0; i < 64 * 16384; ++i) {
+			result.writeByte(i % 256);
+		}
+		result.position = 0;
+		return result;
+	]]>
+	</method>
+
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/tests/library.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/tests/library.lzx b/openmeetings-flash/src/main/swf/networkTesting/tests/library.lzx
index 9b8575d..5021b9c 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/tests/library.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/tests/library.lzx
@@ -1,37 +1,37 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-    <resource name="failed" src="resources/failed.png" />
-    <resource name="notrun" src="resources/notrun.png" />
-    <resource name="passed" src="resources/passed.png" />
-    <resource name="passed_result" src="resources/passed_result.png" />
-    <resource name="running" src="resources/running.swf" />
-
-    <include href="BaseURLLoadTest.lzx" />
-    <include href="DownloadSpeedTest.lzx" />
-    <include href="JitterTest.lzx" />
-    <include href="NetworkTest.lzx" />
-    <include href="PingTest.lzx" />
-    <include href="PortAvailabilityTest.lzx" />
-    <include href="UploadSpeedTest.lzx" />
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <resource name="failed" src="resources/failed.png" />
+    <resource name="notrun" src="resources/notrun.png" />
+    <resource name="passed" src="resources/passed.png" />
+    <resource name="passed_result" src="resources/passed_result.png" />
+    <resource name="running" src="resources/running.swf" />
+
+    <include href="BaseURLLoadTest.lzx" />
+    <include href="DownloadSpeedTest.lzx" />
+    <include href="JitterTest.lzx" />
+    <include href="NetworkTest.lzx" />
+    <include href="PingTest.lzx" />
+    <include href="PortAvailabilityTest.lzx" />
+    <include href="UploadSpeedTest.lzx" />
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/testsView.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/testsView.lzx b/openmeetings-flash/src/main/swf/networkTesting/testsView.lzx
index 9af6811..f4ac847 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/testsView.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/testsView.lzx
@@ -1,105 +1,105 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<include href="../base/remote/rtmpConnection.lzx" />
-<include href="tests/" />
-<resource name="log" src="resources/edit-copy.png" />
-
-<class name="TestsView" extends="view">
-
-	<attribute name="offset" type="number" value="20" />
-	<attribute name="smallOffset" type="number" value="5" />
-
-	<text name="label"
-		text="$once{canvas.lbl('click.play')}"
-		x="${parent.offset}"
-		y="${parent.offset}"
-	/>
-	<view name="logButton"
-		x="${parent.width - this.rsc.width - parent.offset}"
-		y="${parent.label.y + (parent.label.height - this.rsc.height)/2}"
-	>
-		<image name="rsc" resource="log" height="16" width="16"/>
-		<handler name="onclick">
-			lz.Browser.setClipboard(canvas.log);
-		</handler>
-	</view>
-
-	<text name="logLabel"
-		text="$once{canvas.lbl('copy.log')}"
-		x="${parent.logButton.x - this.width - parent.smallOffset}"
-		y="${parent.label.y}"
-	/>
-
-	<PingTest
-		name="pingTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
-		x="${parent.offset}"
-		y="${parent.label.y + parent.label.height + parent.offset/2}"
-	/>
-	<PortAvailabilityTest
-		name="portTest" protocol="${canvas.rtmpProtocol}" host="${canvas.rtmpHost}" port="${canvas.rtmpPort}"
-		x="${parent.pingTest.x + parent.pingTest.width + parent.offset}"
-		y="${parent.pingTest.y}"
-	 />
-	<JitterTest
-		name="jitterTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
-		x="${parent.portTest.x + parent.portTest.width + parent.offset}"
-		y="${parent.pingTest.y}"
-	/>
-	<DownloadSpeedTest
-		name="downloadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
-		x="${parent.jitterTest.x + parent.jitterTest.width + parent.offset}"
-		y="${parent.pingTest.y}"
-	/>
-
-	<UploadSpeedTest
-		name="uploadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
-		x="${parent.downloadTest.x + parent.downloadTest.width + parent.offset}"
-		y="${parent.pingTest.y}"
-	/>
-
-	<attribute name="currentTestNumber" type="number" value="0" />
-	<method name="testAll">
-		var nextTest;
-		if (0 == currentTestNumber) {
-			nextTest = pingTest;
-		} else if (1 == currentTestNumber) {
-			nextTest = portTest;
-		} else if (2 == currentTestNumber) {
-			nextTest = jitterTest;
-		} else if (3 == currentTestNumber) {
-			nextTest = downloadTest;
-		} else if (4 == currentTestNumber) {
-			nextTest = uploadTest;
-		} else if (5 == currentTestNumber) {
-			nextTest = null;
-		}
-
-		if (null != nextTest) {
-			currentTestNumber++;
-			nextTest.startAllTestsMode();
-		}
-	</method>
-
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<include href="../base/remote/rtmpConnection.lzx" />
+<include href="tests/" />
+<resource name="log" src="resources/edit-copy.png" />
+
+<class name="TestsView" extends="view">
+
+	<attribute name="offset" type="number" value="20" />
+	<attribute name="smallOffset" type="number" value="5" />
+
+	<text name="label"
+		text="$once{canvas.lbl('click.play')}"
+		x="${parent.offset}"
+		y="${parent.offset}"
+	/>
+	<view name="logButton"
+		x="${parent.width - this.rsc.width - parent.offset}"
+		y="${parent.label.y + (parent.label.height - this.rsc.height)/2}"
+	>
+		<image name="rsc" resource="log" height="16" width="16"/>
+		<handler name="onclick">
+			lz.Browser.setClipboard(canvas.log);
+		</handler>
+	</view>
+
+	<text name="logLabel"
+		text="$once{canvas.lbl('copy.log')}"
+		x="${parent.logButton.x - this.width - parent.smallOffset}"
+		y="${parent.label.y}"
+	/>
+
+	<PingTest
+		name="pingTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+		x="${parent.offset}"
+		y="${parent.label.y + parent.label.height + parent.offset/2}"
+	/>
+	<PortAvailabilityTest
+		name="portTest" protocol="${canvas.rtmpProtocol}" host="${canvas.rtmpHost}" port="${canvas.rtmpPort}"
+		x="${parent.pingTest.x + parent.pingTest.width + parent.offset}"
+		y="${parent.pingTest.y}"
+	 />
+	<JitterTest
+		name="jitterTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+		x="${parent.portTest.x + parent.portTest.width + parent.offset}"
+		y="${parent.pingTest.y}"
+	/>
+	<DownloadSpeedTest
+		name="downloadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+		x="${parent.jitterTest.x + parent.jitterTest.width + parent.offset}"
+		y="${parent.pingTest.y}"
+	/>
+
+	<UploadSpeedTest
+		name="uploadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"
+		x="${parent.downloadTest.x + parent.downloadTest.width + parent.offset}"
+		y="${parent.pingTest.y}"
+	/>
+
+	<attribute name="currentTestNumber" type="number" value="0" />
+	<method name="testAll">
+		var nextTest;
+		if (0 == currentTestNumber) {
+			nextTest = pingTest;
+		} else if (1 == currentTestNumber) {
+			nextTest = portTest;
+		} else if (2 == currentTestNumber) {
+			nextTest = jitterTest;
+		} else if (3 == currentTestNumber) {
+			nextTest = downloadTest;
+		} else if (4 == currentTestNumber) {
+			nextTest = uploadTest;
+		} else if (5 == currentTestNumber) {
+			nextTest = null;
+		}
+
+		if (null != nextTest) {
+			currentTestNumber++;
+			nextTest.startAllTestsMode();
+		}
+	</method>
+
+</class>
+
+</library>


[19/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/library.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/library.lzx b/openmeetings-flash/src/main/swf/video/library.lzx
index ef42828..6862298 100644
--- a/openmeetings-flash/src/main/swf/video/library.lzx
+++ b/openmeetings-flash/src/main/swf/video/library.lzx
@@ -1,70 +1,70 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-	<!-- APL author sebawagner -->
-	<resource name="level_meter_rsc" src="resources/level_meter.png" />
-	<!-- APL author sebawagner -->
-	<resource name="test_setup_record_rsc" src="resources/webstart_record.png" />
-	<!-- APL author sebawagner -->
-	<resource name="test_setup_play_rsc" src="resources/run.png" />
-	<!-- APL author sebawagner -->
-	<resource name="test_setup_stop_rsc" src="resources/stop.png" />
-	<!-- FamFam Icon Set -->
-	<resource name="test_setup_info_rsc" src="resources/information.png" />
-	<!--  FamFam Icon Creative Commons -->
-	<resource name="warning_icon_popup_devices_rsc" src="resources/error.png" />
-
-	<!--  FamFam Icon Creative Commons -->
-	<resource name="resyncuser_rsc" src="resources/arrow_refresh_small.png" />
-	
-	<!--  APL author sebawagner -->
-	<resource name="mic_rsc" src="resources/micro.png" />
-	
-	<!--  APL author sebawagner -->
-	<resource name="speaking" src="resources/speaking.png" />
-
-	<!--  IconFinder Creative Commons -->
-	<resource name="volume" src="resources/volume.png" />
-	
-	<!--  FamFam Icon Creative Commons -->
-	<resource name="mute_btn_rsc">
-		<frame src="resources/sound.png" />
-		<frame src="resources/sound_mute.png" />
-	</resource>
-	
-	<!--  APL author sebawagner -->
-	<resource name="mute_micro_btn_rsc">
-		<frame src="resources/mute_micro.png" />
-		<frame src="resources/mute_micro_red.png" />
-	</resource>
-
-	<!--  APL author sebawagner -->
-	<resource name="lz_recorder_play" src="resources/webstart_play.png" />
-
-	<include href="videoUserProfilePicSWF10.lzx" />
-	<include href="editRecordStreamSWF10.lzx" />
-	<include href="baseVideoObject.lzx" />
-	<include href="videoObjectPlayBroadcast.lzx" />
-	<include href="videoObjectTestBroadcast.lzx" />
-	<include href="videoObjectPlayTestBroadcast.lzx" />
-	<include href="volumeSlider.lzx" />
-	
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<!-- APL author sebawagner -->
+	<resource name="level_meter_rsc" src="resources/level_meter.png" />
+	<!-- APL author sebawagner -->
+	<resource name="test_setup_record_rsc" src="resources/webstart_record.png" />
+	<!-- APL author sebawagner -->
+	<resource name="test_setup_play_rsc" src="resources/run.png" />
+	<!-- APL author sebawagner -->
+	<resource name="test_setup_stop_rsc" src="resources/stop.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="test_setup_info_rsc" src="resources/information.png" />
+	<!--  FamFam Icon Creative Commons -->
+	<resource name="warning_icon_popup_devices_rsc" src="resources/error.png" />
+
+	<!--  FamFam Icon Creative Commons -->
+	<resource name="resyncuser_rsc" src="resources/arrow_refresh_small.png" />
+	
+	<!--  APL author sebawagner -->
+	<resource name="mic_rsc" src="resources/micro.png" />
+	
+	<!--  APL author sebawagner -->
+	<resource name="speaking" src="resources/speaking.png" />
+
+	<!--  IconFinder Creative Commons -->
+	<resource name="volume" src="resources/volume.png" />
+	
+	<!--  FamFam Icon Creative Commons -->
+	<resource name="mute_btn_rsc">
+		<frame src="resources/sound.png" />
+		<frame src="resources/sound_mute.png" />
+	</resource>
+	
+	<!--  APL author sebawagner -->
+	<resource name="mute_micro_btn_rsc">
+		<frame src="resources/mute_micro.png" />
+		<frame src="resources/mute_micro_red.png" />
+	</resource>
+
+	<!--  APL author sebawagner -->
+	<resource name="lz_recorder_play" src="resources/webstart_play.png" />
+
+	<include href="videoUserProfilePicSWF10.lzx" />
+	<include href="editRecordStreamSWF10.lzx" />
+	<include href="baseVideoObject.lzx" />
+	<include href="videoObjectPlayBroadcast.lzx" />
+	<include href="videoObjectTestBroadcast.lzx" />
+	<include href="videoObjectPlayTestBroadcast.lzx" />
+	<include href="volumeSlider.lzx" />
+	
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/videoObjectPlayBroadcast.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/videoObjectPlayBroadcast.lzx b/openmeetings-flash/src/main/swf/video/videoObjectPlayBroadcast.lzx
index b21e348..120d57f 100644
--- a/openmeetings-flash/src/main/swf/video/videoObjectPlayBroadcast.lzx
+++ b/openmeetings-flash/src/main/swf/video/videoObjectPlayBroadcast.lzx
@@ -1,81 +1,81 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-	<!--- Contains no microphone or camera Object, this view can only subscribe 
-		to a video or live-stream -->
-	<class name="videoObjectPlayBroadcast" extends="baseVideoObject" isremote="true">
-		<attribute name="interviewPodId" value="-1" />
-		<attribute name="ratioW" value="1" />
-		<attribute name="ratioH" value="1" />
-
-		<attribute name="videoInsetX" value="2" type="number" />
-		<attribute name="videoInsetY" value="21" type="number" />
-		<attribute name="bottomBarHeight" value="0" type="number" />
-
-		<handler name="oninit">
-		<![CDATA[
-			if ($debug) Debug.write("Init videoObjectPlayBroadcast ",this.isremote,this.clientVars);
-			//Display widget defined in mother class
-			this._loudness.bringToFront();
-			this._resizeview.bringToFront();
-		]]>
-		</handler>
-
-		<!--- Change the video resolution by chaning pod size -->
-		<method name="setDefaultVideoSize" args="w,h">
-			this.initRatio = w / h;
-			this.setAttribute("width", w + this.videoInsetX);
-
-			if (canvas.currentRoomObj.showMicrophoneStatus) {
-				this.setAttribute("bottomBarHeight", this._innertop.height + 1);
-			}
-			this.setAttribute("height", (minimized ? 0 : h) + this.videoInsetY + this.bottomBarHeight);
-		</method>
-
-		<view name="_chatvideoinner" x="$once{ parent.videoInsetX-1 }" y="$once{ parent.videoInsetY-1 }"
-			height="${parent.height-parent.videoInsetY-parent.bottomBarHeight}"
-			width="${parent.width-parent.videoInsetX}">
-
-			<attribute name="initH" />
-			<attribute name="initW" />
-
-			<handler name="oninit">
-				this.r.setAttribute('frame',5);
-				this.initH = this.height;
-				this.initW = this.width;
-			</handler>
-
-			<view name="r"></view>
-
-			<baseVideoStreamDevice name="_videostream"
-				bgcolor="black" width="${parent.width}" height="${parent.height}">
-				<handler name="onlevel">
-					var fullLength = parent.height-24;
-					parent._activityLevel.setAttribute("height",-this.level*(fullLength/100));
-				</handler>
-			</baseVideoStreamDevice>
-
-			<view name="_activityLevel" width="6" x="2" y="${parent.height}"
-				opacity="0.5" bgcolor="0x00FF00" height="0" />
-		</view>
-	</class>
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!--- Contains no microphone or camera Object, this view can only subscribe 
+		to a video or live-stream -->
+	<class name="videoObjectPlayBroadcast" extends="baseVideoObject" isremote="true">
+		<attribute name="interviewPodId" value="-1" />
+		<attribute name="ratioW" value="1" />
+		<attribute name="ratioH" value="1" />
+
+		<attribute name="videoInsetX" value="2" type="number" />
+		<attribute name="videoInsetY" value="21" type="number" />
+		<attribute name="bottomBarHeight" value="0" type="number" />
+
+		<handler name="oninit">
+		<![CDATA[
+			if ($debug) Debug.write("Init videoObjectPlayBroadcast ",this.isremote,this.clientVars);
+			//Display widget defined in mother class
+			this._loudness.bringToFront();
+			this._resizeview.bringToFront();
+		]]>
+		</handler>
+
+		<!--- Change the video resolution by chaning pod size -->
+		<method name="setDefaultVideoSize" args="w,h">
+			this.initRatio = w / h;
+			this.setAttribute("width", w + this.videoInsetX);
+
+			if (canvas.currentRoomObj.showMicrophoneStatus) {
+				this.setAttribute("bottomBarHeight", this._innertop.height + 1);
+			}
+			this.setAttribute("height", (minimized ? 0 : h) + this.videoInsetY + this.bottomBarHeight);
+		</method>
+
+		<view name="_chatvideoinner" x="$once{ parent.videoInsetX-1 }" y="$once{ parent.videoInsetY-1 }"
+			height="${parent.height-parent.videoInsetY-parent.bottomBarHeight}"
+			width="${parent.width-parent.videoInsetX}">
+
+			<attribute name="initH" />
+			<attribute name="initW" />
+
+			<handler name="oninit">
+				this.r.setAttribute('frame',5);
+				this.initH = this.height;
+				this.initW = this.width;
+			</handler>
+
+			<view name="r"></view>
+
+			<baseVideoStreamDevice name="_videostream"
+				bgcolor="black" width="${parent.width}" height="${parent.height}">
+				<handler name="onlevel">
+					var fullLength = parent.height-24;
+					parent._activityLevel.setAttribute("height",-this.level*(fullLength/100));
+				</handler>
+			</baseVideoStreamDevice>
+
+			<view name="_activityLevel" width="6" x="2" y="${parent.height}"
+				opacity="0.5" bgcolor="0x00FF00" height="0" />
+		</view>
+	</class>
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/videoObjectPlayTestBroadcast.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/videoObjectPlayTestBroadcast.lzx b/openmeetings-flash/src/main/swf/video/videoObjectPlayTestBroadcast.lzx
index e989ae5..e2237da 100644
--- a/openmeetings-flash/src/main/swf/video/videoObjectPlayTestBroadcast.lzx
+++ b/openmeetings-flash/src/main/swf/video/videoObjectPlayTestBroadcast.lzx
@@ -1,41 +1,41 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-
-<!---
-	contains microphone and camera for broadcasting,
-	this class is used only in Meetings-Modus
- -->
-
- 
-<class name="videoObjectPlayTestBroadcast" extends="view" >
-
-	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">
-		
-		<baseVideoStream name="_videostream" mode="broadcast"
-						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000" />
-		
-	</view>	
-</class>
-
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!---
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ -->
+
+ 
+<class name="videoObjectPlayTestBroadcast" extends="view" >
+
+	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">
+		
+		<baseVideoStream name="_videostream" mode="broadcast"
+						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000" />
+		
+	</view>	
+</class>
+
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/videoObjectTestBroadcast.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/videoObjectTestBroadcast.lzx b/openmeetings-flash/src/main/swf/video/videoObjectTestBroadcast.lzx
index 2fff0a2..bec171d 100644
--- a/openmeetings-flash/src/main/swf/video/videoObjectTestBroadcast.lzx
+++ b/openmeetings-flash/src/main/swf/video/videoObjectTestBroadcast.lzx
@@ -1,55 +1,55 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-
-<!---
-	contains microphone and camera for broadcasting,
-	this class is used only in Meetings-Modus
- -->
-
- 
-<class name="videoObjectTestBroadcast" extends="view" >
-
-    <event name="sendCameraStatus" />
-    
-    <event name="sendMicroStatus" />
-    
-	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">
-		
-		<baseVideoStreamDevice name="_videostream" mode="broadcast" sendNotificationViaLocalConnection="false"
-						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000">
-			<handler name="sendCameraStatus" args="camStatus">
-                if ($debug) Debug.write("sendCameraStatus",camStatus);
-                parent.parent.sendCameraStatus.sendEvent(camStatus);
-            </handler>
-            
-            <handler name="sendMicroStatus" args="micStatus">
-                if ($debug) Debug.write("sendMicroStatus",micStatus);
-                parent.parent.sendMicroStatus.sendEvent(micStatus);
-            </handler>
-		</baseVideoStreamDevice>
-		
-	</view>	
-</class>
-
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!---
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ -->
+
+ 
+<class name="videoObjectTestBroadcast" extends="view" >
+
+    <event name="sendCameraStatus" />
+    
+    <event name="sendMicroStatus" />
+    
+	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">
+		
+		<baseVideoStreamDevice name="_videostream" mode="broadcast" sendNotificationViaLocalConnection="false"
+						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000">
+			<handler name="sendCameraStatus" args="camStatus">
+                if ($debug) Debug.write("sendCameraStatus",camStatus);
+                parent.parent.sendCameraStatus.sendEvent(camStatus);
+            </handler>
+            
+            <handler name="sendMicroStatus" args="micStatus">
+                if ($debug) Debug.write("sendMicroStatus",micStatus);
+                parent.parent.sendMicroStatus.sendEvent(micStatus);
+            </handler>
+		</baseVideoStreamDevice>
+		
+	</view>	
+</class>
+
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/videoUserProfilePicSWF10.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/videoUserProfilePicSWF10.lzx b/openmeetings-flash/src/main/swf/video/videoUserProfilePicSWF10.lzx
index dda7420..9795677 100644
--- a/openmeetings-flash/src/main/swf/video/videoUserProfilePicSWF10.lzx
+++ b/openmeetings-flash/src/main/swf/video/videoUserProfilePicSWF10.lzx
@@ -1,36 +1,36 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-<class name="videoUserProfilePicSWF10" extends="view" x="1" y="2" width="${parent.width-2}" height="${parent.height-3}" 
-		clip="true" bgcolor="white">
-	<attribute name="value" value="null" />
-		
-	<handler name="oninit">
-	<![CDATA[
-		if ($debug) Debug.write("videoUserProfilePicSWF10::oninit", this);
-		this._userpic.setAttribute('src', canvas.getPictureUrl(value.userId, value.picture_uri));
-	]]>
-	</handler>	
-	<omImage name="_userpic" stretches="both" width="${parent.width}" height="${parent.height}" />
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="videoUserProfilePicSWF10" extends="view" x="1" y="2" width="${parent.width-2}" height="${parent.height-3}" 
+		clip="true" bgcolor="white">
+	<attribute name="value" value="null" />
+		
+	<handler name="oninit">
+	<![CDATA[
+		if ($debug) Debug.write("videoUserProfilePicSWF10::oninit", this);
+		this._userpic.setAttribute('src', canvas.getPictureUrl(value.userId, value.picture_uri));
+	]]>
+	</handler>	
+	<omImage name="_userpic" stretches="both" width="${parent.width}" height="${parent.height}" />
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/volumeSlider.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/volumeSlider.lzx b/openmeetings-flash/src/main/swf/video/volumeSlider.lzx
index 9d636aa..0f4c93c 100644
--- a/openmeetings-flash/src/main/swf/video/volumeSlider.lzx
+++ b/openmeetings-flash/src/main/swf/video/volumeSlider.lzx
@@ -1,68 +1,68 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-	<class name="VolumeSlider" extends="closableView" clickable="true" height="120">
-		<attribute name="videoStream" value="null" />
-		<attribute name="ownStream" type="boolean" value="false" />
-		<attribute name="resizing" type="boolean" value="false" />
-	
-		<attribute name="videoObject" value="null" />
-		<attribute name="initialNumber" value="50" type="number" />
-		<attribute name="maxvalue" value="100" type="number" />
-	
-		<!--- @keywords private -->
-		<method name="passModeEvent" args="eventStr,view">
-		<![CDATA[
-			if (eventStr == "onmousedown") {
-				if (null != view) {
-					if (!view.childOf(this)) {
-						this.close();
-					}
-				} else {
-					this.close();
-				}
-			}
-			if (view && view.childOf(this)) {
-				if (view[eventStr]) {
-					view[eventStr].sendEvent(view);
-				}
-				return false;
-			}
-			return true;
-		]]>
-		</method>
-	
-		<vslider name="_slider" height="$once{parent.height}" y="10" x="0" minvalue="0" maxvalue="100" initvalue="$once{ parent.initialNumber }"
-			showrange="false" showvalue="false" switchaxis="true">
-			<handler name="onvalue" args="v">
-				if ($debug) Debug.write("onvalue", v);
-	
-				parent.videoObject.setStreamVolume(Number(v));
-			</handler>
-			<handler name="onvalueChosenFinal">
-				parent.close();
-			</handler>
-		</vslider>
-	
-	</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+	<class name="VolumeSlider" extends="closableView" clickable="true" height="120">
+		<attribute name="videoStream" value="null" />
+		<attribute name="ownStream" type="boolean" value="false" />
+		<attribute name="resizing" type="boolean" value="false" />
+	
+		<attribute name="videoObject" value="null" />
+		<attribute name="initialNumber" value="50" type="number" />
+		<attribute name="maxvalue" value="100" type="number" />
+	
+		<!--- @keywords private -->
+		<method name="passModeEvent" args="eventStr,view">
+		<![CDATA[
+			if (eventStr == "onmousedown") {
+				if (null != view) {
+					if (!view.childOf(this)) {
+						this.close();
+					}
+				} else {
+					this.close();
+				}
+			}
+			if (view && view.childOf(this)) {
+				if (view[eventStr]) {
+					view[eventStr].sendEvent(view);
+				}
+				return false;
+			}
+			return true;
+		]]>
+		</method>
+	
+		<vslider name="_slider" height="$once{parent.height}" y="10" x="0" minvalue="0" maxvalue="100" initvalue="$once{ parent.initialNumber }"
+			showrange="false" showvalue="false" switchaxis="true">
+			<handler name="onvalue" args="v">
+				if ($debug) Debug.write("onvalue", v);
+	
+				parent.videoObject.setStreamVolume(Number(v));
+			</handler>
+			<handler name="onvalueChosenFinal">
+				parent.close();
+			</handler>
+		</vslider>
+	
+	</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/site/site.xml b/openmeetings-flash/src/site/site.xml
index b7a0eae..dd3dc53 100644
--- a/openmeetings-flash/src/site/site.xml
+++ b/openmeetings-flash/src/site/site.xml
@@ -1,39 +1,39 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
index 71c8ebc..79ee837 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentConverter.java
@@ -1,55 +1,55 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class AppointmentConverter extends OmConverter<Appointment> {
-	private AppointmentDao appointmentDao;
-	private Map<Long, Long> idMap;
-	
-	public AppointmentConverter() {
-		//default constructor is for export
-	}
-	
-	public AppointmentConverter(AppointmentDao appointmentDao, Map<Long, Long> idMap) {
-		this.appointmentDao = appointmentDao;
-		this.idMap = idMap;
-	}
-	
-	@Override
-	public Appointment read(InputNode node) throws Exception {
-		long oldId = getLong(node);
-		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-		
-		Appointment a = appointmentDao.getAny(newId);
-		return a == null ? new Appointment() : a;
-	}
-
-	@Override
-	public void write(OutputNode node, Appointment value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class AppointmentConverter extends OmConverter<Appointment> {
+	private AppointmentDao appointmentDao;
+	private Map<Long, Long> idMap;
+	
+	public AppointmentConverter() {
+		//default constructor is for export
+	}
+	
+	public AppointmentConverter(AppointmentDao appointmentDao, Map<Long, Long> idMap) {
+		this.appointmentDao = appointmentDao;
+		this.idMap = idMap;
+	}
+	
+	@Override
+	public Appointment read(InputNode node) throws Exception {
+		long oldId = getLong(node);
+		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+		
+		Appointment a = appointmentDao.getAny(newId);
+		return a == null ? new Appointment() : a;
+	}
+
+	@Override
+	public void write(OutputNode node, Appointment value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
index d0750c5..aec044e 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
@@ -1,39 +1,39 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class AppointmentReminderTypeConverter extends OmConverter<Reminder> {
-	public AppointmentReminderTypeConverter() {
-	}
-	
-	@Override
-	public Reminder read(InputNode node) throws Exception {
-		return Reminder.get(getInt(node));
-	}
-
-	@Override
-	public void write(OutputNode node, Reminder value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class AppointmentReminderTypeConverter extends OmConverter<Reminder> {
+	public AppointmentReminderTypeConverter() {
+	}
+	
+	@Override
+	public Reminder read(InputNode node) throws Exception {
+		return Reminder.get(getInt(node));
+	}
+
+	@Override
+	public void write(OutputNode node, Reminder value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
index d44ddbd..7f3967d 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/DateConverter.java
@@ -1,41 +1,41 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import java.util.Date;
-
-import org.apache.openmeetings.util.CalendarPatterns;
-import org.simpleframework.xml.convert.Converter;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class DateConverter implements Converter<Date> {
-	@Override
-	public Date read(InputNode node) throws Exception {
-		String val = node.getValue();
-		return val == null || "null".equals(val) ? new Date() : CalendarPatterns.parseImportDate(val);
-	}
-
-	@Override
-	public void write(OutputNode node, Date value) throws Exception {
-		node.setAttribute("class", "java.util.Date");
-		node.setData(true);
-		node.setValue(value == null ? "0" : CalendarPatterns.getExportDate(value));
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Date;
+
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.simpleframework.xml.convert.Converter;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class DateConverter implements Converter<Date> {
+	@Override
+	public Date read(InputNode node) throws Exception {
+		String val = node.getValue();
+		return val == null || "null".equals(val) ? new Date() : CalendarPatterns.parseImportDate(val);
+	}
+
+	@Override
+	public void write(OutputNode node, Date value) throws Exception {
+		node.setAttribute("class", "java.util.Date");
+		node.setData(true);
+		node.setValue(value == null ? "0" : CalendarPatterns.getExportDate(value));
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
index 29cee41..67c363b 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/GroupConverter.java
@@ -1,55 +1,55 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class GroupConverter extends OmConverter<Group> {
-	private GroupDao groupDao;
-	private Map<Long, Long> idMap;
-	
-	public GroupConverter() {
-		//default constructor is for export
-	}
-	
-	public GroupConverter(GroupDao groupDao, Map<Long, Long> idMap) {
-		this.groupDao = groupDao;
-		this.idMap = idMap;
-	}
-	
-	@Override
-	public Group read(InputNode node) throws Exception {
-		long oldId = getLong(node);
-		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-		
-		Group o = groupDao.get(newId);
-		return o == null ? new Group() : o;
-	}
-
-	@Override
-	public void write(OutputNode node, Group value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class GroupConverter extends OmConverter<Group> {
+	private GroupDao groupDao;
+	private Map<Long, Long> idMap;
+	
+	public GroupConverter() {
+		//default constructor is for export
+	}
+	
+	public GroupConverter(GroupDao groupDao, Map<Long, Long> idMap) {
+		this.groupDao = groupDao;
+		this.idMap = idMap;
+	}
+	
+	@Override
+	public Group read(InputNode node) throws Exception {
+		long oldId = getLong(node);
+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+		
+		Group o = groupDao.get(newId);
+		return o == null ? new Group() : o;
+	}
+
+	@Override
+	public void write(OutputNode node, Group value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/InlineConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/InlineConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/InlineConverter.java
index 4ab9f24..de31d41 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/InlineConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/InlineConverter.java
@@ -1,29 +1,29 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.simpleframework.xml.stream.InputNode;
-
-public abstract class InlineConverter<T> extends OmConverter<T> {
-	
-	String getNextValue(InputNode parent, String name) throws Exception {
-		InputNode node = parent.getNext(name);
-		return node != null ? node.getValue() : null;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.stream.InputNode;
+
+public abstract class InlineConverter<T> extends OmConverter<T> {
+	
+	String getNextValue(InputNode parent, String name) throws Exception {
+		InputNode node = parent.getNext(name);
+		return node != null ? node.getValue() : null;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
index 6f6aa7f..dc7dc7e 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
@@ -1,34 +1,34 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.simpleframework.xml.transform.Transform;
-
-public class IntegerTransform implements Transform<Integer>{
-	@Override
-	public Integer read(String value) throws Exception {
-		return OmConverter.getInt(value, 0);
-	}
-
-	@Override
-	public String write(Integer value) throws Exception {
-		return "" + value;
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.transform.Transform;
+
+public class IntegerTransform implements Transform<Integer>{
+	@Override
+	public Integer read(String value) throws Exception {
+		return OmConverter.getInt(value, 0);
+	}
+
+	@Override
+	public String write(Integer value) throws Exception {
+		return "" + value;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
index d48be83..e171383 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
@@ -1,33 +1,33 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.simpleframework.xml.transform.Transform;
-
-public class LongTransform implements Transform<Long> {
-	@Override
-	public Long read(String value) throws Exception {
-		return OmConverter.getLong(value);
-	}
-
-	@Override
-	public String write(Long value) throws Exception {
-		return "" + value;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.transform.Transform;
+
+public class LongTransform implements Transform<Long> {
+	@Override
+	public Long read(String value) throws Exception {
+		return OmConverter.getLong(value);
+	}
+
+	@Override
+	public String write(Long value) throws Exception {
+		return "" + value;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmCalendarConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmCalendarConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmCalendarConverter.java
index 613e6ff..f4c9349 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmCalendarConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmCalendarConverter.java
@@ -1,55 +1,55 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
-import org.apache.openmeetings.db.entity.calendar.OmCalendar;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class OmCalendarConverter extends OmConverter<OmCalendar> {
-	private OmCalendarDao calendarDao;
-	private Map<Long, Long> idMap;
-	
-	public OmCalendarConverter() {
-		//default constructor is for export
-	}
-
-	public OmCalendarConverter(OmCalendarDao calendarDao, Map<Long, Long> idMap) {
-		this.calendarDao = calendarDao;
-		this.idMap = idMap;
-	}
-
-	@Override
-	public OmCalendar read(InputNode node) throws Exception {
-		long oldId = getLong(node);
-		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-		
-		OmCalendar c = calendarDao.get(newId);
-		return c == null ? new OmCalendar() : c;
-	}
-
-	@Override
-	public void write(OutputNode node, OmCalendar value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
+import org.apache.openmeetings.db.entity.calendar.OmCalendar;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class OmCalendarConverter extends OmConverter<OmCalendar> {
+	private OmCalendarDao calendarDao;
+	private Map<Long, Long> idMap;
+	
+	public OmCalendarConverter() {
+		//default constructor is for export
+	}
+
+	public OmCalendarConverter(OmCalendarDao calendarDao, Map<Long, Long> idMap) {
+		this.calendarDao = calendarDao;
+		this.idMap = idMap;
+	}
+
+	@Override
+	public OmCalendar read(InputNode node) throws Exception {
+		long oldId = getLong(node);
+		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+		
+		OmCalendar c = calendarDao.get(newId);
+		return c == null ? new OmCalendar() : c;
+	}
+
+	@Override
+	public void write(OutputNode node, OmCalendar value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java
index 6d3055e..34539e1 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java
@@ -1,56 +1,56 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.simpleframework.xml.convert.Converter;
-import org.simpleframework.xml.stream.InputNode;
-
-public abstract class OmConverter<T> implements Converter<T> {
-	static long getLong(InputNode node) throws Exception {
-		return getLong(node.getValue());
-	}
-
-	static long getLong(String value) {
-		return getLong(value, 0);
-	}
-	
-	static long getLong(String value, long def) {
-		long result = def;
-		try {
-			result = Long.valueOf(value).longValue();
-		} catch (Exception e) {
-			//no op
-		}
-		return result;
-	}
-
-	static int getInt(InputNode node) throws Exception {
-		return getInt(node.getValue(), 0);
-	}
-	
-	static int getInt(String value, int def) {
-		int result = def;
-		try {
-			result = Integer.valueOf(value).intValue();
-		} catch (Exception e) {
-			//no op
-		}
-		return result;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.simpleframework.xml.convert.Converter;
+import org.simpleframework.xml.stream.InputNode;
+
+public abstract class OmConverter<T> implements Converter<T> {
+	static long getLong(InputNode node) throws Exception {
+		return getLong(node.getValue());
+	}
+
+	static long getLong(String value) {
+		return getLong(value, 0);
+	}
+	
+	static long getLong(String value, long def) {
+		long result = def;
+		try {
+			result = Long.valueOf(value).longValue();
+		} catch (Exception e) {
+			//no op
+		}
+		return result;
+	}
+
+	static int getInt(InputNode node) throws Exception {
+		return getInt(node.getValue(), 0);
+	}
+	
+	static int getInt(String value, int def) {
+		int result = def;
+		try {
+			result = Integer.valueOf(value).intValue();
+		} catch (Exception e) {
+			//no op
+		}
+		return result;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
index 3381b3f..365904d 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java
@@ -1,38 +1,38 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.apache.openmeetings.db.entity.room.RoomPoll;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class PollTypeConverter extends OmConverter<RoomPoll.Type> {
-	public PollTypeConverter() {}
-	
-	@Override
-	public RoomPoll.Type read(InputNode node) throws Exception {
-		return RoomPoll.Type.get(getLong(node));
-	}
-
-	@Override
-	public void write(OutputNode node, RoomPoll.Type value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class PollTypeConverter extends OmConverter<RoomPoll.Type> {
+	public PollTypeConverter() {}
+	
+	@Override
+	public RoomPoll.Type read(InputNode node) throws Exception {
+		return RoomPoll.Type.get(getLong(node));
+	}
+
+	@Override
+	public void write(OutputNode node, RoomPoll.Type value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java
index e751335..128ee13 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java
@@ -1,47 +1,47 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.apache.openmeetings.db.entity.record.Recording;
-import org.apache.openmeetings.db.entity.record.Recording.Status;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class RecordingStatusConverter extends OmConverter<Recording.Status> {
-	private static final String PROCESSING = "PROCESSING";
-	public RecordingStatusConverter() {}
-
-	@Override
-	public Recording.Status read(InputNode node) throws Exception {
-		Recording.Status result = null;
-		String val = node.getValue();
-		try {
-			result = Recording.Status.valueOf(val);
-		} catch (Exception e) {
-			result = PROCESSING.equals(val) ? Status.CONVERTING : Status.NONE;
-		}
-		return result;
-	}
-
-	@Override
-	public void write(OutputNode node, Recording.Status value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? Status.NONE.name() : value.name());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.entity.record.Recording;
+import org.apache.openmeetings.db.entity.record.Recording.Status;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class RecordingStatusConverter extends OmConverter<Recording.Status> {
+	private static final String PROCESSING = "PROCESSING";
+	public RecordingStatusConverter() {}
+
+	@Override
+	public Recording.Status read(InputNode node) throws Exception {
+		Recording.Status result = null;
+		String val = node.getValue();
+		try {
+			result = Recording.Status.valueOf(val);
+		} catch (Exception e) {
+			result = PROCESSING.equals(val) ? Status.CONVERTING : Status.NONE;
+		}
+		return result;
+	}
+
+	@Override
+	public void write(OutputNode node, Recording.Status value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? Status.NONE.name() : value.name());
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
index 3a0fa36..20ccba1 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java
@@ -1,55 +1,55 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.entity.room.Room;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class RoomConverter extends OmConverter<Room> {
-	private RoomDao roomDao;
-	private Map<Long, Long> idMap;
-	
-	public RoomConverter() {
-		//default constructor is for export
-	}
-	
-	public RoomConverter(RoomDao roomDao, Map<Long, Long> idMap) {
-		this.roomDao = roomDao;
-		this.idMap = idMap;
-	}
-	
-	@Override
-	public Room read(InputNode node) throws Exception {
-		long oldId = getLong(node);
-		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-
-		Room r = roomDao.get(newId);
-		return r == null ? new Room() : r;
-	}
-
-	@Override
-	public void write(OutputNode node, Room value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class RoomConverter extends OmConverter<Room> {
+	private RoomDao roomDao;
+	private Map<Long, Long> idMap;
+	
+	public RoomConverter() {
+		//default constructor is for export
+	}
+	
+	public RoomConverter(RoomDao roomDao, Map<Long, Long> idMap) {
+		this.roomDao = roomDao;
+		this.idMap = idMap;
+	}
+	
+	@Override
+	public Room read(InputNode node) throws Exception {
+		long oldId = getLong(node);
+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+
+		Room r = roomDao.get(newId);
+		return r == null ? new Room() : r;
+	}
+
+	@Override
+	public void write(OutputNode node, Room value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
index 2696c27..a6f8f5b 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java
@@ -1,38 +1,38 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.apache.openmeetings.db.entity.room.Room.Type;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class RoomTypeConverter extends OmConverter<Type> {
-	public RoomTypeConverter() {}
-	
-	@Override
-	public Type read(InputNode node) throws Exception {
-		return Type.get(getInt(node));
-	}
-
-	@Override
-	public void write(OutputNode node, Type value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.entity.room.Room.Type;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class RoomTypeConverter extends OmConverter<Type> {
+	public RoomTypeConverter() {}
+	
+	@Override
+	public Type read(InputNode node) throws Exception {
+		return Type.get(getInt(node));
+	}
+
+	@Override
+	public void write(OutputNode node, Type value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
index 70e19af..59e680a 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java
@@ -1,36 +1,36 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import org.apache.openmeetings.db.entity.user.User.Salutation;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class SalutationConverter extends OmConverter<Salutation> {
-	@Override
-	public Salutation read(InputNode node) throws Exception {
-		return Salutation.get(getInt(node));
-	}
-
-	@Override
-	public void write(OutputNode node, Salutation value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import org.apache.openmeetings.db.entity.user.User.Salutation;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class SalutationConverter extends OmConverter<Salutation> {
+	@Override
+	public Salutation read(InputNode node) throws Exception {
+		return Salutation.get(getInt(node));
+	}
+
+	@Override
+	public void write(OutputNode node, Salutation value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
 }
\ No newline at end of file


[20/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx b/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
index 676f9cf..d58daa5 100644
--- a/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
+++ b/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
@@ -1,721 +1,721 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-
-	<!--- Base container for a client, can be either: a remote-video (subscribing/playing a video) or a self-video (broadcasting 
-		a cam/mic) -->
-	<class name="baseVideoObject" extends="view" bgcolor="0x000000" width="122" height="101">
-
-		<switch>
-			<when property="$as3">
-				<passthrough>
-					import flash.filters.DropShadowFilter;
-					import flash.media.*
-					import flash.net.SharedObject;
-				</passthrough>
-			</when>
-		</switch>
-
-		<!--- @keywords private -->
-		<attribute name="chatpartnername" value="" type="string" />
-		<!--- @keywords private -->
-		<attribute name="showUserProfilePic" type="boolean" value="false" />
-
-		<!--- color of this user, this is the color the user will also use for his chat-color -->
-		<attribute name="usercolor" value="0" type="number" />
-
-		<!--- publicSID is a hash-value to identify a user -->
-		<attribute name="publicSID" value="" type="string" />
-
-		<!--- micMuted indicates if the microphone is currently turned sound or gain to 0 -->
-		<attribute name="micMuted" value="false" type="boolean" />
-
-		<!--- @keywords private -->
-		<attribute name="isremote" value="true" type="boolean" />
-
-		<!--- @keywords private -->
-		<attribute name="clientVars" value="null" />
-
-		<!--- @keywords private -->
-		<attribute name="isResizing" value="false" type="boolean" />
-
-		<!--- @keywords private -->
-		<attribute name="isInterview" value="false" type="boolean" />
-
-		<attribute name="respectRatio" value="true" type="boolean" />
-
-		<attribute name="minimized" value="false" type="boolean" />
-
-		<attribute name="custom" value="false" type="boolean" />
-
-		<attribute name="initH" value="40" type="number" />
-		<attribute name="initW" value="40" type="number" />
-
-		<attribute name="isShowMicMute" value="false" type="boolean" />
-
-		<attribute name="isMutedByModerator" value="false" type="boolean" />
-
-		<attribute name="isMicrophonesRoom" value="false" type="boolean" />
-
-		<attribute name="lastPositiveVolume" type="number" value="50" />
-
-		<!-- Initial stream ratio: width / height -->
-		<attribute name="initRatio" type="number" value="null" />
-		<attribute name="initialHeight" value="$once{ this.height }" type="number" />
-
-		<handler name="onisremote" args="r">
-			this.isremote = r;
-		</handler>
-
-		<handler name="oninit">
-		<![CDATA[
-			this.clientVars = new Array();
-			this.clientVars['User']='No User Connected';
-			
-			if (this.isInterview) {
-				this._toolbar._minimize.setAttribute("visibility","hidden");
-				this._resizeview.setAttribute("visibility","hidden");
-				this._innerbottom.setAttribute("visibility","hidden");
-				return;
-			}
-			
-			if (this.custom) {
-				this._toolbar._minimize.setAttribute("visibility","hidden");
-				this._resizeview.setAttribute("visibility","hidden");
-				this._toolbar.setAttribute("visibility","hidden");
-				this._resizeview.setAttribute("visibility","hidden");
-				this._loudness.setAttribute("visibility","hidden");
-				this._innertop.setAttribute("visibility","hidden");
-				this._innerbottom.setAttribute("visibility","hidden");
-			}
-			this.setShadow();
-			
-			if (this.publicSID == canvas.publicSID) {
-				this._toolbar._resync._tip.setAttribute("labelid",610);
-			}
-			this._giveExclusiveAudioView.bringToFront();
-			
-			this.isMicrophonesRoom = canvas.currentRoomObj.showMicrophoneStatus;
-			if (isMicrophonesRoom) {
-				this._innertop.setAttribute("bgcolor", "0xFF6600");
-				this._innerbottom.setAttribute("bgcolor", "0xFF6600");
-			} else {
-				this._innerbottom.setAttribute("visibility", "hidden");
-			}
-		]]>
-		</handler>
-
-		<handler name="ony">
-		<![CDATA[
-			if (this.isInterview || this.custom || canvas.currentRoomObj.hideWhiteboard) {
-				return;
-			}
-			var bounds = this.getBounds();
-			var parentBounds = canvas.getBounds();
-			if (bounds.y < 0) {
-				this.setAttribute('y',0);
-			}
-			if (bounds.y > (parentBounds.height - bounds.height)) {		   
-				this.setAttribute('y', parentBounds.height - bounds.height );
-			}
-		]]>
-		</handler>
-
-		<handler name="onx">
-		<![CDATA[
-			if (this.isInterview || this.custom) {
-				return;
-			}	
-		
-			var bounds = this.getBounds();
-			var parentBounds = canvas.getBounds();
-			if (bounds.x < 0) {
-				this.setAttribute('x',0);
-			}
-			
-			if (bounds.x > (parentBounds.width - bounds.width)) {
-				this.setAttribute('x', parentBounds.width - bounds.width );
-			}
-		]]>
-		</handler>
-
-		<method name="setShadow">
-		<![CDATA[
-			if (this.isinited){
-				this.normalMC = this.getDisplayObject();
-				//if($debug) Debug.write(this.normalMC);
-				//if($debug) Debug.write("this.normalMC: ",this.normalMC);
-				//if($debug) Debug.write("this: ",this);
-				this.displacementMap = new flash.filters.DropShadowFilter();
-				this.normalMC.filters = [this.displacementMap];
-			}
-		]]>
-		</method>
-
-		<!-- respect ratio and keep minimum width / height -->
-		<method name="setItemContraintsWidth" args="unused">
-		<![CDATA[
-			if (!this.respectRatio) {
-				return;
-			}
-			var h=this.width * this.initH/this.initW;
-			h=((h < this.initH ) ? initH : h);
-
-			if ($debug) Debug.write("setItemContraintsWidth",this.respectRatio,'orig',this.height,this.width,'new h',h);
-
-			this.setAttribute("height",h);
-		]]>
-		</method>
-
-		<method name="setItemContraintsHeight" args="unused">
-		<![CDATA[
-			if (!this.respectRatio) {
-				return;
-			}
-			var w=this.height * this.initW/this.initH;
-			w=((w < this.initW ) ? initW : w);
-
-			if ($debug) Debug.write("setItemContraintsHeight",this.respectRatio,'orig',this.height,this.width,'new w',w);
-
-			this.setAttribute("width",w);
-		]]>
-		</method>
-
-		<method name="updateAVSettingsSymbol" args="rcl">
-		<![CDATA[
-			//FIXME: Set a Symbol whereve this Client is Audio(only)/Video(only), both or Profile Picture
-			if ($debug) Debug.warn("updateAVSettingsSymbol TODO ", rcl, this);
-			switch (rcl.avsettings) {
-				case "av":
-					this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
-					this.setAttribute("visible", true);
-					this._toolbar._mute.setAttribute("visible", true);
-					this._toolbar._volume.setAttribute("visible", true);
-					if(!canvas.isInterview && this.minimized) {
-						this.reminimize();
-					}
-					this.deleteVideoConfProfilePic();
-					break;
-				case "a":
-					this.setAttribute("visible", true);
-					this._toolbar._mute.setAttribute("visible", true);
-					this._toolbar._volume.setAttribute("visible", true);
-					if(!canvas.isInterview && this.minimized) {
-						this.reminimize();
-					}
-					this.setVideouserProfilePic(rcl);
-					break;
-				case "v":
-					this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
-					this.setAttribute("visible", true);
-					this._toolbar._mute.setAttribute("visible", false);
-					this._toolbar._volume.setAttribute("visible", false);
-					if(!canvas.isInterview && this.minimized) {
-						this.reminimize();
-					}
-					this.deleteVideoConfProfilePic();
-					break;
-				case "n":
-					if ($debug) Debug.write("Do not Publish A/V");
-					//Prevent from Hiding the Box in Event Modus
-					if (canvas.thishib.modus == "conference") {
-						this.setAttribute("visible", false);
-					}
-					break;
-				default:
-					if ($debug) Debug.warn("no valid device Setup chosen");
-					break;
-			}
-		]]>
-		</method>
-
-		<method name="doResize" args="bool">
-			if ($debug) Debug.write("doResize",bool);
-			if(bool) {
-				dragHelper.create();
-			} else {
-				dragHelper.remove();
-			}
-			if (this.isInterview || this.custom) {
-				return;
-			}
-
-			if (bool) {
-				this.isResizing = true;
-				this.rs.apply();
-			} else {
-				this.isResizing = false;
-				this.rs.remove();
-			}
-		</method>
-
-		<!--- resets all values and stops the streaming -->
-		<method name="resetValues">
-		<![CDATA[
-			if ($debug) Debug.write("resetValues: ", this.isremote);
-			this.clientVars = null;
-			if (this.isremote) {
-				this._chatvideoinner._videostream.restart();
-			} else {
-				deleteVideoConfProfilePic();
-				this._chatvideoinner._videostream._stop();
-			}
-		]]>
-		</method>
-		
-		<method name="setVideouserProfilePic" args="value">
-			if ($debug) Debug.write("### setVideouserProfilePic ",value);
-			this.deleteVideoConfProfilePic();
-			new lz.videoUserProfilePicSWF10(this._chatvideoinner,{name:'userProfilePic',value:value});
-			this.showUserProfilePic = true;
-		</method>
-		
-		<method name="deleteVideoConfProfilePic">
-			if ($debug) Debug.write("### deleteVideoConfProfilePic ###");
-			if ($debug) Debug.write("delete ",this.showUserProfilePic);
-			if (this.showUserProfilePic) {
-				this._chatvideoinner.userProfilePic.destroy();
-				this.showUserProfilePic = false;
-			}
-		</method>
-
-		<!--- @keywords private -->
-		<method name="_startDragState" args="obj">
-			if (this.isInterview || this.custom) {
-				return;
-			}
-
-			dragHelper.create();
-
-			this.bringToFront();
-			parent.bringToFront();
-			this.dragger.apply();
-		</method>
-
-		<!--- @keywords private -->
-		<method name="_removeDragState" args="obj">
-		<![CDATA[
-			lz.Cursor.unlock();
-			
-			if (this.x < 0) {
-				this.setAttribute("x",20);
-			}
-			
-			if (this.y < 0) {
-				this.setAttribute("y",20);
-			}
-			
-			if (this.x+this.width > parent.width) {
-				this.setAttribute("x",parent.width - this.width - 20);
-			}
-			
-			if (this.y+this.height > parent.height) {
-				this.setAttribute("y",parent.height - this.height - 20);
-			}
-			dragHelper.remove();
-			this.dragger.remove();
-		]]>
-		</method>
-
-		<method name="minimize">
-		<![CDATA[
-			this.respectRatio = false;
-		
-			this.setAttribute("minimized",true);
-			
-			this._toolbar._minimize.setAttribute("visibility","hidden");
-			this._toolbar._maximize2.setAttribute("visibility","visible");
-			
-			for (var eg in this.subviews) {
-				if (this.subviews[eg].name != "_toolbar" 
-						&& this.subviews[eg].name != "_innertop"
-						&& this.subviews[eg].name != "_loudness") {
-					 this.subviews[eg].setAttribute("visibility","hidden");
-				}
-			}
-			
-			this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
-			this._loudness.bringToFront();
-			
-			this.initialHeight = this.height;
-			//this.setAttribute("height",20);
-			this._minimizeZoom.setAttribute("to",20);
-			this._minimizeZoom.setAttribute('started', true);
-		]]>
-		</method>
-
-		<method name="reminimize">
-		<![CDATA[
-			this.setAttribute("minimized",false);
-			
-			this._toolbar._minimize.setAttribute("visibility","visible");
-			this._toolbar._maximize2.setAttribute("visibility","hidden");
-			
-			this._loudness.setAttribute("x",1);
-			
-			//this.setAttribute("height",this.initialHeight); 
-			if ($debug) Debug.write("this.initialHeight ",this.initialHeight);
-			this._minimizeZoom.setAttribute("to",this.initialHeight);
-			this._minimizeZoom.setAttribute('started', true);
-		]]>
-		</method>
-
-		<method name="reminimizeComplete">
-		<![CDATA[
-			if (!this.minimized) {
-				for (var eg in this.subviews) {
-					if (this.subviews[eg].name != "_toolbar" 
-							&& this.subviews[eg].name != "_innertop"
-							&& this.subviews[eg].name != "_loudness"
-							&& this.subviews[eg].name != "_innerbottom") {
-						 this.subviews[eg].setAttribute("visibility","visible");
-					}
-				}
-				if (isMicrophonesRoom) {
-					this._innerbottom.setAttribute("visibility", "visible");
-				}
-				this.respectRatio = true;
-			}
-		]]>
-		</method>
-
-		<view name="_innertop" width="${parent.width-2 }" height="18" x="1" y="1"
-			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
-			<text text="${ parent.parent.chatpartnername }" onmousedown="parent.parent._startDragState(this)"
-				onmouseup="parent.parent._removeDragState(this)"
-				width="${ parent.width-2 }" fgcolor="white" fontsize="9">
-				<handler name="onmouseover">
-					//cursor="arrow_draw_panel_cursor"
-					lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
-				</handler>
-
-				<handler name="onmouseout">
-					lz.Cursor.unlock();
-				</handler>
-			</text>
-		</view>
-
-		<view name="_innerbottom" width="${parent.width - 2}" x="1" y="${parent.height - 19}" height="18"
-			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
-			<text text="${canvas.getLabelName(1434)}" width="${ parent.width-2 }" fgcolor="white" name="title" fontsize="9" />
-		</view>
-
-		<view name="_loudness" x="1" visible="${parent.isremote}" y="${parent.height - 20 - ((parent._innerbottom.visible) ? 18 : 0) }">
-			<method name="setSpeaking" args="bool">
-				this.loudness.setAttribute('opacity', bool ? 1 : 0.2);
-			</method>
-			<view x="2" y="2" name="loudness" resource="speaking" opacity="0.2" onmouseover="" onmouseout="">
-				<handler name="onclick">
-				<![CDATA[
-					if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
-						parent.parent.confirmExclusiveAudio();
-					} else {
-						new lz.labelerrorPopup(canvas,{errorlabelid:1478});
-					}
-				]]>
-				</handler>
-				<labelTooltip inittwice="true" labelid="372" />
-			</view>
-		</view>
-
-		<view name="_resizeview" x="${ this.parent.width - 16 }" valign="bottom" resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc"
-			onmousedown="this.parent.doResize(true)" onmouseup="this.parent.doResize(false)">
-			<handler name="oninit">
-				//if ($debug) Debug.write("setTint");
-				//TODO: Fix this, does not work at the moment
-				//canvas.protocol + '://code.google.com/p/openmeetings/issues/detail?id=470
-				this.setAttribute("color", canvas.getThemeColor('baseMousecolorizer'));
-			</handler>
-		</view>
-
-		<method name="resync">
-			resetValues();
-			if (!isremote) {
-				canvas.commonVideoViewContent.removeVideoByUser(this.publicSID);
-				canvas.commonVideoViewContent._startAvBroadcast(true);
-			}
-		</method>
-
-		<view name="_toolbar" x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">
-			<attribute name="isload" value="true" type="boolean" />
-
-			<miniIconsPresenter name="_resync" iconRessourceName="resyncuser_rsc">
-				<handler name="onclick">
-					parent.parent.resync();
-				</handler>
-				<labelTooltip name="_tip" labelid="540" />
-			</miniIconsPresenter>
-
-			<miniIconsPresenter name="_mute" width="16" height="16" iconRessourceName="mute_micro_btn_rsc">
-				<handler name="onclick">
-					parent.parent.silenceMicrophone(!parent.parent.micMuted);
-				</handler>
-				<labelTooltip name="_tip" labelid="1405" />
-			</miniIconsPresenter>
-
-			<miniIconsPresenter x="0" y="0" name="_volume" width="16" height="16" iconRessourceName="volume">
-				<handler name="oninit">
-					_tip.setAttribute("labelid", parent.parent.isremote ? 1511 : 1512);
-				</handler>
-				<handler name="onclick">
-					var volume = parent.parent.getStreamVolume();
-
-					var sliderHeight = 120;
-					var sliderX = this.getAttributeRelative('x',canvas) - 2;
-					var pick = new lz.VolumeSlider(canvas, {
-							height:sliderHeight,
-							x:sliderX,
-							y:(parent.getAttributeRelative('y',canvas) - sliderHeight/2),
-							initialNumber:volume,
-							videoObject:parent.parent
-						});
-					lz.ModeManager.makeModal(pick);
-				</handler>
-				<labelTooltip name="_tip" />
-			</miniIconsPresenter>
-
-			<miniIconsPresenter name="_minimize" iconRessourceName="btn_presenter_minimize">
-				<handler name="onclick">
-					this.parent.parent.minimize();
-				</handler>
-				<labelTooltip labelid="856" />
-			</miniIconsPresenter>
-
-			<miniIconsPresenter name="_maximize2" visibility="hidden" iconRessourceName="btn_presenter_maximize">
-				<handler name="onclick">
-					this.parent.parent.reminimize();
-				</handler>
-				<labelTooltip labelid="857" />
-			</miniIconsPresenter>
-
-		</view>
-
-		<view name="_giveExclusiveAudioView" valign="middle" align="center" visible="false">
-			<view name="_micButton" width="40" height="40" resource="mic_rsc" showhandcursor="true">
-				<labelTooltip name="_toolTipTextExclusiveAudio" labelid="1386" />
-			</view>
-		</view>
-
-		<method name="allowedExclusiveAudio">
-		<![CDATA[
-			return (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio)
-					&& this.clientVars.avsettings.indexOf('a') > -1;
-		]]>
-		</method>
-
-		<handler name="onmouseover">
-		<![CDATA[
-			if (this.isInterview || this.minimized) {
-				return;
-			}
-			if (allowedExclusiveAudio()) {
-				this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.doonmouseover();
-				this._giveExclusiveAudioView.setAttribute("visible", true);
-			}
-		]]>
-		</handler>
-
-		<handler name="onmouseout">
-		<![CDATA[
-			if (this.isInterview || this.minimized) {
-				return;
-			}
-			if (allowedExclusiveAudio()) {
-				this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
-				this._giveExclusiveAudioView.setAttribute("visible", false);
-			}
-		]]>
-		</handler>
-
-		<handler name="onclick">
-		<![CDATA[
-			if (allowedExclusiveAudio()) {
-				this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
-				this.confirmExclusiveAudio();
-			}
-		]]>
-		</handler>
-
-		<dragstate name="dragger" />
-		<resizestatemin name="rs" resize_min_width="70" resize_min_height="70" />
-		<dragHelper name="dragHelper" />
-
-		<animator name="_minimizeZoom" attribute="height" duration="750" to="20" started="false">
-			<handler name="onstop" args="s">
-				parent.reminimizeComplete();
-			</handler>
-		</animator>
-
-		<handler name="onismoderator" reference="canvas" args="m">
-		<![CDATA[
-			if ($debug) Debug.write("###### ismoderator ", m);
-			
-			if (this.minimized) {
-				this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
-				this._loudness.bringToFront();
-			}
-		]]>
-		</handler>
-
-		<method name="confirmExclusiveAudio">
-			var so:SharedObject = SharedObject.getLocal('userdata');
-			var userData = so.data;
-			var dontShowExclusiveAudioConfirmation = userData["dontShowExclusiveAudioConfirmation"];
-			var exclusiveAudioListener = new Object();
-			exclusiveAudioListener.sendNoConfirmation = function(none) {};
-			exclusiveAudioListener.sendConfirmation = function(answer, remember) {
-					if (answer) {
-						canvas.thishib.giveExclusiveAudio(this.publicSID);
-						if (remember) {
-							userData["dontShowExclusiveAudioConfirmation"] = true;
-							so.flush();
-						}
-					}
-				};
-			if (dontShowExclusiveAudioConfirmation == true) {
-				exclusiveAudioListener.sendConfirmation(true, true);
-			} else {
-				new lz.confirmationSingle(canvas,{
-					labelid:1428,
-					labeliderror:1539,
-					refObj:exclusiveAudioListener,
-					showCheckBox:true});
-			}
-		</method>
-
-		<!-- This will mute the Microphone only to the person that is speaking if the gain is set to zero NOBODY will hear 'em -->
-		<method name="muteMicrophone" args="roomClientObj">
-		<![CDATA[
-			if ($debug) Debug.write("############ muteMicrophone ", roomClientObj.micMuted, roomClientObj.publicSID, this.publicSID);
-			
-			if (roomClientObj.publicSID == this.publicSID) {
-				if ($debug) Debug.write("Set Mute for Client :: ", roomClientObj);
-				if ($debug) Debug.write("############ SET GAIN " + roomClientObj.micMuted);
-				this._chatvideoinner._videostream.muteMicro(roomClientObj.micMuted);
-				this.isMutedByModerator = roomClientObj.micMuted;
-				this.setMicMuted(roomClientObj.micMuted);
-			}
-		]]>
-		</method>
-
-		<!-- This will mute it only locally, that means on other screens the user might be still online and loud -->
-		<method name="silenceMicrophone" args="mute">
-		<![CDATA[
-			if ($debug) Debug.write("############ silenceMicrophone ", this.publicSID);
-			if (this.publicSID == canvas.publicSID) {
-				//self sound turned off
-				canvas.thishib.switchMicMuted.publicSID = this.publicSID;
-				canvas.thishib.switchMicMuted.mute = mute; 
-				canvas.thishib.switchMicMuted.doCall();
-				if (!mute) {
-					this._chatvideoinner._videostream.muteMicro(false);
-				}
-			} else {
-				//disable this action for now
-				if (!canvas.ismoderator) {
-					new lz.labelerrorPopup(canvas,{errorlabelid:1409});
-					return;
-				}
-				//you can not unmute it locally by putting sound to 100 cause the gain is set to zero globally in the micro of the sender!
-				//so setting the sound/volume on the other remote clients has zero effect
-				if (this.isMutedByModerator && !canvas.ismoderator) {
-					//FIXME: That is not true, you could restart audio/video ...
-					var errorlabelid = this.publicSID == canvas.publicSID ? 1387 : 1402;
-					new lz.labelerrorPopup(canvas,{errorlabelid:errorlabelid});
-					return;
-				}
-				if (canvas.ismoderator) {
-					canvas.thishib.switchMicMuted.publicSID = this.publicSID;
-					canvas.thishib.switchMicMuted.mute = mute; 
-					canvas.thishib.switchMicMuted.doCall();
-				} else {
-					this._chatvideoinner._videostream.setSoundVolume(mute ? 0 : 100);
-				}
-			}
-			this.setMicMuted(mute);
-		]]>
-		</method>
-
-		<method name="setMicMuted" args="micMuted">
-		<![CDATA[
-			this.micMuted = micMuted;
-			this._toolbar._mute._tip.setAttribute("labelid", micMuted ? "1406" : "1405");
-			this._toolbar._mute._itemRsc.setAttribute('frame', micMuted ? 2 : 1);
-			if (isMicrophonesRoom) {
-				var label = canvas.getLabelName(micMuted ? 1435 : 1434);
-				var color = micMuted ? canvas.getThemeColor('basebgcolorizer') : "0xFF6600";
-				this._innertop.setAttribute('bgcolor', color);
-				this._innerbottom.setAttribute('bgcolor', color);
-				this._innerbottom.title.setAttribute('text', label);
-			}
-		]]>
-		</method>
-
-		<method name="setStreamVolume" args="v">
-			if ($debug) Debug.write("############ setStreamVolume ", v, this.publicSID);
-			var stream = this._chatvideoinner._videostream;
-			if (this.isremote) {
-				stream.setSoundVolume(v);
-			} else {
-				stream.setAttribute('micGain', v);
-				stream.micro.gain = v;
-				if (0 == v) {
-					this.setMicMuted(true);
-					canvas.thishib.switchMicMuted.publicSID = this.publicSID;
-					canvas.thishib.switchMicMuted.mute = true; 
-					canvas.thishib.switchMicMuted.doCall();
-				} else if (micMuted) {
-					this.silenceMicrophone(false);
-				}
-			}
-		</method>
-
-		<method name="getStreamVolume">
-			var stream = this._chatvideoinner._videostream;
-			return this.isremote ? Number(stream._ns.soundTransform.volume * 100) : stream.micro.gain;
-		</method>
-
-		<handler name="onheight" args="value">
-			if (null == initRatio || !respectRatio) {
-				return;
-			}
-			var videoHeight = value - this.videoInsetY - this.bottomBarHeight;
-			var expectedVideoWidth = videoHeight * initRatio;
-			var expectedPodWidth = expectedVideoWidth + this.videoInsetX;
-			if (this.width != expectedPodWidth) {
-				this.setAttribute("width", expectedPodWidth);
-			}
-		</handler>
-
-		<handler name="onwidth" args="value">
-			if (null == initRatio || !respectRatio) {
-				return;
-			}
-			var videoWidth = value - this.videoInsetX;
-			var expectedVideoHeight = videoWidth / initRatio;
-			var expectedPodHeight = expectedVideoHeight + this.videoInsetY + this.bottomBarHeight;
-			if (this.height != expectedPodHeight) {
-				this.setAttribute("height", expectedPodHeight);
-			}
-		</handler>
-	</class>
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+	<!--- Base container for a client, can be either: a remote-video (subscribing/playing a video) or a self-video (broadcasting 
+		a cam/mic) -->
+	<class name="baseVideoObject" extends="view" bgcolor="0x000000" width="122" height="101">
+
+		<switch>
+			<when property="$as3">
+				<passthrough>
+					import flash.filters.DropShadowFilter;
+					import flash.media.*
+					import flash.net.SharedObject;
+				</passthrough>
+			</when>
+		</switch>
+
+		<!--- @keywords private -->
+		<attribute name="chatpartnername" value="" type="string" />
+		<!--- @keywords private -->
+		<attribute name="showUserProfilePic" type="boolean" value="false" />
+
+		<!--- color of this user, this is the color the user will also use for his chat-color -->
+		<attribute name="usercolor" value="0" type="number" />
+
+		<!--- publicSID is a hash-value to identify a user -->
+		<attribute name="publicSID" value="" type="string" />
+
+		<!--- micMuted indicates if the microphone is currently turned sound or gain to 0 -->
+		<attribute name="micMuted" value="false" type="boolean" />
+
+		<!--- @keywords private -->
+		<attribute name="isremote" value="true" type="boolean" />
+
+		<!--- @keywords private -->
+		<attribute name="clientVars" value="null" />
+
+		<!--- @keywords private -->
+		<attribute name="isResizing" value="false" type="boolean" />
+
+		<!--- @keywords private -->
+		<attribute name="isInterview" value="false" type="boolean" />
+
+		<attribute name="respectRatio" value="true" type="boolean" />
+
+		<attribute name="minimized" value="false" type="boolean" />
+
+		<attribute name="custom" value="false" type="boolean" />
+
+		<attribute name="initH" value="40" type="number" />
+		<attribute name="initW" value="40" type="number" />
+
+		<attribute name="isShowMicMute" value="false" type="boolean" />
+
+		<attribute name="isMutedByModerator" value="false" type="boolean" />
+
+		<attribute name="isMicrophonesRoom" value="false" type="boolean" />
+
+		<attribute name="lastPositiveVolume" type="number" value="50" />
+
+		<!-- Initial stream ratio: width / height -->
+		<attribute name="initRatio" type="number" value="null" />
+		<attribute name="initialHeight" value="$once{ this.height }" type="number" />
+
+		<handler name="onisremote" args="r">
+			this.isremote = r;
+		</handler>
+
+		<handler name="oninit">
+		<![CDATA[
+			this.clientVars = new Array();
+			this.clientVars['User']='No User Connected';
+			
+			if (this.isInterview) {
+				this._toolbar._minimize.setAttribute("visibility","hidden");
+				this._resizeview.setAttribute("visibility","hidden");
+				this._innerbottom.setAttribute("visibility","hidden");
+				return;
+			}
+			
+			if (this.custom) {
+				this._toolbar._minimize.setAttribute("visibility","hidden");
+				this._resizeview.setAttribute("visibility","hidden");
+				this._toolbar.setAttribute("visibility","hidden");
+				this._resizeview.setAttribute("visibility","hidden");
+				this._loudness.setAttribute("visibility","hidden");
+				this._innertop.setAttribute("visibility","hidden");
+				this._innerbottom.setAttribute("visibility","hidden");
+			}
+			this.setShadow();
+			
+			if (this.publicSID == canvas.publicSID) {
+				this._toolbar._resync._tip.setAttribute("labelid",610);
+			}
+			this._giveExclusiveAudioView.bringToFront();
+			
+			this.isMicrophonesRoom = canvas.currentRoomObj.showMicrophoneStatus;
+			if (isMicrophonesRoom) {
+				this._innertop.setAttribute("bgcolor", "0xFF6600");
+				this._innerbottom.setAttribute("bgcolor", "0xFF6600");
+			} else {
+				this._innerbottom.setAttribute("visibility", "hidden");
+			}
+		]]>
+		</handler>
+
+		<handler name="ony">
+		<![CDATA[
+			if (this.isInterview || this.custom || canvas.currentRoomObj.hideWhiteboard) {
+				return;
+			}
+			var bounds = this.getBounds();
+			var parentBounds = canvas.getBounds();
+			if (bounds.y < 0) {
+				this.setAttribute('y',0);
+			}
+			if (bounds.y > (parentBounds.height - bounds.height)) {		   
+				this.setAttribute('y', parentBounds.height - bounds.height );
+			}
+		]]>
+		</handler>
+
+		<handler name="onx">
+		<![CDATA[
+			if (this.isInterview || this.custom) {
+				return;
+			}	
+		
+			var bounds = this.getBounds();
+			var parentBounds = canvas.getBounds();
+			if (bounds.x < 0) {
+				this.setAttribute('x',0);
+			}
+			
+			if (bounds.x > (parentBounds.width - bounds.width)) {
+				this.setAttribute('x', parentBounds.width - bounds.width );
+			}
+		]]>
+		</handler>
+
+		<method name="setShadow">
+		<![CDATA[
+			if (this.isinited){
+				this.normalMC = this.getDisplayObject();
+				//if($debug) Debug.write(this.normalMC);
+				//if($debug) Debug.write("this.normalMC: ",this.normalMC);
+				//if($debug) Debug.write("this: ",this);
+				this.displacementMap = new flash.filters.DropShadowFilter();
+				this.normalMC.filters = [this.displacementMap];
+			}
+		]]>
+		</method>
+
+		<!-- respect ratio and keep minimum width / height -->
+		<method name="setItemContraintsWidth" args="unused">
+		<![CDATA[
+			if (!this.respectRatio) {
+				return;
+			}
+			var h=this.width * this.initH/this.initW;
+			h=((h < this.initH ) ? initH : h);
+
+			if ($debug) Debug.write("setItemContraintsWidth",this.respectRatio,'orig',this.height,this.width,'new h',h);
+
+			this.setAttribute("height",h);
+		]]>
+		</method>
+
+		<method name="setItemContraintsHeight" args="unused">
+		<![CDATA[
+			if (!this.respectRatio) {
+				return;
+			}
+			var w=this.height * this.initW/this.initH;
+			w=((w < this.initW ) ? initW : w);
+
+			if ($debug) Debug.write("setItemContraintsHeight",this.respectRatio,'orig',this.height,this.width,'new w',w);
+
+			this.setAttribute("width",w);
+		]]>
+		</method>
+
+		<method name="updateAVSettingsSymbol" args="rcl">
+		<![CDATA[
+			//FIXME: Set a Symbol whereve this Client is Audio(only)/Video(only), both or Profile Picture
+			if ($debug) Debug.warn("updateAVSettingsSymbol TODO ", rcl, this);
+			switch (rcl.avsettings) {
+				case "av":
+					this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
+					this.setAttribute("visible", true);
+					this._toolbar._mute.setAttribute("visible", true);
+					this._toolbar._volume.setAttribute("visible", true);
+					if(!canvas.isInterview && this.minimized) {
+						this.reminimize();
+					}
+					this.deleteVideoConfProfilePic();
+					break;
+				case "a":
+					this.setAttribute("visible", true);
+					this._toolbar._mute.setAttribute("visible", true);
+					this._toolbar._volume.setAttribute("visible", true);
+					if(!canvas.isInterview && this.minimized) {
+						this.reminimize();
+					}
+					this.setVideouserProfilePic(rcl);
+					break;
+				case "v":
+					this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
+					this.setAttribute("visible", true);
+					this._toolbar._mute.setAttribute("visible", false);
+					this._toolbar._volume.setAttribute("visible", false);
+					if(!canvas.isInterview && this.minimized) {
+						this.reminimize();
+					}
+					this.deleteVideoConfProfilePic();
+					break;
+				case "n":
+					if ($debug) Debug.write("Do not Publish A/V");
+					//Prevent from Hiding the Box in Event Modus
+					if (canvas.thishib.modus == "conference") {
+						this.setAttribute("visible", false);
+					}
+					break;
+				default:
+					if ($debug) Debug.warn("no valid device Setup chosen");
+					break;
+			}
+		]]>
+		</method>
+
+		<method name="doResize" args="bool">
+			if ($debug) Debug.write("doResize",bool);
+			if(bool) {
+				dragHelper.create();
+			} else {
+				dragHelper.remove();
+			}
+			if (this.isInterview || this.custom) {
+				return;
+			}
+
+			if (bool) {
+				this.isResizing = true;
+				this.rs.apply();
+			} else {
+				this.isResizing = false;
+				this.rs.remove();
+			}
+		</method>
+
+		<!--- resets all values and stops the streaming -->
+		<method name="resetValues">
+		<![CDATA[
+			if ($debug) Debug.write("resetValues: ", this.isremote);
+			this.clientVars = null;
+			if (this.isremote) {
+				this._chatvideoinner._videostream.restart();
+			} else {
+				deleteVideoConfProfilePic();
+				this._chatvideoinner._videostream._stop();
+			}
+		]]>
+		</method>
+		
+		<method name="setVideouserProfilePic" args="value">
+			if ($debug) Debug.write("### setVideouserProfilePic ",value);
+			this.deleteVideoConfProfilePic();
+			new lz.videoUserProfilePicSWF10(this._chatvideoinner,{name:'userProfilePic',value:value});
+			this.showUserProfilePic = true;
+		</method>
+		
+		<method name="deleteVideoConfProfilePic">
+			if ($debug) Debug.write("### deleteVideoConfProfilePic ###");
+			if ($debug) Debug.write("delete ",this.showUserProfilePic);
+			if (this.showUserProfilePic) {
+				this._chatvideoinner.userProfilePic.destroy();
+				this.showUserProfilePic = false;
+			}
+		</method>
+
+		<!--- @keywords private -->
+		<method name="_startDragState" args="obj">
+			if (this.isInterview || this.custom) {
+				return;
+			}
+
+			dragHelper.create();
+
+			this.bringToFront();
+			parent.bringToFront();
+			this.dragger.apply();
+		</method>
+
+		<!--- @keywords private -->
+		<method name="_removeDragState" args="obj">
+		<![CDATA[
+			lz.Cursor.unlock();
+			
+			if (this.x < 0) {
+				this.setAttribute("x",20);
+			}
+			
+			if (this.y < 0) {
+				this.setAttribute("y",20);
+			}
+			
+			if (this.x+this.width > parent.width) {
+				this.setAttribute("x",parent.width - this.width - 20);
+			}
+			
+			if (this.y+this.height > parent.height) {
+				this.setAttribute("y",parent.height - this.height - 20);
+			}
+			dragHelper.remove();
+			this.dragger.remove();
+		]]>
+		</method>
+
+		<method name="minimize">
+		<![CDATA[
+			this.respectRatio = false;
+		
+			this.setAttribute("minimized",true);
+			
+			this._toolbar._minimize.setAttribute("visibility","hidden");
+			this._toolbar._maximize2.setAttribute("visibility","visible");
+			
+			for (var eg in this.subviews) {
+				if (this.subviews[eg].name != "_toolbar" 
+						&& this.subviews[eg].name != "_innertop"
+						&& this.subviews[eg].name != "_loudness") {
+					 this.subviews[eg].setAttribute("visibility","hidden");
+				}
+			}
+			
+			this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
+			this._loudness.bringToFront();
+			
+			this.initialHeight = this.height;
+			//this.setAttribute("height",20);
+			this._minimizeZoom.setAttribute("to",20);
+			this._minimizeZoom.setAttribute('started', true);
+		]]>
+		</method>
+
+		<method name="reminimize">
+		<![CDATA[
+			this.setAttribute("minimized",false);
+			
+			this._toolbar._minimize.setAttribute("visibility","visible");
+			this._toolbar._maximize2.setAttribute("visibility","hidden");
+			
+			this._loudness.setAttribute("x",1);
+			
+			//this.setAttribute("height",this.initialHeight); 
+			if ($debug) Debug.write("this.initialHeight ",this.initialHeight);
+			this._minimizeZoom.setAttribute("to",this.initialHeight);
+			this._minimizeZoom.setAttribute('started', true);
+		]]>
+		</method>
+
+		<method name="reminimizeComplete">
+		<![CDATA[
+			if (!this.minimized) {
+				for (var eg in this.subviews) {
+					if (this.subviews[eg].name != "_toolbar" 
+							&& this.subviews[eg].name != "_innertop"
+							&& this.subviews[eg].name != "_loudness"
+							&& this.subviews[eg].name != "_innerbottom") {
+						 this.subviews[eg].setAttribute("visibility","visible");
+					}
+				}
+				if (isMicrophonesRoom) {
+					this._innerbottom.setAttribute("visibility", "visible");
+				}
+				this.respectRatio = true;
+			}
+		]]>
+		</method>
+
+		<view name="_innertop" width="${parent.width-2 }" height="18" x="1" y="1"
+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+			<text text="${ parent.parent.chatpartnername }" onmousedown="parent.parent._startDragState(this)"
+				onmouseup="parent.parent._removeDragState(this)"
+				width="${ parent.width-2 }" fgcolor="white" fontsize="9">
+				<handler name="onmouseover">
+					//cursor="arrow_draw_panel_cursor"
+					lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+				</handler>
+
+				<handler name="onmouseout">
+					lz.Cursor.unlock();
+				</handler>
+			</text>
+		</view>
+
+		<view name="_innerbottom" width="${parent.width - 2}" x="1" y="${parent.height - 19}" height="18"
+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+			<text text="${canvas.getLabelName(1434)}" width="${ parent.width-2 }" fgcolor="white" name="title" fontsize="9" />
+		</view>
+
+		<view name="_loudness" x="1" visible="${parent.isremote}" y="${parent.height - 20 - ((parent._innerbottom.visible) ? 18 : 0) }">
+			<method name="setSpeaking" args="bool">
+				this.loudness.setAttribute('opacity', bool ? 1 : 0.2);
+			</method>
+			<view x="2" y="2" name="loudness" resource="speaking" opacity="0.2" onmouseover="" onmouseout="">
+				<handler name="onclick">
+				<![CDATA[
+					if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+						parent.parent.confirmExclusiveAudio();
+					} else {
+						new lz.labelerrorPopup(canvas,{errorlabelid:1478});
+					}
+				]]>
+				</handler>
+				<labelTooltip inittwice="true" labelid="372" />
+			</view>
+		</view>
+
+		<view name="_resizeview" x="${ this.parent.width - 16 }" valign="bottom" resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc"
+			onmousedown="this.parent.doResize(true)" onmouseup="this.parent.doResize(false)">
+			<handler name="oninit">
+				//if ($debug) Debug.write("setTint");
+				//TODO: Fix this, does not work at the moment
+				//canvas.protocol + '://code.google.com/p/openmeetings/issues/detail?id=470
+				this.setAttribute("color", canvas.getThemeColor('baseMousecolorizer'));
+			</handler>
+		</view>
+
+		<method name="resync">
+			resetValues();
+			if (!isremote) {
+				canvas.commonVideoViewContent.removeVideoByUser(this.publicSID);
+				canvas.commonVideoViewContent._startAvBroadcast(true);
+			}
+		</method>
+
+		<view name="_toolbar" x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">
+			<attribute name="isload" value="true" type="boolean" />
+
+			<miniIconsPresenter name="_resync" iconRessourceName="resyncuser_rsc">
+				<handler name="onclick">
+					parent.parent.resync();
+				</handler>
+				<labelTooltip name="_tip" labelid="540" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter name="_mute" width="16" height="16" iconRessourceName="mute_micro_btn_rsc">
+				<handler name="onclick">
+					parent.parent.silenceMicrophone(!parent.parent.micMuted);
+				</handler>
+				<labelTooltip name="_tip" labelid="1405" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter x="0" y="0" name="_volume" width="16" height="16" iconRessourceName="volume">
+				<handler name="oninit">
+					_tip.setAttribute("labelid", parent.parent.isremote ? 1511 : 1512);
+				</handler>
+				<handler name="onclick">
+					var volume = parent.parent.getStreamVolume();
+
+					var sliderHeight = 120;
+					var sliderX = this.getAttributeRelative('x',canvas) - 2;
+					var pick = new lz.VolumeSlider(canvas, {
+							height:sliderHeight,
+							x:sliderX,
+							y:(parent.getAttributeRelative('y',canvas) - sliderHeight/2),
+							initialNumber:volume,
+							videoObject:parent.parent
+						});
+					lz.ModeManager.makeModal(pick);
+				</handler>
+				<labelTooltip name="_tip" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter name="_minimize" iconRessourceName="btn_presenter_minimize">
+				<handler name="onclick">
+					this.parent.parent.minimize();
+				</handler>
+				<labelTooltip labelid="856" />
+			</miniIconsPresenter>
+
+			<miniIconsPresenter name="_maximize2" visibility="hidden" iconRessourceName="btn_presenter_maximize">
+				<handler name="onclick">
+					this.parent.parent.reminimize();
+				</handler>
+				<labelTooltip labelid="857" />
+			</miniIconsPresenter>
+
+		</view>
+
+		<view name="_giveExclusiveAudioView" valign="middle" align="center" visible="false">
+			<view name="_micButton" width="40" height="40" resource="mic_rsc" showhandcursor="true">
+				<labelTooltip name="_toolTipTextExclusiveAudio" labelid="1386" />
+			</view>
+		</view>
+
+		<method name="allowedExclusiveAudio">
+		<![CDATA[
+			return (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio)
+					&& this.clientVars.avsettings.indexOf('a') > -1;
+		]]>
+		</method>
+
+		<handler name="onmouseover">
+		<![CDATA[
+			if (this.isInterview || this.minimized) {
+				return;
+			}
+			if (allowedExclusiveAudio()) {
+				this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.doonmouseover();
+				this._giveExclusiveAudioView.setAttribute("visible", true);
+			}
+		]]>
+		</handler>
+
+		<handler name="onmouseout">
+		<![CDATA[
+			if (this.isInterview || this.minimized) {
+				return;
+			}
+			if (allowedExclusiveAudio()) {
+				this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
+				this._giveExclusiveAudioView.setAttribute("visible", false);
+			}
+		]]>
+		</handler>
+
+		<handler name="onclick">
+		<![CDATA[
+			if (allowedExclusiveAudio()) {
+				this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
+				this.confirmExclusiveAudio();
+			}
+		]]>
+		</handler>
+
+		<dragstate name="dragger" />
+		<resizestatemin name="rs" resize_min_width="70" resize_min_height="70" />
+		<dragHelper name="dragHelper" />
+
+		<animator name="_minimizeZoom" attribute="height" duration="750" to="20" started="false">
+			<handler name="onstop" args="s">
+				parent.reminimizeComplete();
+			</handler>
+		</animator>
+
+		<handler name="onismoderator" reference="canvas" args="m">
+		<![CDATA[
+			if ($debug) Debug.write("###### ismoderator ", m);
+			
+			if (this.minimized) {
+				this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
+				this._loudness.bringToFront();
+			}
+		]]>
+		</handler>
+
+		<method name="confirmExclusiveAudio">
+			var so:SharedObject = SharedObject.getLocal('userdata');
+			var userData = so.data;
+			var dontShowExclusiveAudioConfirmation = userData["dontShowExclusiveAudioConfirmation"];
+			var exclusiveAudioListener = new Object();
+			exclusiveAudioListener.sendNoConfirmation = function(none) {};
+			exclusiveAudioListener.sendConfirmation = function(answer, remember) {
+					if (answer) {
+						canvas.thishib.giveExclusiveAudio(this.publicSID);
+						if (remember) {
+							userData["dontShowExclusiveAudioConfirmation"] = true;
+							so.flush();
+						}
+					}
+				};
+			if (dontShowExclusiveAudioConfirmation == true) {
+				exclusiveAudioListener.sendConfirmation(true, true);
+			} else {
+				new lz.confirmationSingle(canvas,{
+					labelid:1428,
+					labeliderror:1539,
+					refObj:exclusiveAudioListener,
+					showCheckBox:true});
+			}
+		</method>
+
+		<!-- This will mute the Microphone only to the person that is speaking if the gain is set to zero NOBODY will hear 'em -->
+		<method name="muteMicrophone" args="roomClientObj">
+		<![CDATA[
+			if ($debug) Debug.write("############ muteMicrophone ", roomClientObj.micMuted, roomClientObj.publicSID, this.publicSID);
+			
+			if (roomClientObj.publicSID == this.publicSID) {
+				if ($debug) Debug.write("Set Mute for Client :: ", roomClientObj);
+				if ($debug) Debug.write("############ SET GAIN " + roomClientObj.micMuted);
+				this._chatvideoinner._videostream.muteMicro(roomClientObj.micMuted);
+				this.isMutedByModerator = roomClientObj.micMuted;
+				this.setMicMuted(roomClientObj.micMuted);
+			}
+		]]>
+		</method>
+
+		<!-- This will mute it only locally, that means on other screens the user might be still online and loud -->
+		<method name="silenceMicrophone" args="mute">
+		<![CDATA[
+			if ($debug) Debug.write("############ silenceMicrophone ", this.publicSID);
+			if (this.publicSID == canvas.publicSID) {
+				//self sound turned off
+				canvas.thishib.switchMicMuted.publicSID = this.publicSID;
+				canvas.thishib.switchMicMuted.mute = mute; 
+				canvas.thishib.switchMicMuted.doCall();
+				if (!mute) {
+					this._chatvideoinner._videostream.muteMicro(false);
+				}
+			} else {
+				//disable this action for now
+				if (!canvas.ismoderator) {
+					new lz.labelerrorPopup(canvas,{errorlabelid:1409});
+					return;
+				}
+				//you can not unmute it locally by putting sound to 100 cause the gain is set to zero globally in the micro of the sender!
+				//so setting the sound/volume on the other remote clients has zero effect
+				if (this.isMutedByModerator && !canvas.ismoderator) {
+					//FIXME: That is not true, you could restart audio/video ...
+					var errorlabelid = this.publicSID == canvas.publicSID ? 1387 : 1402;
+					new lz.labelerrorPopup(canvas,{errorlabelid:errorlabelid});
+					return;
+				}
+				if (canvas.ismoderator) {
+					canvas.thishib.switchMicMuted.publicSID = this.publicSID;
+					canvas.thishib.switchMicMuted.mute = mute; 
+					canvas.thishib.switchMicMuted.doCall();
+				} else {
+					this._chatvideoinner._videostream.setSoundVolume(mute ? 0 : 100);
+				}
+			}
+			this.setMicMuted(mute);
+		]]>
+		</method>
+
+		<method name="setMicMuted" args="micMuted">
+		<![CDATA[
+			this.micMuted = micMuted;
+			this._toolbar._mute._tip.setAttribute("labelid", micMuted ? "1406" : "1405");
+			this._toolbar._mute._itemRsc.setAttribute('frame', micMuted ? 2 : 1);
+			if (isMicrophonesRoom) {
+				var label = canvas.getLabelName(micMuted ? 1435 : 1434);
+				var color = micMuted ? canvas.getThemeColor('basebgcolorizer') : "0xFF6600";
+				this._innertop.setAttribute('bgcolor', color);
+				this._innerbottom.setAttribute('bgcolor', color);
+				this._innerbottom.title.setAttribute('text', label);
+			}
+		]]>
+		</method>
+
+		<method name="setStreamVolume" args="v">
+			if ($debug) Debug.write("############ setStreamVolume ", v, this.publicSID);
+			var stream = this._chatvideoinner._videostream;
+			if (this.isremote) {
+				stream.setSoundVolume(v);
+			} else {
+				stream.setAttribute('micGain', v);
+				stream.micro.gain = v;
+				if (0 == v) {
+					this.setMicMuted(true);
+					canvas.thishib.switchMicMuted.publicSID = this.publicSID;
+					canvas.thishib.switchMicMuted.mute = true; 
+					canvas.thishib.switchMicMuted.doCall();
+				} else if (micMuted) {
+					this.silenceMicrophone(false);
+				}
+			}
+		</method>
+
+		<method name="getStreamVolume">
+			var stream = this._chatvideoinner._videostream;
+			return this.isremote ? Number(stream._ns.soundTransform.volume * 100) : stream.micro.gain;
+		</method>
+
+		<handler name="onheight" args="value">
+			if (null == initRatio || !respectRatio) {
+				return;
+			}
+			var videoHeight = value - this.videoInsetY - this.bottomBarHeight;
+			var expectedVideoWidth = videoHeight * initRatio;
+			var expectedPodWidth = expectedVideoWidth + this.videoInsetX;
+			if (this.width != expectedPodWidth) {
+				this.setAttribute("width", expectedPodWidth);
+			}
+		</handler>
+
+		<handler name="onwidth" args="value">
+			if (null == initRatio || !respectRatio) {
+				return;
+			}
+			var videoWidth = value - this.videoInsetX;
+			var expectedVideoHeight = videoWidth / initRatio;
+			var expectedPodHeight = expectedVideoHeight + this.videoInsetY + this.bottomBarHeight;
+			if (this.height != expectedPodHeight) {
+				this.setAttribute("height", expectedPodHeight);
+			}
+		</handler>
+	</class>
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx b/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
index 2ef2c35..875489d 100644
--- a/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
+++ b/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
@@ -1,499 +1,499 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<!-- #######################
-	Class editRecordStream
-
-	Description:
-	This Class shows a window where you can alter you Video-/Microphone- Input-Resources
-	and start to stream. The app could also use the default values for Cam/Mic but
-	most users don't know how to alter this (weather in System-Control-Panel or by Right Clicking
-	on the Flash-Screen and *>Preferences>Camera* )
-	So I think it is better if Users are forced to choose something from this list
-
- -->
-
-<class name="editRecordStreamSWF10" extends="labelExplorerBox" labelid="51"
-		width="680" height="540" x="14" y="-540" >
-	<switch>
-		<when property="$as3">
-			<passthrough>
-				import flash.events.StatusEvent;
-				import flash.media.Camera;
-				import flash.media.Microphone;
-			</passthrough>
-		</when>
-	</switch>
-
-	<attribute name="initY" value="40" type="number" />
-
-	<!---
-		if true the user will see the dialog no matter if he has choosen "do not show again" or not
-	 -->
-	<attribute name="doDefaultAnimation" value="true" type="boolean" />
-	<attribute name="cam_default_width" value="320" type="number" />
-	<attribute name="cam_default_height" value="260" type="number" />
-	<attribute name="lastRecorded" value="" type="string" />
-	<attribute name="isRunning" value="false" type="boolean" />
-	<attribute name="recordingsCounter" value="5" type="number" />
-	<attribute name="timerIsRunning" value="false" type="boolean" />
-	<attribute name="counterDelegate" value="null" />
-	<attribute name="executeAttachCamera" value="false" type="boolean" />
-
-	<method name="startTimer">
-		this.timerIsRunning = true;
-		this.timerWasUnmutedTheFirstTime = true;
-		lz.Timer.addTimer( this.counterDelegate, 1000 );
-	</method>
-
-	<method name="count" args="calleeObj">
-		if (this.recordingsCounter != 0){
-			this.recordingsCounter -= 1;
-			lz.Timer.resetTimer(this.counterDelegate, 1000);
-
-			this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");
-		} else {
-			this._text.setAttribute("visibility","hidden");
-			this.doStop();
-			this.timerIsRunning = false;
-			lz.Timer.removeTimer(this.counterDelegate);
-			this.doPlay();
-		}
-	</method>
-
-	<method name="startTimerToCount">
-		if (!this.timerIsRunning) {
-			this.startTimer();
-		}
-	</method>
-
-	<handler name="oninit">
-	<![CDATA[
-		if (canvas.editRecordStream != null) {
-			canvas.editRecordStream.destroy();
-		}
-		canvas.editRecordStream = this;
-
-		this.counterDelegate = new LzDelegate(this, "count");
-
-		if ($debug) Debug.write("editrecordstream ###################### ");
-
-		initItems();
-		if (this.doDefaultAnimation && !canvas.isInterview) {
-			this._chooseDeviceAnimation.setAttribute('started', true);
-		} else {
-			this.setAttribute("y", initY);
-		}
-		this.executeAttachCamera = true;
-		this.attachCamera();
-	]]>
-	</handler>
-
-	<handler name="ondestroy">
-	<![CDATA[
-		if ($debug) Debug.write("editrecordstream::ondestroy ");
-		cleanVideos();
-		canvas.editRecordStream = null;
-	]]>
-	</handler>
-
-	<method name="storeAVsettings">
-		canvas.commonVideoViewContent.storeAVsettings(
-				this.availableCams.getValue()
-				, this.availableMics.getValue()
-				, this.cam_default_width
-				, this.cam_default_height
-			);
-	</method>
-
-	<method name="doStartRecording">
-	<![CDATA[
-		this._btnStartRecording.setAttribute("enabled",false);
-		this._play.setAttribute("enabled",false);
-		this.recordingsCounter = 5;
-		this._text.setAttribute("visibility","visible");
-		this._text._info.setAttribute("text","5 sec");
-		this.isRunning = true;
-
-		var videoview = this._video.content._publisher._chatvideoinner._videostream;
-		var _micro = canvas.commonVideoViewContent.getMic(this.availableMics.getValue());
-		var _camera = canvas.commonVideoViewContent.getCam(this.availableCams.getValue(), cam_default_width, cam_default_height);
-		if ($debug) Debug.write(_camera, _micro);
-
-		if ($debug && _camera != null) Debug.warn("_camera.muted ", _camera.muted);
-		if ($debug && _micro != null) Debug.warn("_micro.muted ", _micro.muted);
-		if ((_camera != null && !_camera.muted) || (_micro != null && !_micro.muted)) {
-			this.startTimer();
-		}
-
-		//start recording of client stream
-		var t = new Date();
-		this.lastRecorded = "TEST_SETUP_"+t.getTime();
-		this._video.content._publisher.setAttribute("visibility","visible");
-		this._video.content._viewer.setAttribute("visibility","hidden");
-		videoview.record(this.lastRecorded,_camera,_micro);
-	]]>
-	</method>
-
-	<method name="doPlay">
-	<![CDATA[
-		if (this.lastRecorded == "") {
-			//Error - nothing recorded yet
-			if ($debug) Debug.warn("Nothing to Play");
-		} else {
-			this._play.setAttribute("enabled",true);
-			this._video.content._publisher.setAttribute("visibility","hidden");
-			this._video.content._viewer.setAttribute("visibility","visible");
-			var videoview = this._video.content._viewer._chatvideoinner._videostream;
-			videoview.justPlayStream(this.lastRecorded+".flv",0);
-		}
-	]]>
-	</method>
-
-	<method name="doStop">
-		if (this.isRunning) {
-			this.isRunning = false;
-			var videoview = this._video.content._publisher._chatvideoinner._videostream;
-			this._btnStartRecording.setAttribute("enabled",true);
-			videoview._stop();
-			this.doPlay();
-		}
-		var videoviewViewer = this._video.content._viewer._chatvideoinner._videostream;
-		videoviewViewer._stop();
-	</method>
-
-	<animator name="_chooseDeviceAnimation" started="false" attribute="y" to="40" duration="750" />
-
-	<labelText fontstyle="bold" labelid="758" width="${ parent.width-2 }" height="30" multiline="true" y="20" />
-
-	<method name="fillDeviceList" args="list,combo,prop">
-	<![CDATA[
-		//Initialize and get eventually stored property
-		var dev = canvas.commonVideoViewContent.getAvSetting(prop);
-		if ($debug) Debug.write("fillDeviceList:: ", prop, dev);
-
-		//Get all availible devices
-		var foundStoredDev = null;
-		combo.addItem(canvas.getLabelName(159), -1);
-		if ("-1" == dev) {
-			foundStoredDev = "-1";
-		}
-		for (var eg = 0; eg < list.length; ++eg) {
-			combo.addItem(list[eg], eg);
-			var r = "" + eg;
-			if (r == dev) {
-				foundStoredDev = r;
-			}
-		}
-		return foundStoredDev;
-	]]>
-	</method>
-
-	<method name="selectListItem" args="combo, selected, select">
-		if (selected != null) {
-			combo.selectItem(selected);
-		} else {
-			combo.selectItemAt(select ? 1 : 0);
-		}
-	</method>
-
-	<!--
-		Initialize the default settings for cam and resolution and attach the camera
-		after we have made sure the values are there one time
-	 -->
-	<method name="initItems">
-	<![CDATA[
-		//fill list of Cameras
-		var cameras = Camera.names;
-		var foundStoredCam = fillDeviceList(cameras, availableCams, "cam");
-		selectListItem(availableCams, foundStoredCam, cameras.length > 0);
-
-		//fill list of Mics
-		var mics = Microphone.names;
-		var foundStoredMic = fillDeviceList(mics, availableMics, "mic");
-		selectListItem(availableMics, foundStoredMic, mics.length > 0);
-
-		// settings
-		var addCams = !canvas.currentRoomObj.audioOnly && cameras.length > 0;
-		var addMics = mics.length > 0;
-	]]>
-	</method>
-
-	<method name="attachCamera">
-	<![CDATA[
-		//Don't execute before combobox items are not initialized
-		if (!this.executeAttachCamera) {
-			if ($debug) Debug.write("Return, executeAttachCamera is false");
-			return;
-		}
-
-		if (_video == undefined)  {
-			if ($debug) Debug.write("Return, video not yet ready");
-			return;
-		}
-		_video.content._publisher.setAttribute("visible", true);
-		_video.content._viewer.setAttribute("visible", false);
-		var videoview = this._video.content._publisher._chatvideoinner._videostream;
-		//stop will not call clear as there is no NetStream
-		videoview._stop();
-		videoview.clear();
-		var _camera = canvas.commonVideoViewContent.getCam(availableCams.getValue(), cam_default_width, cam_default_height);
-		if (_camera != null) {
-			videoview.attachCamera(_camera);
-		}
-	]]>
-	</method>
-
-	<method name="cleanVideos">
-		if (_video == undefined) return;
-		//make sure stop and clear is called, as the _stop method does not work for all
-		//videoviews in the device settings.
-		_video.content._publisher._chatvideoinner._videostream._stop();
-		_video.content._viewer._chatvideoinner._videostream._stop();
-		_video.content._publisher._chatvideoinner._videostream.clear();
-		_video.content._viewer._chatvideoinner._videostream.clear();
-		if ($debug) Debug.write("Cleaned up videos and free resources");
-	</method>
-
-	<method name="updateVisibility">
-	<![CDATA[
-		var camVisible = availableCams.getValue() > -1;
-		var micVisible = availableMics.getValue() > -1;
-		var textVisible = !camVisible && !micVisible;
-		this._btnStartRecording.setAttribute("visible", camVisible || micVisible);
-		this._video.setAttribute("visible", camVisible);
-		this._play.setAttribute("visible", camVisible || micVisible);
-		this._level_meter.setAttribute("visible", micVisible);
-		this.infoTextNoAV.setAttribute("visible", textVisible);
-		this.availibleResolutionsLabel.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
-		this.availibleResolutionsWarning.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
-		this.availibleResolutions.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
-	]]>
-	</method>
-
-	<labelText name="availableCamsLabel" labelid="52" fontsize="11" x="10" y="80" width="$once{ parent.width-20 }" />
-	<resetCombobox fontsize="11" name="availableCams" x="10" y="100" width="280" editable="false">
-		<handler name="onselect">
-			parent.updateVisibility();
-			parent.attachCamera();
-		</handler>
-	</resetCombobox>
-
-	<labelText name="availableMicsLabel" labelid="53" fontsize="11" x="10" y="120" width="$once{ parent.width-20 }" />
-	<resetCombobox fontsize="11" name="availableMics"  x="10" y="140" width="280" editable="false">
-		<handler name="onselect">
-			parent.updateVisibility();
-		</handler>
-	</resetCombobox>
-
-	<labelText name="infoTextNoAV" labelid="452" multiline="true" width="280"
-			fontsize="11" x="10" y="164" visibility="hidden" />
-
-	<labelText name="availibleResolutionsLabel" labelid="1429"
-			fontsize="11" x="10" y="164" width="$once{ parent.width-20 }" />
-
-	<view name="availibleResolutionsWarning" x="272" y="164"
-			resource="warning_icon_popup_devices_rsc" clickable="true">
-		<labelTooltip multiline="true" labelid="1430" />
-	</view>
-
-	<resetCombobox fontsize="11" name="availibleResolutions" x="10" shownitems="10"
-			y="184" width="280" editable="false">
-		<!--- @keywords private -->
-		<attribute name="counter" value="0" />
-		<handler name="oninit">
-		<![CDATA[
-			var i = getItemAt(0);
-			if ($debug) Debug.write("oninit ", this.selected, this, i);
-			if (!this.selected && !!i) {
-				selectItemAt(0);
-				onselect.sendEvent(i);
-			}
-		]]>
-		</handler>
-		<handler name="onselect" args="item">
-		<![CDATA[
-			if (!canvas.isInterview) {
-				if ($debug) Debug.write("availibleResolutions::onselect cam [W x H] ", item.cam_width, item.cam_height);
-				parent.setAttribute("cam_default_width", item.cam_width);
-				parent.setAttribute("cam_default_height", item.cam_height);
-
-				var py = parent.y < 0 ? 5 : parent.y;
-				var maxWidth = Math.min(600, canvas.width - parent.x - 10)
-					, maxHeight = Math.min(500, canvas.height - py - 10)
-					, newWidth = maxWidth, newHeight = maxHeight;
-				if (item.cam_width > 240) {
-					newWidth = maxWidth + item.cam_width - 240;
-				}
-				if (item.cam_height > 180) {
-					newHeight = maxHeight + item.cam_height - 180;
-				}
-
-				if (newWidth + parent.x + 10 > canvas.width) {
-					newWidth = maxWidth;
-				}
-				if (newHeight + py + 10 > canvas.height) {
-					newHeight = maxHeight;
-				}
-				parent.setAttribute("width", newWidth);
-				parent.setAttribute("height", newHeight);
-			}
-			parent.attachCamera();
-		]]>
-		</handler>
-		<textlistitem datapath="myConfigSet:/config/availableCameraResolutions/resolution" >
-			<attribute name="cam_width" value="320" type="number" />
-			<attribute name="cam_height" value="240" type="number" />
-			<handler name="ondata">
-			<![CDATA[
-				//if ($debug) Debug.write("ondata ", this);
-				var type = this.datapath.xpathQuery('@type');
-				this.cam_width = Number(this.datapath.xpathQuery('@width'));
-				this.cam_height = Number(this.datapath.xpathQuery('@height'));
-				this.setAttribute("text", "" + this.cam_width + "x" + this.cam_height + " [" + type + "]");
-				var isDefault = this.datapath.xpathQuery('@isDefault') == "true";
-
-				var width = canvas.commonVideoViewContent.getAvSetting("width");
-				var height = canvas.commonVideoViewContent.getAvSetting("height");
-				if (!!width && !!height && width == this.cam_width && height == this.cam_height) {
-					parent.selectItemAt(parent.counter);
-					parent.onselect.sendEvent(this);
-					parent.selected = this;
-				} else if (isDefault) {
-					if ($debug) Debug.write("Found default one ", type);
-					parent.selectItemAt(parent.counter);
-					parent.onselect.sendEvent(this);
-				}
-				parent.counter++;
-			]]>
-			</handler>
-		</textlistitem>
-	</resetCombobox>
-
-	<simpleLabelButton name="_btnStartRecording" labelid="775" width="140" x="150" y="220" height="28">
-		<handler name="onclick">
-			parent._level_meter.startLevel();
-			parent.doStartRecording();
-		</handler>
-	</simpleLabelButton>
-
-	<view x="340" y="60" name="_video" clip="true"
-			width="${ parent.width-this.x-10 }" height="${ parent.height-260 }">
-		<view name="content">
-			<videoObjectTestBroadcast name="_publisher"
-					width="${ parent.parent.parent.cam_default_width }"
-					height="${ parent.parent.parent.cam_default_height }">
-				<handler name="sendCameraStatus" args="camStatus">
-					if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);
-					if (camStatus == "Camera.Unmuted") {
-						parent.parent.parent.startTimerToCount();
-					}
-				</handler>
-
-				<handler name="sendMicroStatus" args="micStatus">
-					if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);
-					if (micStatus == "Microphone.Unmuted") {
-						parent.parent.parent.startTimerToCount();
-					}
-				</handler>
-			</videoObjectTestBroadcast>
-
-			<videoObjectPlayTestBroadcast name="_viewer" visibility="hidden"
-					width="${ parent.parent.parent.cam_default_width }"
-					height="${ parent.parent.parent.cam_default_height }" />
-		</view>
-
-		<om_vscrollbar />
-		<om_hscrollbar />
-	</view>
-
-	<view name="_text" x="340" y="60" width="240" height="180" visibility="hidden">
-		<text name="_info" resize="true" bgcolor="0xFFFFFF" align="right" fontsize="12" fontstyle="bold" />
-	</view>
-
-	<simpleLabelButton name="_play" y="${ parent.height-166 }" x="490" enabled="false" width="90" labelid="764">
-		<handler name="onclick">
-			parent.doPlay();
-		</handler>
-	</simpleLabelButton>
-
-	<view name="_level_meter" x="340" y="${ parent.height-190 }" width="240" height="20" clip="true" bgcolor="0x000000">
-		 <!--- Level delegate, used to track level changes.
-			@keywords private -->
-		<attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>
-
-		<method name="_updateLevel" args="no">
-			<![CDATA[
-				if (parent._video.content._publisher._chatvideoinner._videostream.micro == null) {
-					return;
-				}
-				this.setNewLevel(parent._video.content._publisher._chatvideoinner._videostream.micro.activityLevel);
-			]]>
-		</method>
-
-		<method name="startLevel">
-			this._leveldel.register(lz.Idle, "onidle");
-		</method>
-
-		<method name="resetNewLevel">
-			this._leveldel.unregisterAll();
-			this.setNewLevel(0);
-		</method>
-
-		<method name="setNewLevel" args="no">
-		<![CDATA[
-			var newLevel = (238 / 100) * no;
-			this._over.setAttribute("width", 238 - newLevel);
-			this._over.setAttribute("x", 1 + newLevel);
-		]]>
-		</method>
-
-		<view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
-		<view name="_grip" resource="level_meter_rsc" x="1" y="1" />
-		<view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
-		<labelText labelid="767" x="2" y="2" height="16" width="236" resize="false" />
-	</view>
-
-	<view y="${ parent.height-98 }" resource="test_setup_info_rsc" x="16" />
-
-	<labelText fontstyle="bold" labelid="765" x="39" y="${ parent.height-100 }"
-			width="${ parent.width-50 }" multiline="true" />
-
-	<simpleLabelButton fontsize="11" labelid="918" x="${ parent.width-220 }" y="${ parent.height-50 }"
-			height="28" width="100">
-		<handler name="onclick">
-			parent.cleanVideos();
-			parent.close();
-		</handler>
-	</simpleLabelButton>
-
-	<simpleLabelButton fontsize="11" labelid="144" x="${ parent.width-110 }" y="${ parent.height-50 }"
-			height="28" width="100" >
-		<handler name="onclick">
-			parent.cleanVideos();
-			parent.storeAVsettings();
-			parent.close();
-		</handler>
-	</simpleLabelButton>
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<!-- #######################
+	Class editRecordStream
+
+	Description:
+	This Class shows a window where you can alter you Video-/Microphone- Input-Resources
+	and start to stream. The app could also use the default values for Cam/Mic but
+	most users don't know how to alter this (weather in System-Control-Panel or by Right Clicking
+	on the Flash-Screen and *>Preferences>Camera* )
+	So I think it is better if Users are forced to choose something from this list
+
+ -->
+
+<class name="editRecordStreamSWF10" extends="labelExplorerBox" labelid="51"
+		width="680" height="540" x="14" y="-540" >
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.events.StatusEvent;
+				import flash.media.Camera;
+				import flash.media.Microphone;
+			</passthrough>
+		</when>
+	</switch>
+
+	<attribute name="initY" value="40" type="number" />
+
+	<!---
+		if true the user will see the dialog no matter if he has choosen "do not show again" or not
+	 -->
+	<attribute name="doDefaultAnimation" value="true" type="boolean" />
+	<attribute name="cam_default_width" value="320" type="number" />
+	<attribute name="cam_default_height" value="260" type="number" />
+	<attribute name="lastRecorded" value="" type="string" />
+	<attribute name="isRunning" value="false" type="boolean" />
+	<attribute name="recordingsCounter" value="5" type="number" />
+	<attribute name="timerIsRunning" value="false" type="boolean" />
+	<attribute name="counterDelegate" value="null" />
+	<attribute name="executeAttachCamera" value="false" type="boolean" />
+
+	<method name="startTimer">
+		this.timerIsRunning = true;
+		this.timerWasUnmutedTheFirstTime = true;
+		lz.Timer.addTimer( this.counterDelegate, 1000 );
+	</method>
+
+	<method name="count" args="calleeObj">
+		if (this.recordingsCounter != 0){
+			this.recordingsCounter -= 1;
+			lz.Timer.resetTimer(this.counterDelegate, 1000);
+
+			this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");
+		} else {
+			this._text.setAttribute("visibility","hidden");
+			this.doStop();
+			this.timerIsRunning = false;
+			lz.Timer.removeTimer(this.counterDelegate);
+			this.doPlay();
+		}
+	</method>
+
+	<method name="startTimerToCount">
+		if (!this.timerIsRunning) {
+			this.startTimer();
+		}
+	</method>
+
+	<handler name="oninit">
+	<![CDATA[
+		if (canvas.editRecordStream != null) {
+			canvas.editRecordStream.destroy();
+		}
+		canvas.editRecordStream = this;
+
+		this.counterDelegate = new LzDelegate(this, "count");
+
+		if ($debug) Debug.write("editrecordstream ###################### ");
+
+		initItems();
+		if (this.doDefaultAnimation && !canvas.isInterview) {
+			this._chooseDeviceAnimation.setAttribute('started', true);
+		} else {
+			this.setAttribute("y", initY);
+		}
+		this.executeAttachCamera = true;
+		this.attachCamera();
+	]]>
+	</handler>
+
+	<handler name="ondestroy">
+	<![CDATA[
+		if ($debug) Debug.write("editrecordstream::ondestroy ");
+		cleanVideos();
+		canvas.editRecordStream = null;
+	]]>
+	</handler>
+
+	<method name="storeAVsettings">
+		canvas.commonVideoViewContent.storeAVsettings(
+				this.availableCams.getValue()
+				, this.availableMics.getValue()
+				, this.cam_default_width
+				, this.cam_default_height
+			);
+	</method>
+
+	<method name="doStartRecording">
+	<![CDATA[
+		this._btnStartRecording.setAttribute("enabled",false);
+		this._play.setAttribute("enabled",false);
+		this.recordingsCounter = 5;
+		this._text.setAttribute("visibility","visible");
+		this._text._info.setAttribute("text","5 sec");
+		this.isRunning = true;
+
+		var videoview = this._video.content._publisher._chatvideoinner._videostream;
+		var _micro = canvas.commonVideoViewContent.getMic(this.availableMics.getValue());
+		var _camera = canvas.commonVideoViewContent.getCam(this.availableCams.getValue(), cam_default_width, cam_default_height);
+		if ($debug) Debug.write(_camera, _micro);
+
+		if ($debug && _camera != null) Debug.warn("_camera.muted ", _camera.muted);
+		if ($debug && _micro != null) Debug.warn("_micro.muted ", _micro.muted);
+		if ((_camera != null && !_camera.muted) || (_micro != null && !_micro.muted)) {
+			this.startTimer();
+		}
+
+		//start recording of client stream
+		var t = new Date();
+		this.lastRecorded = "TEST_SETUP_"+t.getTime();
+		this._video.content._publisher.setAttribute("visibility","visible");
+		this._video.content._viewer.setAttribute("visibility","hidden");
+		videoview.record(this.lastRecorded,_camera,_micro);
+	]]>
+	</method>
+
+	<method name="doPlay">
+	<![CDATA[
+		if (this.lastRecorded == "") {
+			//Error - nothing recorded yet
+			if ($debug) Debug.warn("Nothing to Play");
+		} else {
+			this._play.setAttribute("enabled",true);
+			this._video.content._publisher.setAttribute("visibility","hidden");
+			this._video.content._viewer.setAttribute("visibility","visible");
+			var videoview = this._video.content._viewer._chatvideoinner._videostream;
+			videoview.justPlayStream(this.lastRecorded+".flv",0);
+		}
+	]]>
+	</method>
+
+	<method name="doStop">
+		if (this.isRunning) {
+			this.isRunning = false;
+			var videoview = this._video.content._publisher._chatvideoinner._videostream;
+			this._btnStartRecording.setAttribute("enabled",true);
+			videoview._stop();
+			this.doPlay();
+		}
+		var videoviewViewer = this._video.content._viewer._chatvideoinner._videostream;
+		videoviewViewer._stop();
+	</method>
+
+	<animator name="_chooseDeviceAnimation" started="false" attribute="y" to="40" duration="750" />
+
+	<labelText fontstyle="bold" labelid="758" width="${ parent.width-2 }" height="30" multiline="true" y="20" />
+
+	<method name="fillDeviceList" args="list,combo,prop">
+	<![CDATA[
+		//Initialize and get eventually stored property
+		var dev = canvas.commonVideoViewContent.getAvSetting(prop);
+		if ($debug) Debug.write("fillDeviceList:: ", prop, dev);
+
+		//Get all availible devices
+		var foundStoredDev = null;
+		combo.addItem(canvas.getLabelName(159), -1);
+		if ("-1" == dev) {
+			foundStoredDev = "-1";
+		}
+		for (var eg = 0; eg < list.length; ++eg) {
+			combo.addItem(list[eg], eg);
+			var r = "" + eg;
+			if (r == dev) {
+				foundStoredDev = r;
+			}
+		}
+		return foundStoredDev;
+	]]>
+	</method>
+
+	<method name="selectListItem" args="combo, selected, select">
+		if (selected != null) {
+			combo.selectItem(selected);
+		} else {
+			combo.selectItemAt(select ? 1 : 0);
+		}
+	</method>
+
+	<!--
+		Initialize the default settings for cam and resolution and attach the camera
+		after we have made sure the values are there one time
+	 -->
+	<method name="initItems">
+	<![CDATA[
+		//fill list of Cameras
+		var cameras = Camera.names;
+		var foundStoredCam = fillDeviceList(cameras, availableCams, "cam");
+		selectListItem(availableCams, foundStoredCam, cameras.length > 0);
+
+		//fill list of Mics
+		var mics = Microphone.names;
+		var foundStoredMic = fillDeviceList(mics, availableMics, "mic");
+		selectListItem(availableMics, foundStoredMic, mics.length > 0);
+
+		// settings
+		var addCams = !canvas.currentRoomObj.audioOnly && cameras.length > 0;
+		var addMics = mics.length > 0;
+	]]>
+	</method>
+
+	<method name="attachCamera">
+	<![CDATA[
+		//Don't execute before combobox items are not initialized
+		if (!this.executeAttachCamera) {
+			if ($debug) Debug.write("Return, executeAttachCamera is false");
+			return;
+		}
+
+		if (_video == undefined)  {
+			if ($debug) Debug.write("Return, video not yet ready");
+			return;
+		}
+		_video.content._publisher.setAttribute("visible", true);
+		_video.content._viewer.setAttribute("visible", false);
+		var videoview = this._video.content._publisher._chatvideoinner._videostream;
+		//stop will not call clear as there is no NetStream
+		videoview._stop();
+		videoview.clear();
+		var _camera = canvas.commonVideoViewContent.getCam(availableCams.getValue(), cam_default_width, cam_default_height);
+		if (_camera != null) {
+			videoview.attachCamera(_camera);
+		}
+	]]>
+	</method>
+
+	<method name="cleanVideos">
+		if (_video == undefined) return;
+		//make sure stop and clear is called, as the _stop method does not work for all
+		//videoviews in the device settings.
+		_video.content._publisher._chatvideoinner._videostream._stop();
+		_video.content._viewer._chatvideoinner._videostream._stop();
+		_video.content._publisher._chatvideoinner._videostream.clear();
+		_video.content._viewer._chatvideoinner._videostream.clear();
+		if ($debug) Debug.write("Cleaned up videos and free resources");
+	</method>
+
+	<method name="updateVisibility">
+	<![CDATA[
+		var camVisible = availableCams.getValue() > -1;
+		var micVisible = availableMics.getValue() > -1;
+		var textVisible = !camVisible && !micVisible;
+		this._btnStartRecording.setAttribute("visible", camVisible || micVisible);
+		this._video.setAttribute("visible", camVisible);
+		this._play.setAttribute("visible", camVisible || micVisible);
+		this._level_meter.setAttribute("visible", micVisible);
+		this.infoTextNoAV.setAttribute("visible", textVisible);
+		this.availibleResolutionsLabel.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+		this.availibleResolutionsWarning.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+		this.availibleResolutions.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+	]]>
+	</method>
+
+	<labelText name="availableCamsLabel" labelid="52" fontsize="11" x="10" y="80" width="$once{ parent.width-20 }" />
+	<resetCombobox fontsize="11" name="availableCams" x="10" y="100" width="280" editable="false">
+		<handler name="onselect">
+			parent.updateVisibility();
+			parent.attachCamera();
+		</handler>
+	</resetCombobox>
+
+	<labelText name="availableMicsLabel" labelid="53" fontsize="11" x="10" y="120" width="$once{ parent.width-20 }" />
+	<resetCombobox fontsize="11" name="availableMics"  x="10" y="140" width="280" editable="false">
+		<handler name="onselect">
+			parent.updateVisibility();
+		</handler>
+	</resetCombobox>
+
+	<labelText name="infoTextNoAV" labelid="452" multiline="true" width="280"
+			fontsize="11" x="10" y="164" visibility="hidden" />
+
+	<labelText name="availibleResolutionsLabel" labelid="1429"
+			fontsize="11" x="10" y="164" width="$once{ parent.width-20 }" />
+
+	<view name="availibleResolutionsWarning" x="272" y="164"
+			resource="warning_icon_popup_devices_rsc" clickable="true">
+		<labelTooltip multiline="true" labelid="1430" />
+	</view>
+
+	<resetCombobox fontsize="11" name="availibleResolutions" x="10" shownitems="10"
+			y="184" width="280" editable="false">
+		<!--- @keywords private -->
+		<attribute name="counter" value="0" />
+		<handler name="oninit">
+		<![CDATA[
+			var i = getItemAt(0);
+			if ($debug) Debug.write("oninit ", this.selected, this, i);
+			if (!this.selected && !!i) {
+				selectItemAt(0);
+				onselect.sendEvent(i);
+			}
+		]]>
+		</handler>
+		<handler name="onselect" args="item">
+		<![CDATA[
+			if (!canvas.isInterview) {
+				if ($debug) Debug.write("availibleResolutions::onselect cam [W x H] ", item.cam_width, item.cam_height);
+				parent.setAttribute("cam_default_width", item.cam_width);
+				parent.setAttribute("cam_default_height", item.cam_height);
+
+				var py = parent.y < 0 ? 5 : parent.y;
+				var maxWidth = Math.min(600, canvas.width - parent.x - 10)
+					, maxHeight = Math.min(500, canvas.height - py - 10)
+					, newWidth = maxWidth, newHeight = maxHeight;
+				if (item.cam_width > 240) {
+					newWidth = maxWidth + item.cam_width - 240;
+				}
+				if (item.cam_height > 180) {
+					newHeight = maxHeight + item.cam_height - 180;
+				}
+
+				if (newWidth + parent.x + 10 > canvas.width) {
+					newWidth = maxWidth;
+				}
+				if (newHeight + py + 10 > canvas.height) {
+					newHeight = maxHeight;
+				}
+				parent.setAttribute("width", newWidth);
+				parent.setAttribute("height", newHeight);
+			}
+			parent.attachCamera();
+		]]>
+		</handler>
+		<textlistitem datapath="myConfigSet:/config/availableCameraResolutions/resolution" >
+			<attribute name="cam_width" value="320" type="number" />
+			<attribute name="cam_height" value="240" type="number" />
+			<handler name="ondata">
+			<![CDATA[
+				//if ($debug) Debug.write("ondata ", this);
+				var type = this.datapath.xpathQuery('@type');
+				this.cam_width = Number(this.datapath.xpathQuery('@width'));
+				this.cam_height = Number(this.datapath.xpathQuery('@height'));
+				this.setAttribute("text", "" + this.cam_width + "x" + this.cam_height + " [" + type + "]");
+				var isDefault = this.datapath.xpathQuery('@isDefault') == "true";
+
+				var width = canvas.commonVideoViewContent.getAvSetting("width");
+				var height = canvas.commonVideoViewContent.getAvSetting("height");
+				if (!!width && !!height && width == this.cam_width && height == this.cam_height) {
+					parent.selectItemAt(parent.counter);
+					parent.onselect.sendEvent(this);
+					parent.selected = this;
+				} else if (isDefault) {
+					if ($debug) Debug.write("Found default one ", type);
+					parent.selectItemAt(parent.counter);
+					parent.onselect.sendEvent(this);
+				}
+				parent.counter++;
+			]]>
+			</handler>
+		</textlistitem>
+	</resetCombobox>
+
+	<simpleLabelButton name="_btnStartRecording" labelid="775" width="140" x="150" y="220" height="28">
+		<handler name="onclick">
+			parent._level_meter.startLevel();
+			parent.doStartRecording();
+		</handler>
+	</simpleLabelButton>
+
+	<view x="340" y="60" name="_video" clip="true"
+			width="${ parent.width-this.x-10 }" height="${ parent.height-260 }">
+		<view name="content">
+			<videoObjectTestBroadcast name="_publisher"
+					width="${ parent.parent.parent.cam_default_width }"
+					height="${ parent.parent.parent.cam_default_height }">
+				<handler name="sendCameraStatus" args="camStatus">
+					if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);
+					if (camStatus == "Camera.Unmuted") {
+						parent.parent.parent.startTimerToCount();
+					}
+				</handler>
+
+				<handler name="sendMicroStatus" args="micStatus">
+					if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);
+					if (micStatus == "Microphone.Unmuted") {
+						parent.parent.parent.startTimerToCount();
+					}
+				</handler>
+			</videoObjectTestBroadcast>
+
+			<videoObjectPlayTestBroadcast name="_viewer" visibility="hidden"
+					width="${ parent.parent.parent.cam_default_width }"
+					height="${ parent.parent.parent.cam_default_height }" />
+		</view>
+
+		<om_vscrollbar />
+		<om_hscrollbar />
+	</view>
+
+	<view name="_text" x="340" y="60" width="240" height="180" visibility="hidden">
+		<text name="_info" resize="true" bgcolor="0xFFFFFF" align="right" fontsize="12" fontstyle="bold" />
+	</view>
+
+	<simpleLabelButton name="_play" y="${ parent.height-166 }" x="490" enabled="false" width="90" labelid="764">
+		<handler name="onclick">
+			parent.doPlay();
+		</handler>
+	</simpleLabelButton>
+
+	<view name="_level_meter" x="340" y="${ parent.height-190 }" width="240" height="20" clip="true" bgcolor="0x000000">
+		 <!--- Level delegate, used to track level changes.
+			@keywords private -->
+		<attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>
+
+		<method name="_updateLevel" args="no">
+			<![CDATA[
+				if (parent._video.content._publisher._chatvideoinner._videostream.micro == null) {
+					return;
+				}
+				this.setNewLevel(parent._video.content._publisher._chatvideoinner._videostream.micro.activityLevel);
+			]]>
+		</method>
+
+		<method name="startLevel">
+			this._leveldel.register(lz.Idle, "onidle");
+		</method>
+
+		<method name="resetNewLevel">
+			this._leveldel.unregisterAll();
+			this.setNewLevel(0);
+		</method>
+
+		<method name="setNewLevel" args="no">
+		<![CDATA[
+			var newLevel = (238 / 100) * no;
+			this._over.setAttribute("width", 238 - newLevel);
+			this._over.setAttribute("x", 1 + newLevel);
+		]]>
+		</method>
+
+		<view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+		<view name="_grip" resource="level_meter_rsc" x="1" y="1" />
+		<view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+		<labelText labelid="767" x="2" y="2" height="16" width="236" resize="false" />
+	</view>
+
+	<view y="${ parent.height-98 }" resource="test_setup_info_rsc" x="16" />
+
+	<labelText fontstyle="bold" labelid="765" x="39" y="${ parent.height-100 }"
+			width="${ parent.width-50 }" multiline="true" />
+
+	<simpleLabelButton fontsize="11" labelid="918" x="${ parent.width-220 }" y="${ parent.height-50 }"
+			height="28" width="100">
+		<handler name="onclick">
+			parent.cleanVideos();
+			parent.close();
+		</handler>
+	</simpleLabelButton>
+
+	<simpleLabelButton fontsize="11" labelid="144" x="${ parent.width-110 }" y="${ parent.height-50 }"
+			height="28" width="100" >
+		<handler name="onclick">
+			parent.cleanVideos();
+			parent.storeAVsettings();
+			parent.close();
+		</handler>
+	</simpleLabelButton>
+</class>
+
+</library>


[03/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AjaxDownload.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AjaxDownload.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AjaxDownload.java
index c61c7d7..992707d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AjaxDownload.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AjaxDownload.java
@@ -1,128 +1,128 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.util;
-
-import java.util.UUID;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.Page;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.behavior.AbstractAjaxBehavior;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
-import org.apache.wicket.markup.head.PriorityHeaderItem;
-import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
-import org.apache.wicket.request.resource.ContentDisposition;
-import org.apache.wicket.request.resource.JavaScriptResourceReference;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.util.resource.IResourceStream;
-
-/**
- * see: <a href="https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow">
- * https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow</href>
- * 
- */
-public class AjaxDownload extends AbstractAjaxBehavior {
-	private static final long serialVersionUID = 1L;
-	private boolean addAntiCache;
-	private String fileName;
-	private IResourceStream resourceStream;
-	private final String iframeId;
-
-	public AjaxDownload() {
-		this(true);
-	}
-
-	public AjaxDownload(boolean addAntiCache) {
-		super();
-		this.addAntiCache = addAntiCache;
-		iframeId = String.format("download-iframe-%s", UUID.randomUUID().toString());
-	}
-
-	/**
-	 * Call this method to initiate the download.
-	 */
-	public void initiate(AjaxRequestTarget target) {
-		StringBuilder url = new StringBuilder(getCallbackUrl());
-
-		if (addAntiCache) {
-			url.append(url.indexOf("?") > -1 ? "&" : "?")
-				.append("antiCache=").append(System.currentTimeMillis());
-		}
-		target.appendJavaScript(String.format("$('#%s').attr('src', '%s');", iframeId, url.toString()));
-	}
-
-	@Override
-	protected void onBind() {
-		super.onBind();
-		// it is impossible to get page by id anyway
-		if (!(getComponent() instanceof Page)) {
-			getComponent().setOutputMarkupId(true);
-		}
-	}
-
-	private static ResourceReference newResourceReference() {
-		return new JavaScriptResourceReference(AjaxDownload.class, "ajax-download.js");
-	}
-
-	@Override
-	public void renderHead(Component component, IHeaderResponse response) {
-		super.renderHead(component, response);
-		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(newResourceReference())));
-		response.render(OnDomReadyHeaderItem.forScript(String.format("addDwnldIframe('%s', '%s');", component instanceof Page ? "" : component.getMarkupId(), iframeId)));
-	}
-
-	@Override
-	public void onRequest() {
-		ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(getResourceStream(), getFileName());
-		handler.setContentDisposition(getContentDisposition());
-		getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
-	}
-
-	protected ContentDisposition getContentDisposition() {
-		return ContentDisposition.ATTACHMENT;
-	}
-	/**
-	 * Override this method for a file name which will let the browser prompt
-	 * with a save/open dialog.
-	 * 
-	 * @see ResourceStreamRequestTarget#getFileName()
-	 */
-	protected String getFileName() {
-		return this.fileName;
-	}
-
-	public void setFileName(String fileName) {
-		this.fileName = fileName;
-	}
-
-	/**
-	 * Hook method providing the actual resource stream.
-	 */
-	protected IResourceStream getResourceStream() {
-		return resourceStream;
-
-	}
-
-	public void setResourceStream(IResourceStream resourceStream) {
-		this.resourceStream = resourceStream;
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import java.util.UUID;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * see: <a href="https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow">
+ * https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow</href>
+ * 
+ */
+public class AjaxDownload extends AbstractAjaxBehavior {
+	private static final long serialVersionUID = 1L;
+	private boolean addAntiCache;
+	private String fileName;
+	private IResourceStream resourceStream;
+	private final String iframeId;
+
+	public AjaxDownload() {
+		this(true);
+	}
+
+	public AjaxDownload(boolean addAntiCache) {
+		super();
+		this.addAntiCache = addAntiCache;
+		iframeId = String.format("download-iframe-%s", UUID.randomUUID().toString());
+	}
+
+	/**
+	 * Call this method to initiate the download.
+	 */
+	public void initiate(AjaxRequestTarget target) {
+		StringBuilder url = new StringBuilder(getCallbackUrl());
+
+		if (addAntiCache) {
+			url.append(url.indexOf("?") > -1 ? "&" : "?")
+				.append("antiCache=").append(System.currentTimeMillis());
+		}
+		target.appendJavaScript(String.format("$('#%s').attr('src', '%s');", iframeId, url.toString()));
+	}
+
+	@Override
+	protected void onBind() {
+		super.onBind();
+		// it is impossible to get page by id anyway
+		if (!(getComponent() instanceof Page)) {
+			getComponent().setOutputMarkupId(true);
+		}
+	}
+
+	private static ResourceReference newResourceReference() {
+		return new JavaScriptResourceReference(AjaxDownload.class, "ajax-download.js");
+	}
+
+	@Override
+	public void renderHead(Component component, IHeaderResponse response) {
+		super.renderHead(component, response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(newResourceReference())));
+		response.render(OnDomReadyHeaderItem.forScript(String.format("addDwnldIframe('%s', '%s');", component instanceof Page ? "" : component.getMarkupId(), iframeId)));
+	}
+
+	@Override
+	public void onRequest() {
+		ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(getResourceStream(), getFileName());
+		handler.setContentDisposition(getContentDisposition());
+		getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+	}
+
+	protected ContentDisposition getContentDisposition() {
+		return ContentDisposition.ATTACHMENT;
+	}
+	/**
+	 * Override this method for a file name which will let the browser prompt
+	 * with a save/open dialog.
+	 * 
+	 * @see ResourceStreamRequestTarget#getFileName()
+	 */
+	protected String getFileName() {
+		return this.fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	/**
+	 * Hook method providing the actual resource stream.
+	 */
+	protected IResourceStream getResourceStream() {
+		return resourceStream;
+
+	}
+
+	public void setResourceStream(IResourceStream resourceStream) {
+		this.resourceStream = resourceStream;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/webapp/conf/om_ldap.cfg
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/conf/om_ldap.cfg b/openmeetings-web/src/main/webapp/conf/om_ldap.cfg
index 4415d8f..e65436c 100644
--- a/openmeetings-web/src/main/webapp/conf/om_ldap.cfg
+++ b/openmeetings-web/src/main/webapp/conf/om_ldap.cfg
@@ -1,109 +1,109 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-# 
-#     http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# 
-#ConfigurationFile for LDAP Auth
-#ConfigKey 'ldap_config_path' must be set in DataBase Configration of OM and point to this file
-#o.becherer,14.01.2009
-
-#LDAP URL
-# This is the URL used to access your LDAP server.
-# if you want to use "ldaps://" links, please be aware that you need to import your CA certificate
-#  to a java keystore and add the -Djavax.net.ssl.keyStore, -Djavax.net.ssl.keyStorePassword,
-#  -Djavax.net.ssl.trustStore and -Djavax.net.ssl.trustStorePassword parameters to your 
-#  JAVA_OPT environment
-ldap_conn_host=dc2.medint.local
-ldap_conn_port=389
-ldap_conn_secure=false
-
-# Login distinguished name (DN) for Authentication on LDAP Server - keep empty if not required
-# Use full qualified LDAP DN
-ldap_admin_dn=CN=dummy,OU=Company,DC=medint,DC=local
-
-# Loginpass for Authentication on LDAP Server - keep empty if not required
-ldap_passwd=dummy07
-
-# base to search for userdata(of user, that wants to login)
-ldap_search_base=OU=Company,DC=medint,DC=local
-
-# Fieldnames (can differ between Ldap servers) 
-ldap_search_query=(uid=%s)
-
-# the scope of the search might be: OBJECT, ONELEVEL, SUBTREE
-ldap_search_scope=ONELEVEL
-
-# Ldap auth type(NONE, SEARCHANDBIND, SIMPLEBIND)
-#  When using SIMPLEBIND a simple bind is performed on the LDAP server to check user authentication
-#  When using NONE, the Ldap server is not used for authentication
-ldap_auth_type=SIMPLEBIND
-
-# userDN format, will be used to bind if ldap_auth_type=SIMPLEBIND
-# might be used to get provisionningDn in case ldap_auth_type=NONE
-ldap_userdn_format=uid=%s,OU=Company,DC=medint,DC=local
-
-# Ldap provisioning type(NONE, AUTOCREATE, AUTOUPDATE)
-ldap_provisionning=AUTOCREATE
-
-# Ldap deref mode (never, searching, finding, always)
-ldap_deref_mode=always
-
-#  Set this to 'true' if you want to use admin_dn to get user attributes
-#  If any other value is set, user_dn will be used
-ldap_use_admin_to_get_attrs=true
-
-# Ldap-password synchronization to OM DB
-#  Set this to 'true' if you want OM to synchronize the user Ldap-password to OM's internal DB
-#  If you want to disable the feature, set this to any other string.
-#  Defautl value is 'true'
-ldap_sync_password_to_om=true
-
-# Ldap group mode (NONE, ATTRIBUTE, QUERY)
-# NONE means group associations will be ignored
-# ATTRIBUTE means group associations will be taken from 'ldap_group_attr' attribute (M$ AD mode)
-# QUERY means group associations will be taken as a result of 'ldap_group_query' query
-ldap_group_mode=NONE
-
-ldap_group_query=(&(memberUid=%s)(objectClass=posixGroup))
-
-# Ldap user attributes mapping
-# Set the following internal OM user attributes to their corresponding Ldap-attribute
-ldap_user_attr_login=uid
-ldap_user_attr_lastname=sn
-ldap_user_attr_firstname=givenName
-ldap_user_attr_mail=mail
-ldap_user_attr_street=streetAddress
-ldap_user_attr_additionalname=description
-ldap_user_attr_fax=facsimileTelephoneNumber
-ldap_user_attr_zip=postalCode
-ldap_user_attr_country=co
-ldap_user_attr_town=l
-ldap_user_attr_phone=telephoneNumber
-ldap_group_attr=memberOf
-
-# optional, only absolute URLs make sense
-#ldap_user_picture_uri=picture_uri
-
-# optional
-# the timezone has to match any timezone available in Java, otherwise the timezone defined in the value of 
-# the conf_key "default.timezone" in OpenMeetings "configurations" table
-#ldap_user_timezone=timezone
-
-# Ldap ignore upper/lower case, convert all input to lower case
-ldap_use_lower_case=false
-
-# Ldap import query, this query should retrieve all LDAP users
-ldap_import_query=(objectClass=inetOrgPerson)
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# 
+#ConfigurationFile for LDAP Auth
+#ConfigKey 'ldap_config_path' must be set in DataBase Configration of OM and point to this file
+#o.becherer,14.01.2009
+
+#LDAP URL
+# This is the URL used to access your LDAP server.
+# if you want to use "ldaps://" links, please be aware that you need to import your CA certificate
+#  to a java keystore and add the -Djavax.net.ssl.keyStore, -Djavax.net.ssl.keyStorePassword,
+#  -Djavax.net.ssl.trustStore and -Djavax.net.ssl.trustStorePassword parameters to your 
+#  JAVA_OPT environment
+ldap_conn_host=dc2.medint.local
+ldap_conn_port=389
+ldap_conn_secure=false
+
+# Login distinguished name (DN) for Authentication on LDAP Server - keep empty if not required
+# Use full qualified LDAP DN
+ldap_admin_dn=CN=dummy,OU=Company,DC=medint,DC=local
+
+# Loginpass for Authentication on LDAP Server - keep empty if not required
+ldap_passwd=dummy07
+
+# base to search for userdata(of user, that wants to login)
+ldap_search_base=OU=Company,DC=medint,DC=local
+
+# Fieldnames (can differ between Ldap servers) 
+ldap_search_query=(uid=%s)
+
+# the scope of the search might be: OBJECT, ONELEVEL, SUBTREE
+ldap_search_scope=ONELEVEL
+
+# Ldap auth type(NONE, SEARCHANDBIND, SIMPLEBIND)
+#  When using SIMPLEBIND a simple bind is performed on the LDAP server to check user authentication
+#  When using NONE, the Ldap server is not used for authentication
+ldap_auth_type=SIMPLEBIND
+
+# userDN format, will be used to bind if ldap_auth_type=SIMPLEBIND
+# might be used to get provisionningDn in case ldap_auth_type=NONE
+ldap_userdn_format=uid=%s,OU=Company,DC=medint,DC=local
+
+# Ldap provisioning type(NONE, AUTOCREATE, AUTOUPDATE)
+ldap_provisionning=AUTOCREATE
+
+# Ldap deref mode (never, searching, finding, always)
+ldap_deref_mode=always
+
+#  Set this to 'true' if you want to use admin_dn to get user attributes
+#  If any other value is set, user_dn will be used
+ldap_use_admin_to_get_attrs=true
+
+# Ldap-password synchronization to OM DB
+#  Set this to 'true' if you want OM to synchronize the user Ldap-password to OM's internal DB
+#  If you want to disable the feature, set this to any other string.
+#  Defautl value is 'true'
+ldap_sync_password_to_om=true
+
+# Ldap group mode (NONE, ATTRIBUTE, QUERY)
+# NONE means group associations will be ignored
+# ATTRIBUTE means group associations will be taken from 'ldap_group_attr' attribute (M$ AD mode)
+# QUERY means group associations will be taken as a result of 'ldap_group_query' query
+ldap_group_mode=NONE
+
+ldap_group_query=(&(memberUid=%s)(objectClass=posixGroup))
+
+# Ldap user attributes mapping
+# Set the following internal OM user attributes to their corresponding Ldap-attribute
+ldap_user_attr_login=uid
+ldap_user_attr_lastname=sn
+ldap_user_attr_firstname=givenName
+ldap_user_attr_mail=mail
+ldap_user_attr_street=streetAddress
+ldap_user_attr_additionalname=description
+ldap_user_attr_fax=facsimileTelephoneNumber
+ldap_user_attr_zip=postalCode
+ldap_user_attr_country=co
+ldap_user_attr_town=l
+ldap_user_attr_phone=telephoneNumber
+ldap_group_attr=memberOf
+
+# optional, only absolute URLs make sense
+#ldap_user_picture_uri=picture_uri
+
+# optional
+# the timezone has to match any timezone available in Java, otherwise the timezone defined in the value of 
+# the conf_key "default.timezone" in OpenMeetings "configurations" table
+#ldap_user_timezone=timezone
+
+# Ldap ignore upper/lower case, convert all input to lower case
+ldap_use_lower_case=false
+
+# Ldap import query, this query should retrieve all LDAP users
+ldap_import_query=(objectClass=inetOrgPerson)

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/js/openmeetings_functions.js b/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
index 53c3d3a..09b3fc5 100644
--- a/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
+++ b/openmeetings-web/src/main/webapp/js/openmeetings_functions.js
@@ -1,64 +1,64 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
-*/
-/*
- * Functions to be included in the HTML wrapper,
- * see the templates dir (*.vm) for the include statements
- *  
- */ 
-
-function getBrowserInfo() {
-	//alert(navigator.userAgent);
-	document.getElementById("lzapp").getBrowserInfoCallback(navigator.userAgent);
-}
-
-function getBrowserLang() {
-	//alert(navigator.userAgent);
-	document.getElementById("lzapp").getBrowserLangCallback(navigator.language);
-}
-
-function redirectToUrl(url) {
-	//alert(navigator.userAgent);
-	window.location = url;
-	
-	document.getElementById("lzapp").redirectToUrlCallback("ok");
-}
-
-function loadingComplete() {
-	document.getElementById("swfloading").style.display = 'none';
-	var lzApp = document.getElementById("lzappContainer");
-	lzApp.style.width = '100%';
-	lzApp.style.height = '100%';
-}
-
-function getTimeZoneOffsetMinutes() {
-	var rightNow = new Date(), std_time_offset = -rightNow.getTimezoneOffset();
-	for (var i = 0; i < 12; ++i) {
-		var d = new Date(rightNow.getFullYear(), i, 1, 0, 0, 0, 0), offset = -d.getTimezoneOffset();
-		if (offset < std_time_offset) {
-			std_time_offset = offset;
-			break;
-		}
-	}
-	return std_time_offset;
-}
-
-function getTimeZoneOffset() {
-	document.getElementById("lzapp").getTimeZoneOffsetCallback(getTimeZoneOffsetMinutes()/60);
-}
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+*/
+/*
+ * Functions to be included in the HTML wrapper,
+ * see the templates dir (*.vm) for the include statements
+ *  
+ */ 
+
+function getBrowserInfo() {
+	//alert(navigator.userAgent);
+	document.getElementById("lzapp").getBrowserInfoCallback(navigator.userAgent);
+}
+
+function getBrowserLang() {
+	//alert(navigator.userAgent);
+	document.getElementById("lzapp").getBrowserLangCallback(navigator.language);
+}
+
+function redirectToUrl(url) {
+	//alert(navigator.userAgent);
+	window.location = url;
+	
+	document.getElementById("lzapp").redirectToUrlCallback("ok");
+}
+
+function loadingComplete() {
+	document.getElementById("swfloading").style.display = 'none';
+	var lzApp = document.getElementById("lzappContainer");
+	lzApp.style.width = '100%';
+	lzApp.style.height = '100%';
+}
+
+function getTimeZoneOffsetMinutes() {
+	var rightNow = new Date(), std_time_offset = -rightNow.getTimezoneOffset();
+	for (var i = 0; i < 12; ++i) {
+		var d = new Date(rightNow.getFullYear(), i, 1, 0, 0, 0, 0), offset = -d.getTimezoneOffset();
+		if (offset < std_time_offset) {
+			std_time_offset = offset;
+			break;
+		}
+	}
+	return std_time_offset;
+}
+
+function getTimeZoneOffset() {
+	document.getElementById("lzapp").getTimeZoneOffsetCallback(getTimeZoneOffsetMinutes()/60);
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/webapp/languages/errorvalues.xsd
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/languages/errorvalues.xsd b/openmeetings-web/src/main/webapp/languages/errorvalues.xsd
index 66f06d1..5acb78a 100644
--- a/openmeetings-web/src/main/webapp/languages/errorvalues.xsd
+++ b/openmeetings-web/src/main/webapp/languages/errorvalues.xsd
@@ -1,41 +1,41 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
-  <xs:element name="ROOT">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="unbounded" ref="row"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="row">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="unbounded" ref="field"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="field">
-    <xs:complexType mixed="true">
-      <xs:attribute name="name" use="required" type="xs:NCName"/>
-    </xs:complexType>
-  </xs:element>
-</xs:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="ROOT">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="row"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="row">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="field"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="field">
+    <xs:complexType mixed="true">
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/webapp/public/config.xsd
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/public/config.xsd b/openmeetings-web/src/main/webapp/public/config.xsd
index cb1c1b7..b8e19d3 100644
--- a/openmeetings-web/src/main/webapp/public/config.xsd
+++ b/openmeetings-web/src/main/webapp/public/config.xsd
@@ -1,131 +1,131 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
-  <xs:element name="config">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element ref="rtmphostlocal"/>
-        <xs:element ref="httphostlocal"/>
-        <xs:element ref="rtmpport"/>
-        <xs:element ref="rtmpsslport"/>
-        <xs:element ref="useSSL"/>
-        <xs:element ref="red5httpport"/>
-        <xs:element ref="protocol"/>
-        <xs:element ref="proxyType"/>
-        <xs:element ref="loudnessAcitviation"/>
-        <xs:element ref="webAppRootKey"/>
-        <xs:element ref="httpRootKey"/>
-        <xs:element ref="showWindowEffect"/>
-        <xs:element ref="codecType"/>
-        <xs:element ref="framesPerSecond"/>
-        <xs:element ref="bandwidthNeededNormal"/>
-        <xs:element ref="bandwidthNeededBest"/>
-        <xs:element ref="camQualityNormal"/>
-        <xs:element ref="camQualityBest"/>
-        <xs:element ref="microphoneRateBest"/>
-        <xs:element ref="echoPath" />
-        <xs:element ref="echoSuppression" />
-        <xs:element ref="defaultWhiteboardWidth"/>
-        <xs:element ref="defaultWhiteboardHeight"/>
-        <xs:element ref="availableCameraResolutions"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="rtmphostlocal">
-  	<xs:annotation>
-    	<xs:documentation>
-    		URL/IP to use for the Server for RTMP and RTMPT traffic.
-		    If this value is empty it will try to connect to the 
-		    domain-name the OpenMeetings-Client has been loading from
-		    
-		    Can be either and IP or a domain name. 
-		    For example: 
-		    192.168.254.182
-		    or
-		    mysubdomain.streaming.to
-    	</xs:documentation>
-    </xs:annotation>
-    <xs:complexType/>
-  </xs:element>
-  <xs:element name="httphostlocal">
-    <xs:annotation>
-    	<xs:documentation>
-    		URL/IP to use for the Server for HTTP and HTTPS traffic.
-		    If this value is empty it will use the rtmphostlocal 
-		    variable (and in that way try to connect to the 
-		    domain-name the OpenMeetings-Client has been loading from)
-    	</xs:documentation>
-    </xs:annotation>
-    <xs:complexType/>
-  </xs:element>
-  <xs:element name="rtmpport" type="xs:integer"/>
-  <xs:element name="rtmpTunnelport" type="xs:integer"/>
-  <xs:element name="rtmpsslport" type="xs:integer"/>
-  <xs:element name="useSSL" type="xs:NCName"/>
-  <xs:element name="red5httpport" type="xs:integer"/>
-  <xs:element name="protocol" type="xs:NCName"/>
-  <xs:element name="proxyType" type="xs:NCName"/>
-  <xs:element name="loudnessAcitviation" type="xs:integer"/>
-  <xs:element name="webAppRootKey" type="xs:NCName"/>
-  <xs:element name="httpRootKey" type="xs:string"/>
-  <xs:element name="showWindowEffect" type="xs:NCName"/>
-  <xs:element name="codecType" type="xs:string"/>
-  <xs:element name="framesPerSecond" type="xs:integer"/>
-  <xs:element name="bandwidthNeededNormal" type="xs:integer"/>
-  <xs:element name="bandwidthNeededBest" type="xs:integer"/>
-  <xs:element name="camQualityNormal" type="xs:integer"/>
-  <xs:element name="camQualityBest" type="xs:integer"/>
-  <xs:element name="microphoneRateBest" type="xs:integer"/>
-  <xs:element name="echoSuppression" type="xs:string"/>
-  <xs:element name="echoPath">
-    <xs:annotation>
-        <xs:documentation>
-            AEC configuration value - 
-			Specifies the echo path length (in milliseconds). A longer echo path means better 
-			echo cancellation but also introduces longer delays and requires more processing power. 
-			The default value is 128; the only other possible value is 256.
-        </xs:documentation>
-    </xs:annotation>
-    <xs:simpleType>
-        <xs:restriction base="xs:int">
-            <xs:enumeration value="128" />
-            <xs:enumeration value="256" />
-        </xs:restriction>
-    </xs:simpleType>
-  </xs:element>
-  <xs:element name="defaultWhiteboardWidth" type="xs:integer"/>
-  <xs:element name="defaultWhiteboardHeight" type="xs:integer"/>
-  <xs:element name="availableCameraResolutions">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="unbounded" ref="resolution"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="resolution">
-    <xs:complexType>
-      <xs:attribute name="height" use="required" type="xs:integer"/>
-      <xs:attribute name="isDefault" use="required" type="xs:boolean"/>
-      <xs:attribute name="type" use="required"/>
-      <xs:attribute name="width" use="required" type="xs:integer"/>
-    </xs:complexType>
-  </xs:element>
-</xs:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="config">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="rtmphostlocal"/>
+        <xs:element ref="httphostlocal"/>
+        <xs:element ref="rtmpport"/>
+        <xs:element ref="rtmpsslport"/>
+        <xs:element ref="useSSL"/>
+        <xs:element ref="red5httpport"/>
+        <xs:element ref="protocol"/>
+        <xs:element ref="proxyType"/>
+        <xs:element ref="loudnessAcitviation"/>
+        <xs:element ref="webAppRootKey"/>
+        <xs:element ref="httpRootKey"/>
+        <xs:element ref="showWindowEffect"/>
+        <xs:element ref="codecType"/>
+        <xs:element ref="framesPerSecond"/>
+        <xs:element ref="bandwidthNeededNormal"/>
+        <xs:element ref="bandwidthNeededBest"/>
+        <xs:element ref="camQualityNormal"/>
+        <xs:element ref="camQualityBest"/>
+        <xs:element ref="microphoneRateBest"/>
+        <xs:element ref="echoPath" />
+        <xs:element ref="echoSuppression" />
+        <xs:element ref="defaultWhiteboardWidth"/>
+        <xs:element ref="defaultWhiteboardHeight"/>
+        <xs:element ref="availableCameraResolutions"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="rtmphostlocal">
+  	<xs:annotation>
+    	<xs:documentation>
+    		URL/IP to use for the Server for RTMP and RTMPT traffic.
+		    If this value is empty it will try to connect to the 
+		    domain-name the OpenMeetings-Client has been loading from
+		    
+		    Can be either and IP or a domain name. 
+		    For example: 
+		    192.168.254.182
+		    or
+		    mysubdomain.streaming.to
+    	</xs:documentation>
+    </xs:annotation>
+    <xs:complexType/>
+  </xs:element>
+  <xs:element name="httphostlocal">
+    <xs:annotation>
+    	<xs:documentation>
+    		URL/IP to use for the Server for HTTP and HTTPS traffic.
+		    If this value is empty it will use the rtmphostlocal 
+		    variable (and in that way try to connect to the 
+		    domain-name the OpenMeetings-Client has been loading from)
+    	</xs:documentation>
+    </xs:annotation>
+    <xs:complexType/>
+  </xs:element>
+  <xs:element name="rtmpport" type="xs:integer"/>
+  <xs:element name="rtmpTunnelport" type="xs:integer"/>
+  <xs:element name="rtmpsslport" type="xs:integer"/>
+  <xs:element name="useSSL" type="xs:NCName"/>
+  <xs:element name="red5httpport" type="xs:integer"/>
+  <xs:element name="protocol" type="xs:NCName"/>
+  <xs:element name="proxyType" type="xs:NCName"/>
+  <xs:element name="loudnessAcitviation" type="xs:integer"/>
+  <xs:element name="webAppRootKey" type="xs:NCName"/>
+  <xs:element name="httpRootKey" type="xs:string"/>
+  <xs:element name="showWindowEffect" type="xs:NCName"/>
+  <xs:element name="codecType" type="xs:string"/>
+  <xs:element name="framesPerSecond" type="xs:integer"/>
+  <xs:element name="bandwidthNeededNormal" type="xs:integer"/>
+  <xs:element name="bandwidthNeededBest" type="xs:integer"/>
+  <xs:element name="camQualityNormal" type="xs:integer"/>
+  <xs:element name="camQualityBest" type="xs:integer"/>
+  <xs:element name="microphoneRateBest" type="xs:integer"/>
+  <xs:element name="echoSuppression" type="xs:string"/>
+  <xs:element name="echoPath">
+    <xs:annotation>
+        <xs:documentation>
+            AEC configuration value - 
+			Specifies the echo path length (in milliseconds). A longer echo path means better 
+			echo cancellation but also introduces longer delays and requires more processing power. 
+			The default value is 128; the only other possible value is 256.
+        </xs:documentation>
+    </xs:annotation>
+    <xs:simpleType>
+        <xs:restriction base="xs:int">
+            <xs:enumeration value="128" />
+            <xs:enumeration value="256" />
+        </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <xs:element name="defaultWhiteboardWidth" type="xs:integer"/>
+  <xs:element name="defaultWhiteboardHeight" type="xs:integer"/>
+  <xs:element name="availableCameraResolutions">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="resolution"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="resolution">
+    <xs:complexType>
+      <xs:attribute name="height" use="required" type="xs:integer"/>
+      <xs:attribute name="isDefault" use="required" type="xs:boolean"/>
+      <xs:attribute name="type" use="required"/>
+      <xs:attribute name="width" use="required" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/webapp/public/theme.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/public/theme.xml b/openmeetings-web/src/main/webapp/public/theme.xml
index 29957cd..82a19b3 100644
--- a/openmeetings-web/src/main/webapp/public/theme.xml
+++ b/openmeetings-web/src/main/webapp/public/theme.xml
@@ -1,330 +1,330 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:noNamespaceSchemaLocation="theme.xsd">
-
-	<!-- Colors -->
-	<color name="mainBackgroundColor" value="0xEEF0EB"
-				description="main background color" />
-
-	<color name="basebgcolorizer" value="0xBDC0DB"
-				description="Color for background" />
-
-	<color name="baseMousecolorizer" value="0xBDC0DB"
-				description="Color Mouseover color for list items" />
-
-	<color name="baseMouseOvercolorizer" value="0xBDC0DB"
-				description="Color Mouseover color for list items" />
-
-	<color name="styleMenuBarBaseColor" value="0x000088"
-				description="menu bar background color" />
-
-	<color name="mainBorderColor" value="0xCCCCCC"
-				description="main border color" />
-
-	<color name="secondBorderColor" value="0xE0E0E0"
-				description="main border color" />
-
-	<color name="menuBackgroundColor" value="0xEFEFEF"
-				description="main border color" />
-
-	<color name="menuTextColor" value="0x666666"
-				description="color of text for menus" />
-
-	<color name="menuTextDisabledColor" value="0xBBBBBB"
-				description="color of text for menus" />
-
-	<!-- Icons -->
-	<resource name="warning_popup_icon_rsc"
-				description="Toolbar Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/error.png" />
-
-	<resource name="info_text_icon_rsc"
-				description="Info Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/information.png" />
-
-	<!-- Save Toolbar (for example Admin section) -->
-
-	<resource name="filesave_rsc"
-				description="Save Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/disk.png" />
-
-	<resource name="edit_add_rsc"
-				description="Save Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/general/plus_icon.png" />
-
-	<resource name="reload_rsc"
-				description="Save Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/arrow_refresh_small.png" />
-
-	<resource name="button_cancel_rsc"
-				description="Save Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/general/cancel_icon.png" />
-
-	<resource name="add_rsc"
-				description="Edit Add Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/general/add.png" />
-
-	<resource name="date_icon_rsc"
-				description="Edit Add Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/calendar_view_week.png" />
-
-	<!-- Sorted list -->
-
-	<resource name="step_back_two_arrow"
-				description="Step to first"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/resultset_first.png" />
-
-	<resource name="step_fwd_two_arrow"
-				description="Step to last"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/resultset_last.png" />
-
-	<resource name="step_back_arrow"
-				description="Step one back"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/resultset_previous.png" />
-
-	<resource name="step_fwd_arrow"
-				description="Step one next"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/resultset_next.png" />
-
-	<resource name="sort_up_rsc"
-				description="Sort up"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/resultset_up.png" />
-
-	<resource name="sort_down_rsc"
-				description="Sort down"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/resultset_down.png" />
-
-	<!-- Chat toolbar -->
-
-	<resource name="font_style"
-				description="Change font style button"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/style.png" />
-
-	<resource name="font_bold"
-				description="Bold font style button"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/text_bold.png" />
-
-	<resource name="font_italic"
-				description="Italic font style button"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/text_italic.png" />
-
-	<resource name="font_underline"
-				description="Underline font style button"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/text_underline.png" />
-
-	<resource name="font_color"
-				description="Change font color button"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/color_swatch.png" />
-
-	<resource name="hyperlink"
-				description="Insert hyperlink button"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/world_link.png" />
-
-	<!-- Whiteboard Toolbar -->
-
-	<resource name="plain"
-				description="Toolbar Icon"
-				license="APL author sebawagner"
-				src="themes/basic-theme/whiteboard/delete_all.png" />
-
-	<resource name="plainSlides"
-				description="Toolbar Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/page_delete.png" />
-
-	<resource name="arrow_draw_panel_tool_cursor"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/arrow_cursor_tool.png" />
-
-	<resource name="saveobj"
-				description="Toolbar Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/general/disk.png" />
-
-	<resource name="revert"
-				description="Toolbar Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png" />
-
-	<resource name="next"
-				description="Toolbar Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/arrow_rotate_clockwise.png" />
-
-	<resource name="menupointer_rsc"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/menupointer.png" />
-
-	<resource name="pointer_whiteboard_menu_rsc"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png" />
-
-	<resource name="letter"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/letter.png" />
-
-	<resource name="paint"
-				description="Toolbar Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/pencil.png" />
-
-	<resource name="line_rsc"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/line.png" />
-
-	<resource name="uline_rsc"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/uline.png" />
-
-	<resource name="rectangle"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/rectangle.png" />
-
-	<resource name="ellipse"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/ellipse.png" />
-
-	<resource name="drawarrowicon_rsc"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/drawarrowicon.png" />
-
-	<!-- whiteboard general -->
-
-	<resource name="bounding_box_delete_item_rsc"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/general/cancel_icon_small.png" />
-
-	<resource name="bounding_box_textedit_item_rsc"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/text_signature.png" />
-
-	<!-- document Tools -->
-
-	<resource name="doc_next"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/doc_next.png" />
-
-	<resource name="doc_pre"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/doc_pre.png" />
-
-	<resource name="doc_first"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/doc_first.png" />
-
-	<resource name="doc_last"
-				description="Toolbar Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/whiteboard/doc_last.png" />
-
-	<!-- property panel -->
-	<resource name="colorlinechoose_rsc"
-				description="Property bar icon line color"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/pencil.png" />
-
-	<resource name="colorfillchoose_rsc"
-				description="Property bar icon fill color"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/paintcan.png" />
-
-	<resource name="color_lock_rsc"
-				description="Property bar icon color lock"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/lock.png" />
-
-	<resource name="color_lock_open_rsc"
-				description="Property bar icon color lock open"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/whiteboard/lock_open.png" />
-
-	<!-- Dashboard -->
-
-	<resource name="icon_btn_dashboard_1"
-				description="Info Guide Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/dashboard/wizzard_button_1.png" />
-
-	<resource name="icon_btn_dashboard_2"
-				description="Info Guide Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/dashboard/wizzard_button_2.png" />
-
-	<resource name="icon_btn_dashboard_3"
-				description="Info Guide Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/dashboard/wizzard_button_3.png" />
-
-	<resource name="icon_btn_dashboard_4"
-				description="Info Guide Icon"
-				license="APL Author sebawagner"
-				src="themes/basic-theme/dashboard/wizzard_button_4.png" />
-
-	<resource name="icon_btn_rss_conference"
-				description="RSS Tab Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/dashboard/feed.png" />
-
-	<resource name="icon_btn_chat_dashboard"
-				description="Chat Tab Icon"
-				license="FamFam Icon Set"
-				src="themes/basic-theme/dashboard/comments.png" />
-
-	<resource name="icon_btn_rooms_conference"
-				description="Conference Room Tab Icon"
-				license="APL author sebawagner"
-				src="themes/basic-theme/dashboard/conference_icon_normal.png" />
-</theme>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:noNamespaceSchemaLocation="theme.xsd">
+
+	<!-- Colors -->
+	<color name="mainBackgroundColor" value="0xEEF0EB"
+				description="main background color" />
+
+	<color name="basebgcolorizer" value="0xBDC0DB"
+				description="Color for background" />
+
+	<color name="baseMousecolorizer" value="0xBDC0DB"
+				description="Color Mouseover color for list items" />
+
+	<color name="baseMouseOvercolorizer" value="0xBDC0DB"
+				description="Color Mouseover color for list items" />
+
+	<color name="styleMenuBarBaseColor" value="0x000088"
+				description="menu bar background color" />
+
+	<color name="mainBorderColor" value="0xCCCCCC"
+				description="main border color" />
+
+	<color name="secondBorderColor" value="0xE0E0E0"
+				description="main border color" />
+
+	<color name="menuBackgroundColor" value="0xEFEFEF"
+				description="main border color" />
+
+	<color name="menuTextColor" value="0x666666"
+				description="color of text for menus" />
+
+	<color name="menuTextDisabledColor" value="0xBBBBBB"
+				description="color of text for menus" />
+
+	<!-- Icons -->
+	<resource name="warning_popup_icon_rsc"
+				description="Toolbar Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/error.png" />
+
+	<resource name="info_text_icon_rsc"
+				description="Info Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/information.png" />
+
+	<!-- Save Toolbar (for example Admin section) -->
+
+	<resource name="filesave_rsc"
+				description="Save Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/disk.png" />
+
+	<resource name="edit_add_rsc"
+				description="Save Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/plus_icon.png" />
+
+	<resource name="reload_rsc"
+				description="Save Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/arrow_refresh_small.png" />
+
+	<resource name="button_cancel_rsc"
+				description="Save Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/cancel_icon.png" />
+
+	<resource name="add_rsc"
+				description="Edit Add Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/add.png" />
+
+	<resource name="date_icon_rsc"
+				description="Edit Add Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/calendar_view_week.png" />
+
+	<!-- Sorted list -->
+
+	<resource name="step_back_two_arrow"
+				description="Step to first"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_first.png" />
+
+	<resource name="step_fwd_two_arrow"
+				description="Step to last"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_last.png" />
+
+	<resource name="step_back_arrow"
+				description="Step one back"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_previous.png" />
+
+	<resource name="step_fwd_arrow"
+				description="Step one next"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_next.png" />
+
+	<resource name="sort_up_rsc"
+				description="Sort up"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_up.png" />
+
+	<resource name="sort_down_rsc"
+				description="Sort down"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/resultset_down.png" />
+
+	<!-- Chat toolbar -->
+
+	<resource name="font_style"
+				description="Change font style button"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/style.png" />
+
+	<resource name="font_bold"
+				description="Bold font style button"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/text_bold.png" />
+
+	<resource name="font_italic"
+				description="Italic font style button"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/text_italic.png" />
+
+	<resource name="font_underline"
+				description="Underline font style button"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/text_underline.png" />
+
+	<resource name="font_color"
+				description="Change font color button"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/color_swatch.png" />
+
+	<resource name="hyperlink"
+				description="Insert hyperlink button"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/world_link.png" />
+
+	<!-- Whiteboard Toolbar -->
+
+	<resource name="plain"
+				description="Toolbar Icon"
+				license="APL author sebawagner"
+				src="themes/basic-theme/whiteboard/delete_all.png" />
+
+	<resource name="plainSlides"
+				description="Toolbar Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/page_delete.png" />
+
+	<resource name="arrow_draw_panel_tool_cursor"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/arrow_cursor_tool.png" />
+
+	<resource name="saveobj"
+				description="Toolbar Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/general/disk.png" />
+
+	<resource name="revert"
+				description="Toolbar Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png" />
+
+	<resource name="next"
+				description="Toolbar Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/arrow_rotate_clockwise.png" />
+
+	<resource name="menupointer_rsc"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/menupointer.png" />
+
+	<resource name="pointer_whiteboard_menu_rsc"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png" />
+
+	<resource name="letter"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/letter.png" />
+
+	<resource name="paint"
+				description="Toolbar Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/pencil.png" />
+
+	<resource name="line_rsc"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/line.png" />
+
+	<resource name="uline_rsc"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/uline.png" />
+
+	<resource name="rectangle"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/rectangle.png" />
+
+	<resource name="ellipse"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/ellipse.png" />
+
+	<resource name="drawarrowicon_rsc"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/drawarrowicon.png" />
+
+	<!-- whiteboard general -->
+
+	<resource name="bounding_box_delete_item_rsc"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/general/cancel_icon_small.png" />
+
+	<resource name="bounding_box_textedit_item_rsc"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/text_signature.png" />
+
+	<!-- document Tools -->
+
+	<resource name="doc_next"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_next.png" />
+
+	<resource name="doc_pre"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_pre.png" />
+
+	<resource name="doc_first"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_first.png" />
+
+	<resource name="doc_last"
+				description="Toolbar Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/whiteboard/doc_last.png" />
+
+	<!-- property panel -->
+	<resource name="colorlinechoose_rsc"
+				description="Property bar icon line color"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/pencil.png" />
+
+	<resource name="colorfillchoose_rsc"
+				description="Property bar icon fill color"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/paintcan.png" />
+
+	<resource name="color_lock_rsc"
+				description="Property bar icon color lock"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/lock.png" />
+
+	<resource name="color_lock_open_rsc"
+				description="Property bar icon color lock open"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/whiteboard/lock_open.png" />
+
+	<!-- Dashboard -->
+
+	<resource name="icon_btn_dashboard_1"
+				description="Info Guide Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_1.png" />
+
+	<resource name="icon_btn_dashboard_2"
+				description="Info Guide Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_2.png" />
+
+	<resource name="icon_btn_dashboard_3"
+				description="Info Guide Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_3.png" />
+
+	<resource name="icon_btn_dashboard_4"
+				description="Info Guide Icon"
+				license="APL Author sebawagner"
+				src="themes/basic-theme/dashboard/wizzard_button_4.png" />
+
+	<resource name="icon_btn_rss_conference"
+				description="RSS Tab Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/dashboard/feed.png" />
+
+	<resource name="icon_btn_chat_dashboard"
+				description="Chat Tab Icon"
+				license="FamFam Icon Set"
+				src="themes/basic-theme/dashboard/comments.png" />
+
+	<resource name="icon_btn_rooms_conference"
+				description="Conference Room Tab Icon"
+				license="APL author sebawagner"
+				src="themes/basic-theme/dashboard/conference_icon_normal.png" />
+</theme>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/webapp/public/theme.xsd
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/public/theme.xsd b/openmeetings-web/src/main/webapp/public/theme.xsd
index c7a1885..f5b6710 100644
--- a/openmeetings-web/src/main/webapp/public/theme.xsd
+++ b/openmeetings-web/src/main/webapp/public/theme.xsd
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
-  <xs:element name="theme">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="unbounded" ref="color"/>
-        <xs:element maxOccurs="unbounded" ref="resource"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="color">
-    <xs:complexType>
-      <xs:attribute name="description" use="required"/>
-      <xs:attribute name="name" use="required" type="xs:NCName"/>
-      <xs:attribute name="value" use="required" type="xs:NMTOKEN"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="resource">
-    <xs:complexType>
-      <xs:attribute name="description" use="required"/>
-      <xs:attribute name="license" use="required"/>
-      <xs:attribute name="name" use="required" type="xs:NCName"/>
-      <xs:attribute name="src" use="required"/>
-    </xs:complexType>
-  </xs:element>
-</xs:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="theme">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="color"/>
+        <xs:element maxOccurs="unbounded" ref="resource"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="color">
+    <xs:complexType>
+      <xs:attribute name="description" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="value" use="required" type="xs:NMTOKEN"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="resource">
+    <xs:complexType>
+      <xs:attribute name="description" use="required"/>
+      <xs:attribute name="license" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="src" use="required"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/webapp/upload/library.xsd
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/upload/library.xsd b/openmeetings-web/src/main/webapp/upload/library.xsd
index 71f2b7d..6b459b1 100644
--- a/openmeetings-web/src/main/webapp/upload/library.xsd
+++ b/openmeetings-web/src/main/webapp/upload/library.xsd
@@ -1,68 +1,68 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
-  <xs:element name="presentation">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element ref="originalDocument"/>
-        <xs:element ref="swfDocument"/>
-        <xs:element ref="thumbs"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="originalDocument">
-    <xs:complexType>
-      <xs:simpleContent>
-        <xs:extension base="xs:NCName">
-          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
-          <xs:attribute name="size" use="required" type="xs:integer"/>
-        </xs:extension>
-      </xs:simpleContent>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="swfDocument">
-    <xs:complexType>
-      <xs:simpleContent>
-        <xs:extension base="xs:NCName">
-          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
-          <xs:attribute name="size" use="required" type="xs:integer"/>
-        </xs:extension>
-      </xs:simpleContent>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="thumbs">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="unbounded" ref="thumb"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="thumb">
-    <xs:complexType>
-      <xs:simpleContent>
-        <xs:extension base="xs:NCName">
-          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
-          <xs:attribute name="size" use="required" type="xs:integer"/>
-        </xs:extension>
-      </xs:simpleContent>
-    </xs:complexType>
-  </xs:element>
-</xs:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="presentation">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="originalDocument"/>
+        <xs:element ref="swfDocument"/>
+        <xs:element ref="thumbs"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="originalDocument">
+    <xs:complexType>
+      <xs:simpleContent>
+        <xs:extension base="xs:NCName">
+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
+          <xs:attribute name="size" use="required" type="xs:integer"/>
+        </xs:extension>
+      </xs:simpleContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="swfDocument">
+    <xs:complexType>
+      <xs:simpleContent>
+        <xs:extension base="xs:NCName">
+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
+          <xs:attribute name="size" use="required" type="xs:integer"/>
+        </xs:extension>
+      </xs:simpleContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="thumbs">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="thumb"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="thumb">
+    <xs:complexType>
+      <xs:simpleContent>
+        <xs:extension base="xs:NCName">
+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>
+          <xs:attribute name="size" use="required" type="xs:integer"/>
+        </xs:extension>
+      </xs:simpleContent>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/site/site.xml b/openmeetings-web/src/site/site.xml
index b7a0eae..dd3dc53 100644
--- a/openmeetings-web/src/site/site.xml
+++ b/openmeetings-web/src/site/site.xml
@@ -1,39 +1,39 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
index 8775f82..bcf8aad 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
@@ -1,77 +1,77 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.test;
-
-import static org.apache.openmeetings.db.util.ApplicationHelper.getWicketTester;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.openmeetings.db.entity.user.User.Type;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.tester.WicketTester;
-import org.junit.After;
-
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.ButtonAjaxBehavior;
-
-public class AbstractWicketTester extends AbstractJUnitDefaults {
-	protected WicketTester tester;
-
-	@Override
-	public void setUp() throws Exception {
-		super.setUp();
-		tester = getWicketTester();
-		assertNotNull("Web session should not be null", WebSession.get());
-	}
-
-	public void login(String login, String password) {
-		if (login != null && password != null) {
-			WebSession.get().signIn(login, password, Type.user, null);
-		} else {
-			WebSession.get().signIn(username, userpass, Type.user, null);
-		}
-		assertTrue("Web session is not signed in for user: " + (login != null ? login : username), WebSession.get().isSignedIn());
-	}
-
-	@After
-	public void tearDown() {
-		if (tester != null) {
-			//can be null in case exception on initialization
-			tester.destroy();
-		}
-	}
-
-	public <T extends Serializable> ButtonAjaxBehavior getButtonBehavior(String path, String name) {
-		Args.notNull(path, "path");
-		Args.notNull(name, "name");
-		@SuppressWarnings("unchecked")
-		AbstractDialog<T> dialog = (AbstractDialog<T>)tester.getComponentFromLastRenderedPage(path);
-		List<ButtonAjaxBehavior> bl = dialog.getBehaviors(ButtonAjaxBehavior.class);
-		for (ButtonAjaxBehavior bb : bl) {
-			if (name.equals(bb.getButton().getName())) {
-				return bb;
-			}
-		}
-		return null;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import static org.apache.openmeetings.db.util.ApplicationHelper.getWicketTester;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.After;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.ButtonAjaxBehavior;
+
+public class AbstractWicketTester extends AbstractJUnitDefaults {
+	protected WicketTester tester;
+
+	@Override
+	public void setUp() throws Exception {
+		super.setUp();
+		tester = getWicketTester();
+		assertNotNull("Web session should not be null", WebSession.get());
+	}
+
+	public void login(String login, String password) {
+		if (login != null && password != null) {
+			WebSession.get().signIn(login, password, Type.user, null);
+		} else {
+			WebSession.get().signIn(username, userpass, Type.user, null);
+		}
+		assertTrue("Web session is not signed in for user: " + (login != null ? login : username), WebSession.get().isSignedIn());
+	}
+
+	@After
+	public void tearDown() {
+		if (tester != null) {
+			//can be null in case exception on initialization
+			tester.destroy();
+		}
+	}
+
+	public <T extends Serializable> ButtonAjaxBehavior getButtonBehavior(String path, String name) {
+		Args.notNull(path, "path");
+		Args.notNull(name, "name");
+		@SuppressWarnings("unchecked")
+		AbstractDialog<T> dialog = (AbstractDialog<T>)tester.getComponentFromLastRenderedPage(path);
+		List<ButtonAjaxBehavior> bl = dialog.getBehaviors(ButtonAjaxBehavior.class);
+		for (ButtonAjaxBehavior bb : bl) {
+			if (name.equals(bb.getButton().getName())) {
+				return bb;
+			}
+		}
+		return null;
+	}
+}


[12/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/RestrictedAccess.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/RestrictedAccess.xml b/openmeetings-server/src/site/xdoc/RestrictedAccess.xml
index e38dcd4..82e53bc 100644
--- a/openmeetings-server/src/site/xdoc/RestrictedAccess.xml
+++ b/openmeetings-server/src/site/xdoc/RestrictedAccess.xml
@@ -1,72 +1,72 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>How to restrict access to your Openmeetings server</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-	
-		<section name="Server Side">
-	
-			<p>You can protect your OpenMeetings instance from beeing accessed
-				from 3th party by using the file:
-			</p>
-			<p>$RED5_HOME/webapps/openmeetings/WEB-INF/red5-web.properties </p>
-			<p>Content: </p>
-			<source>webapp.virtualHosts=*,localhost, 127.0.0.1</source>
-			Sample file:
-			<a
-				href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/WEB-INF/red5-web.properties;hb=HEAD"
-				rel="nofollow">https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/WEB-INF/red5-web.properties;hb=HEAD
-			</a>
-		</section>
-
-		<section name="Client Side">
-
-			<p>And you can restrict the access also for the client side: Every
-				Flash Plugin will check a file called "crossdomain.xml" before it
-				tries to access the server using rtmp/RPC. This file is located: </p>
-			<p>$RED5_HOME/webapps/root/crossdomain.xml </p>
-			<p>Content: </p>
-			<source>
-<![CDATA[
-<?xml version="1.0"?>
-<cross-domain-policy>
-    <site-control permitted-cross-domain-policies="all"/>
-    <allow-access-from domain="localhost" to-ports="20-65535"/>
-    <allow-access-from domain="*.local" to-ports="20-65535"/>
-</cross-domain-policy>
-]]>
-			</source>
-			
-			<p>
-				If you accessing your application behind an Apache Webservre (using
-				mod_proxy or mod_jk2) be careful to make the crossdomain.xml
-				accessible. Flash will always search for this file in the www-root
-				directory of every URL you connect to. You might use
-				<a href="https://addons.mozilla.org/de/firefox/addon/firebug/" rel="nofollow">FireBug
-				</a>
-				for example to lookup requests.
-			</p>
-
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>How to restrict access to your Openmeetings server</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+	
+		<section name="Server Side">
+	
+			<p>You can protect your OpenMeetings instance from beeing accessed
+				from 3th party by using the file:
+			</p>
+			<p>$RED5_HOME/webapps/openmeetings/WEB-INF/red5-web.properties </p>
+			<p>Content: </p>
+			<source>webapp.virtualHosts=*,localhost, 127.0.0.1</source>
+			Sample file:
+			<a
+				href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/WEB-INF/red5-web.properties;hb=HEAD"
+				rel="nofollow">https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/WEB-INF/red5-web.properties;hb=HEAD
+			</a>
+		</section>
+
+		<section name="Client Side">
+
+			<p>And you can restrict the access also for the client side: Every
+				Flash Plugin will check a file called "crossdomain.xml" before it
+				tries to access the server using rtmp/RPC. This file is located: </p>
+			<p>$RED5_HOME/webapps/root/crossdomain.xml </p>
+			<p>Content: </p>
+			<source>
+<![CDATA[
+<?xml version="1.0"?>
+<cross-domain-policy>
+    <site-control permitted-cross-domain-policies="all"/>
+    <allow-access-from domain="localhost" to-ports="20-65535"/>
+    <allow-access-from domain="*.local" to-ports="20-65535"/>
+</cross-domain-policy>
+]]>
+			</source>
+			
+			<p>
+				If you accessing your application behind an Apache Webservre (using
+				mod_proxy or mod_jk2) be careful to make the crossdomain.xml
+				accessible. Flash will always search for this file in the www-root
+				directory of every URL you connect to. You might use
+				<a href="https://addons.mozilla.org/de/firefox/addon/firebug/" rel="nofollow">FireBug
+				</a>
+				for example to lookup requests.
+			</p>
+
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/SakaiPlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/SakaiPlugin.xml b/openmeetings-server/src/site/xdoc/SakaiPlugin.xml
index 30f6be4..64b9d0a 100644
--- a/openmeetings-server/src/site/xdoc/SakaiPlugin.xml
+++ b/openmeetings-server/src/site/xdoc/SakaiPlugin.xml
@@ -1,111 +1,111 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Sakai Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Introduction">
-			<p>
-				In 2010,
-				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company
-				</a>
-				has developed a plugin that integrates Sakai LMS and OpenMeetings
-				.
-			</p>
-			<p>
-				The plugin was developed for some Spanish Universities that use
-				Sakai and belongs to
-				<a rel="nofollow" target="_blank" 
-					href="https://confluence.sakaiproject.org/display/SPANISH/S2G+-+Spanish+Sakai+Group">"Spanish Sakai Universities"</a>
-				group:
-			</p>
-			<ul>
-				<li>
-					<a rel="nofollow" href="http://www.udl.es/" target="_blank">Universitat de Lleida </a>
-				</li>
-				<li>
-					<a rel="nofollow" href="http://www.upv.es/" target="_blank">Universidad Polit&#233;cnica de Valencia </a>
-				</li>
-				<li>
-					<a rel="nofollow" href="http://www.um.es/" target="_blank">Universidad de Murcia</a>
-				</li>
-				<li>
-					<a rel="nofollow" href="http://www.unavarra.es/" target="_blank">Universidad P&#250;blica de Navarra</a>
-				</li>
-				<li>
-					<a rel="nofollow" href="http://www.ucam.edu/" target="_blank">Universidad Cat&#243;lica San Antonio de Murcia
-					</a>
-				</li>
-			</ul>
-		</section>
-
-		<section name="Features">
-			<p>The plugin contains the following features: </p>
-			<ul>
-				<li>Create videoconference rooms through Sakai: </li>
-				<li>
-					<ol>
-						<li>Integrated with calendar </li>
-						<li>Integrated with announcements </li>
-						<li>Sends an email to all site participants </li>
-						<li>Rooms restricted to site groups </li>
-						<li>Configurable room type </li>
-					</ol>
-				</li>
-			</ul>
-			<p />
-			<ul>
-				<li>Future requirements </li>
-				<li>
-					<ol>
-						<li>Publish room recordings to students </li>
-						<li>Room reservation </li>
-					</ol>
-				</li>
-			</ul>
-		</section>
-
-		<section name="Source">
-			<p>
-				You can download and build the source code
-				<a rel="nofollow" target="_blank" 
-					href="https://source.sakaiproject.org/contrib/samoo/adobeconnectpro-openmeetings-integration/trunk/">here</a>
-			</p>
-		</section>
-
-		<section name="Installation and documentation">
-			<p>
-				The documentation resides in the
-				<a rel="nofollow" target="_blank" href="https://confluence.sakaiproject.org/display/OPENMTG/Home">Sakai confluence space</a>
-			</p>
-			<p>
-				Please contact the mailing list for further information. For
-				commercial support you can also contact
-				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company</a>
-				or other companies from the list of
-				<a href="commercial-support.html">commercial support</a>
-				.
-			</p>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Sakai Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Introduction">
+			<p>
+				In 2010,
+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company
+				</a>
+				has developed a plugin that integrates Sakai LMS and OpenMeetings
+				.
+			</p>
+			<p>
+				The plugin was developed for some Spanish Universities that use
+				Sakai and belongs to
+				<a rel="nofollow" target="_blank" 
+					href="https://confluence.sakaiproject.org/display/SPANISH/S2G+-+Spanish+Sakai+Group">"Spanish Sakai Universities"</a>
+				group:
+			</p>
+			<ul>
+				<li>
+					<a rel="nofollow" href="http://www.udl.es/" target="_blank">Universitat de Lleida </a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.upv.es/" target="_blank">Universidad Polit&#233;cnica de Valencia </a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.um.es/" target="_blank">Universidad de Murcia</a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.unavarra.es/" target="_blank">Universidad P&#250;blica de Navarra</a>
+				</li>
+				<li>
+					<a rel="nofollow" href="http://www.ucam.edu/" target="_blank">Universidad Cat&#243;lica San Antonio de Murcia
+					</a>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through Sakai: </li>
+				<li>
+					<ol>
+						<li>Integrated with calendar </li>
+						<li>Integrated with announcements </li>
+						<li>Sends an email to all site participants </li>
+						<li>Rooms restricted to site groups </li>
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+			<p />
+			<ul>
+				<li>Future requirements </li>
+				<li>
+					<ol>
+						<li>Publish room recordings to students </li>
+						<li>Room reservation </li>
+					</ol>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Source">
+			<p>
+				You can download and build the source code
+				<a rel="nofollow" target="_blank" 
+					href="https://source.sakaiproject.org/contrib/samoo/adobeconnectpro-openmeetings-integration/trunk/">here</a>
+			</p>
+		</section>
+
+		<section name="Installation and documentation">
+			<p>
+				The documentation resides in the
+				<a rel="nofollow" target="_blank" href="https://confluence.sakaiproject.org/display/OPENMTG/Home">Sakai confluence space</a>
+			</p>
+			<p>
+				Please contact the mailing list for further information. For
+				commercial support you can also contact
+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company</a>
+				or other companies from the list of
+				<a href="commercial-support.html">commercial support</a>
+				.
+			</p>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/SugarCRMPlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/SugarCRMPlugin.xml b/openmeetings-server/src/site/xdoc/SugarCRMPlugin.xml
index 3c7645e..f02bde3 100644
--- a/openmeetings-server/src/site/xdoc/SugarCRMPlugin.xml
+++ b/openmeetings-server/src/site/xdoc/SugarCRMPlugin.xml
@@ -1,73 +1,73 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>SugarCRM Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="SugarCRM Plugin for OpenMeetings">
-			<p>
-				You can get the latest Version of the Plugin for SugarCRM from the
-				<a href="downloads.html">downloads</a>
-				.
-			</p>
-			<p>
-				You can find the OpenMeetings Plugin also in the
-				<a href="http://www.sugarforge.org/projects/openmeetings/" target="_blank" rel="nofollow">SugarCRM Plugin database</a>
-				.
-			</p>
-		</section>
-
-		<section name="Features">
-			<p>The plugin contains the following features: </p>
-			<ul>
-				<li>Create videoconference rooms through SugarCRM: </li>
-				<li>
-					<ol>
-						<li>Integrated with calendar </li>
-						<li>Integrated with SugarCRM meetings </li>
-						<li>Sends invetations emails to meeting participants </li>
-						<li>Configurable room type </li>
-					</ol>
-				</li>
-			</ul>
-		</section>
-
-		<section name="Installation the SugarCRM Plugin for OpenMeetings">
-			<p>In SugarCRM's administration web-interface you will find the
-				module loader.
-			</p>
-			<a class="fancybox-buttons" href="images/SugarCRM_Installation.png">
-				<img src="images/SugarCRM_Installation.png" alt="" width="640" height="320" />
-			</a>
-			<ol>
-				<li>Upload the module with module loader in administration area. </li>
-				<li>Configure OpenMeetings settings. </li>
-				<li>Create OpenMeetings rooms. </li>
-			</ol>
-		</section>
-
-		<section name="Demo video">
-			<p>The demo video of SugarCRM plugin show you the plugin in action </p>
-			<iframe width="640" height="390" src="http://www.youtube.com/embed/xrDbcXqxDq8" frameborder="0" allowfullscreen=""></iframe>
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>SugarCRM Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="SugarCRM Plugin for OpenMeetings">
+			<p>
+				You can get the latest Version of the Plugin for SugarCRM from the
+				<a href="downloads.html">downloads</a>
+				.
+			</p>
+			<p>
+				You can find the OpenMeetings Plugin also in the
+				<a href="http://www.sugarforge.org/projects/openmeetings/" target="_blank" rel="nofollow">SugarCRM Plugin database</a>
+				.
+			</p>
+		</section>
+
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through SugarCRM: </li>
+				<li>
+					<ol>
+						<li>Integrated with calendar </li>
+						<li>Integrated with SugarCRM meetings </li>
+						<li>Sends invetations emails to meeting participants </li>
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Installation the SugarCRM Plugin for OpenMeetings">
+			<p>In SugarCRM's administration web-interface you will find the
+				module loader.
+			</p>
+			<a class="fancybox-buttons" href="images/SugarCRM_Installation.png">
+				<img src="images/SugarCRM_Installation.png" alt="" width="640" height="320" />
+			</a>
+			<ol>
+				<li>Upload the module with module loader in administration area. </li>
+				<li>Configure OpenMeetings settings. </li>
+				<li>Create OpenMeetings rooms. </li>
+			</ol>
+		</section>
+
+		<section name="Demo video">
+			<p>The demo video of SugarCRM plugin show you the plugin in action </p>
+			<iframe width="640" height="390" src="http://www.youtube.com/embed/xrDbcXqxDq8" frameborder="0" allowfullscreen=""></iframe>
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/TimeZoneHandling.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/TimeZoneHandling.xml b/openmeetings-server/src/site/xdoc/TimeZoneHandling.xml
index 134ad20..8f0a83c 100644
--- a/openmeetings-server/src/site/xdoc/TimeZoneHandling.xml
+++ b/openmeetings-server/src/site/xdoc/TimeZoneHandling.xml
@@ -1,39 +1,39 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Timezones</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Introduction">
-			<p>
-				Time zones are being taken from JDK, so please keep it up to date :)
-			</p>
-			<p>
-				You can set a Flag
-				<strong>forceTimeZoneCheck</strong>
-				for each user that gives him a Pop-Up notification to change his
-				time zone. The Flag can be changed in the user administration of
-				OpenMeetings. This can be handy if you update from a previous
-				version of OpenMeetings to make sure users see the new feature and
-				update their settings.
-			</p>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Timezones</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Introduction">
+			<p>
+				Time zones are being taken from JDK, so please keep it up to date :)
+			</p>
+			<p>
+				You can set a Flag
+				<strong>forceTimeZoneCheck</strong>
+				for each user that gives him a Pop-Up notification to change his
+				time zone. The Flag can be changed in the user administration of
+				OpenMeetings. This can be handy if you update from a previous
+				version of OpenMeetings to make sure users see the new feature and
+				update their settings.
+			</p>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/Upgrade.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/Upgrade.xml b/openmeetings-server/src/site/xdoc/Upgrade.xml
index ebdd7b8..b224c75 100644
--- a/openmeetings-server/src/site/xdoc/Upgrade.xml
+++ b/openmeetings-server/src/site/xdoc/Upgrade.xml
@@ -1,97 +1,97 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Upgrade</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Upgrading OpenMeetings via the Web-Interface">
-			<ol>
-				<li>
-					<p>There is a System Backup and Import tool. Login as Administrator and Administration &gt; Backup</p>
-					<a class="fancybox-buttons" href="images/backup.png"><img src="images/backup.png" alt="" width="600" /></a>
-					<p>
-						The Text in the Administration &gt; Backup section actually just says
-						it all. The backup contains users, rooms, groups and
-						appointments (Invitations and Reminders are NOT included in the
-						Backup and Reminders will not be send again!). The Backup contains
-						also all uploaded Files and Documents and will re-import them again.
-		
-						Max Upload Size is 1000 MB.
-					</p>
-				</li>
-				<li>Stop Openmeetings</li>
-				<li>(*) Backup folder with existing installation</li>
-				<li>(*) Perform DB backup using tools available for your database</li>
-				<li>Delete/move folder with existing installation of OM</li>
-				<li>Drop existing OM database</li>
-				<li>Create empty Database with same name and UTF-8 support</li>
-				<li>Unzip new version of OM into the same folder</li>
-				<li>(*) Modify DB settings</li>
-				<li>Start Openmeetings</li>
-				<li>go to http://localhost:5080/openmeetings</li>
-				<li>Install OM using Web installer</li>
-				<li>Login as Administrator and Administration &gt; Backup</li>
-				<li>Perform system import</li>
-			</ol>
-			<p>(*) Optional step</p>
-		</section>
-
-		<section name="Upgrading OpenMeetings from command line">
-			<p>
-				<i>You need OpenMeetings 2.x or later to have the command line interface (CLI) 
-					feature available
-				</i>
-			</p>
-			<p>
-				Alternatively to the Web-Installer you can also export and import via the command line. <br/>
-				<b>You should shutdown the Red5-Service while doing CLI export or import operations</b><br />
-				Cd to your red5-home directory, type "./admin.sh" and hit enter. You will get options available.<br />
-				<br />
-				A typical export would be:<br />
-				<tt>./admin.sh -b -file backup_today.zip</tt><br />
-				<br />
-				A typical import would be:<br />
-				<tt>./admin.sh -r -file backup_yesterday.zip</tt><br />
-				<br />
-				You can also combine the installation with a backup, that way you will create exactly the user table 
-				that existed in the backup.<br />
-				A typical install from backup would be:<br />
-				<tt>./admin.sh -i -file backup_yesterday.zip</tt><br/>
-				please see <a href="CommandLineAdmin.html" target="_blank" rel="nofollow">Command Line Admin</a> for more options
-			</p>
-			<p><b>Detailed steps</b></p>
-			<ol>
-				<li>Stop Openmeetings</li>
-				<li>(*) Backup folder with existing installation</li>
-				<li>(*) Perform DB backup using tools available for your database</li>
-				<li><tt>./admin.sh -v -b -file ../backup_today.zip</tt></li>
-				<li>Delete/move folder with existing installation of OM</li>
-				<li>Unzip new version of OM into the same folder</li>
-				<li><tt>./admin.sh -v -i -file ../backup_today.zip --drop --skip-default-rooms</tt> (Optionally you can specify
-					additional parameters like DB host/user/pass/instance etc.)</li>
-				<li>Start Openmeetings</li>
-				<li>go to http://localhost:5080/openmeetings</li>
-			</ol>
-			<p>(*) Optional step</p>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Upgrade</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Upgrading OpenMeetings via the Web-Interface">
+			<ol>
+				<li>
+					<p>There is a System Backup and Import tool. Login as Administrator and Administration &gt; Backup</p>
+					<a class="fancybox-buttons" href="images/backup.png"><img src="images/backup.png" alt="" width="600" /></a>
+					<p>
+						The Text in the Administration &gt; Backup section actually just says
+						it all. The backup contains users, rooms, groups and
+						appointments (Invitations and Reminders are NOT included in the
+						Backup and Reminders will not be send again!). The Backup contains
+						also all uploaded Files and Documents and will re-import them again.
+		
+						Max Upload Size is 1000 MB.
+					</p>
+				</li>
+				<li>Stop Openmeetings</li>
+				<li>(*) Backup folder with existing installation</li>
+				<li>(*) Perform DB backup using tools available for your database</li>
+				<li>Delete/move folder with existing installation of OM</li>
+				<li>Drop existing OM database</li>
+				<li>Create empty Database with same name and UTF-8 support</li>
+				<li>Unzip new version of OM into the same folder</li>
+				<li>(*) Modify DB settings</li>
+				<li>Start Openmeetings</li>
+				<li>go to http://localhost:5080/openmeetings</li>
+				<li>Install OM using Web installer</li>
+				<li>Login as Administrator and Administration &gt; Backup</li>
+				<li>Perform system import</li>
+			</ol>
+			<p>(*) Optional step</p>
+		</section>
+
+		<section name="Upgrading OpenMeetings from command line">
+			<p>
+				<i>You need OpenMeetings 2.x or later to have the command line interface (CLI) 
+					feature available
+				</i>
+			</p>
+			<p>
+				Alternatively to the Web-Installer you can also export and import via the command line. <br/>
+				<b>You should shutdown the Red5-Service while doing CLI export or import operations</b><br />
+				Cd to your red5-home directory, type "./admin.sh" and hit enter. You will get options available.<br />
+				<br />
+				A typical export would be:<br />
+				<tt>./admin.sh -b -file backup_today.zip</tt><br />
+				<br />
+				A typical import would be:<br />
+				<tt>./admin.sh -r -file backup_yesterday.zip</tt><br />
+				<br />
+				You can also combine the installation with a backup, that way you will create exactly the user table 
+				that existed in the backup.<br />
+				A typical install from backup would be:<br />
+				<tt>./admin.sh -i -file backup_yesterday.zip</tt><br/>
+				please see <a href="CommandLineAdmin.html" target="_blank" rel="nofollow">Command Line Admin</a> for more options
+			</p>
+			<p><b>Detailed steps</b></p>
+			<ol>
+				<li>Stop Openmeetings</li>
+				<li>(*) Backup folder with existing installation</li>
+				<li>(*) Perform DB backup using tools available for your database</li>
+				<li><tt>./admin.sh -v -b -file ../backup_today.zip</tt></li>
+				<li>Delete/move folder with existing installation of OM</li>
+				<li>Unzip new version of OM into the same folder</li>
+				<li><tt>./admin.sh -v -i -file ../backup_today.zip --drop --skip-default-rooms</tt> (Optionally you can specify
+					additional parameters like DB host/user/pass/instance etc.)</li>
+				<li>Start Openmeetings</li>
+				<li>go to http://localhost:5080/openmeetings</li>
+			</ol>
+			<p>(*) Optional step</p>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/WebappNamePath.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/WebappNamePath.xml b/openmeetings-server/src/site/xdoc/WebappNamePath.xml
index 53658a8..97cb7b1 100644
--- a/openmeetings-server/src/site/xdoc/WebappNamePath.xml
+++ b/openmeetings-server/src/site/xdoc/WebappNamePath.xml
@@ -1,152 +1,152 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Webapp Name / Path</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Customize Openmeetings logo">
-			<p>If you want to set up your logo in Openmeetings header you can do the following:</p>
-			<ol>
-				<li>create your logo image as PNG 40px height</li>
-				<li>replace <tt>/opt/red5/webapps/openmeetings/css/images/logo.png</tt> with your logo file</li>
-			</ol>
-		</section>
-		<section name="Renaming /openmeetings context">
-			<p>
-				If you want to have
-				<tt>http://yourcorp.com:5080/yourmeetings</tt>
-				instead of
-				<tt>http://yourcorp.com:5080/openmeetings</tt>
-				you need to do the following
-			</p>
-			<ol>
-				<li>stop openmmetings if it is running </li>
-				<li>
-					go to openmeetings install dir (for ex. <tt>/opt/red5</tt>)
-				</li>
-				<li>
-					rename <tt>/opt/red5/webapps/openmeetings</tt> to <tt>/opt/red5/webapps/yourmeetings</tt>
-					(for ex. <tt>mv /opt/red5/webapps/openmeetings /opt/red5/webapps/yourmeetings</tt>)
-				</li>
-				<li>
-					open <tt>/opt/red5/webapps/yourmeetings/public/config.xml</tt>
-					using your favorite text editor (for ex. <tt>vim /opt/red5/webapps/yourmeetings/public/config.xml</tt>)
-					<ul>
-						<li>
-							find and modify <tt>&lt;webAppRootKey&gt;openmeetings&lt;/webAppRootKey&gt;</tt>
-							to be <tt>&lt;webAppRootKey&gt;<strong>yourmeetings</strong>&lt;/webAppRootKey&gt;</tt>
-						</li>
-						<li>
-							find and modify <tt>&lt;httpRootKey&gt;/openmeetings/&lt;/httpRootKey&gt;</tt>
-							to be <tt>&lt;httpRootKey&gt;<strong>/yourmeetings/</strong>&lt;/httpRootKey&gt;</tt>
-						</li>
-					</ul>
-				</li>
-				<li>
-					open <tt>/opt/red5/webapps/root/index.html</tt>
-					using your favorite text editor (for ex. <tt>vim /opt/red5/webapps/root/index.html</tt>)
-					<ul>
-						<li>
-							find and modify <tt>&lt;meta http-equiv="REFRESH" content="0;url=openmeetings/"&gt;</tt>
-							to be <tt>&lt;meta http-equiv="REFRESH" content="0;url=<strong>yourmeetings/</strong>"&gt;</tt>
-						</li>
-					</ul>
-				</li>
-			</ol>
-			<p>That's it</p>
-		</section>
-
-		<section name="Changing hard-coded application name in string labels">
-			<p>
-				To have
-				<i>Your Application Name</i>
-				instead of
-				<i>Openmeetings</i>
-				in
-				<strong>all</strong>
-				text labels you need to do the following
-			</p>
-			<ol>
-				<li>
-					ensure
-					<strong>
-						<tt>{0}</tt>
-					</strong>
-					placeholder is used in
-					<i>all</i>
-					strings you have added and/or modified (all strings bundled into
-					Openmeetings already have this placeholder)
-				</li>
-				<li>login to Openmeetings as user with administrator privileges </li>
-				<li>
-					go to
-					<tt>Administration -&gt; Configuration</tt>
-				</li>
-				<li>
-					find and edit configuration with name
-					<strong>
-						<tt>application.name</tt>
-					</strong>
-				</li>
-				<li>
-					Set its value to be
-					<i>
-						<tt>Your Application Name</tt>
-					</i>
-				</li>
-				<li>
-					<tt>Save</tt>
-				</li>
-				<li>reload page or relogin </li>
-			</ol>
-			<p>
-			All string will display
-			<i>
-				<tt>Your Application Name</tt>
-			</i>
-			in place of
-			<i>
-				<tt>Openmeetings</tt>
-			</i>
-			</p>
-		</section>
-
-		<section name="Running multiple Openmeetings instances on the same server">
-			<p>
-				If you want to run multiple Openmeetings instances on the same server i.e. to have<br/>  
-				<tt>http://yourcorp.com:5080/openmeetings1</tt><br/> 
-				<tt>http://yourcorp.com:5080/openmeetings2</tt><br/> etc.<br/> you need to do the following:
-			</p>
-			<ol>
-				<li>edit <tt>webapps/openmeetings1/WEB-INF/red5-web.properties</tt> for <strong>every</strong> Openmeetings 
-				instance and add the following line <tt>webapp.contextPath=/openmeetings1</tt>  to it (context of 
-				<strong>every</strong> instance <strong>should</strong> match the folder name in webapps dir)
-				</li>
-				<li>in case of java memory problems modify <tt>red5.sh</tt> add following line:<br/>
-					<source>export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M"</source>
-					or <tt>red5.bat</tt>:<br/>
-					<source>set JAVA_OPTS=-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M</source>
-				</li>
-			</ol>
-		</section>
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Webapp Name / Path</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Customize Openmeetings logo">
+			<p>If you want to set up your logo in Openmeetings header you can do the following:</p>
+			<ol>
+				<li>create your logo image as PNG 40px height</li>
+				<li>replace <tt>/opt/red5/webapps/openmeetings/css/images/logo.png</tt> with your logo file</li>
+			</ol>
+		</section>
+		<section name="Renaming /openmeetings context">
+			<p>
+				If you want to have
+				<tt>http://yourcorp.com:5080/yourmeetings</tt>
+				instead of
+				<tt>http://yourcorp.com:5080/openmeetings</tt>
+				you need to do the following
+			</p>
+			<ol>
+				<li>stop openmmetings if it is running </li>
+				<li>
+					go to openmeetings install dir (for ex. <tt>/opt/red5</tt>)
+				</li>
+				<li>
+					rename <tt>/opt/red5/webapps/openmeetings</tt> to <tt>/opt/red5/webapps/yourmeetings</tt>
+					(for ex. <tt>mv /opt/red5/webapps/openmeetings /opt/red5/webapps/yourmeetings</tt>)
+				</li>
+				<li>
+					open <tt>/opt/red5/webapps/yourmeetings/public/config.xml</tt>
+					using your favorite text editor (for ex. <tt>vim /opt/red5/webapps/yourmeetings/public/config.xml</tt>)
+					<ul>
+						<li>
+							find and modify <tt>&lt;webAppRootKey&gt;openmeetings&lt;/webAppRootKey&gt;</tt>
+							to be <tt>&lt;webAppRootKey&gt;<strong>yourmeetings</strong>&lt;/webAppRootKey&gt;</tt>
+						</li>
+						<li>
+							find and modify <tt>&lt;httpRootKey&gt;/openmeetings/&lt;/httpRootKey&gt;</tt>
+							to be <tt>&lt;httpRootKey&gt;<strong>/yourmeetings/</strong>&lt;/httpRootKey&gt;</tt>
+						</li>
+					</ul>
+				</li>
+				<li>
+					open <tt>/opt/red5/webapps/root/index.html</tt>
+					using your favorite text editor (for ex. <tt>vim /opt/red5/webapps/root/index.html</tt>)
+					<ul>
+						<li>
+							find and modify <tt>&lt;meta http-equiv="REFRESH" content="0;url=openmeetings/"&gt;</tt>
+							to be <tt>&lt;meta http-equiv="REFRESH" content="0;url=<strong>yourmeetings/</strong>"&gt;</tt>
+						</li>
+					</ul>
+				</li>
+			</ol>
+			<p>That's it</p>
+		</section>
+
+		<section name="Changing hard-coded application name in string labels">
+			<p>
+				To have
+				<i>Your Application Name</i>
+				instead of
+				<i>Openmeetings</i>
+				in
+				<strong>all</strong>
+				text labels you need to do the following
+			</p>
+			<ol>
+				<li>
+					ensure
+					<strong>
+						<tt>{0}</tt>
+					</strong>
+					placeholder is used in
+					<i>all</i>
+					strings you have added and/or modified (all strings bundled into
+					Openmeetings already have this placeholder)
+				</li>
+				<li>login to Openmeetings as user with administrator privileges </li>
+				<li>
+					go to
+					<tt>Administration -&gt; Configuration</tt>
+				</li>
+				<li>
+					find and edit configuration with name
+					<strong>
+						<tt>application.name</tt>
+					</strong>
+				</li>
+				<li>
+					Set its value to be
+					<i>
+						<tt>Your Application Name</tt>
+					</i>
+				</li>
+				<li>
+					<tt>Save</tt>
+				</li>
+				<li>reload page or relogin </li>
+			</ol>
+			<p>
+			All string will display
+			<i>
+				<tt>Your Application Name</tt>
+			</i>
+			in place of
+			<i>
+				<tt>Openmeetings</tt>
+			</i>
+			</p>
+		</section>
+
+		<section name="Running multiple Openmeetings instances on the same server">
+			<p>
+				If you want to run multiple Openmeetings instances on the same server i.e. to have<br/>  
+				<tt>http://yourcorp.com:5080/openmeetings1</tt><br/> 
+				<tt>http://yourcorp.com:5080/openmeetings2</tt><br/> etc.<br/> you need to do the following:
+			</p>
+			<ol>
+				<li>edit <tt>webapps/openmeetings1/WEB-INF/red5-web.properties</tt> for <strong>every</strong> Openmeetings 
+				instance and add the following line <tt>webapp.contextPath=/openmeetings1</tt>  to it (context of 
+				<strong>every</strong> instance <strong>should</strong> match the folder name in webapps dir)
+				</li>
+				<li>in case of java memory problems modify <tt>red5.sh</tt> add following line:<br/>
+					<source>export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M"</source>
+					or <tt>red5.bat</tt>:<br/>
+					<source>set JAVA_OPTS=-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M</source>
+				</li>
+			</ol>
+		</section>
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/WebcamResolutions.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/WebcamResolutions.xml b/openmeetings-server/src/site/xdoc/WebcamResolutions.xml
index 118716a..f574c8a 100644
--- a/openmeetings-server/src/site/xdoc/WebcamResolutions.xml
+++ b/openmeetings-server/src/site/xdoc/WebcamResolutions.xml
@@ -1,60 +1,60 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>How to configure Camera default resolutions </title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="How to configure Camera default resolutions">
-
-			<p>When you choose the webcam you have different resolutions
-				available the user can choose from. </p>
-			<p>You can add/remove resolutions and also change the default
-				selection. In the public/config.xml there is a section: </p>
-			<source>
-<![CDATA[
-<availableCameraResolutions>
-    <resolution type="4:3 (~6 KByte/sec)" width="40" height="30" isDefault="false" />
-    <resolution type="4:3 (~12 KByte/sec)" width="80" height="60" isDefault="false" />
-    <resolution type="4:3 (~20 KByte/sec)" width="120" height="90" isDefault="true" />
-    <resolution type="QQVGA 4:3 (~36 KByte/sec)" width="160" height="120" isDefault="false" />
-    <resolution type="4:3 (~40 KByte/sec)" width="240" height="180" isDefault="false" />
-    <resolution type="HVGA 4:3 (~56 KByte/sec)" width="320" height="240" isDefault="false" />
-    <resolution type="4:3  (~60 KByte/sec)" width="480" height="360" isDefault="false" />
-    <resolution type="4:3 (~68 KByte/sec)" width="640" height="480" isDefault="false" />
-    <resolution type="XGA 4:3" width="1024" height="768" isDefault="false" />
-    <resolution type="16:9" width="256" height="150" isDefault="false" />
-    <resolution type="WQVGA 9:5" width="432" height="240" isDefault="false" />
-    <resolution type="pseudo 16:9" width="480" height="234" isDefault="false" />
-    <resolution type="16:9" width="512" height="300" isDefault="false" />
-    <resolution type="nHD 16:9" width="640" height="360" isDefault="false" />
-    <resolution type="16:9" width="1024" height="600" isDefault="false" />
-</availableCameraResolutions>
-]]>
-			</source>
-		      
-		    <p>Tip: You might edit the public/config.xml with an XML aware editor that correctly 
-		    handles the XSD defintion to avoid misconfiguration. The openmeetings-config.xsd 
-		    is in the same folder like the public/config.xml. </p>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>How to configure Camera default resolutions </title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="How to configure Camera default resolutions">
+
+			<p>When you choose the webcam you have different resolutions
+				available the user can choose from. </p>
+			<p>You can add/remove resolutions and also change the default
+				selection. In the public/config.xml there is a section: </p>
+			<source>
+<![CDATA[
+<availableCameraResolutions>
+    <resolution type="4:3 (~6 KByte/sec)" width="40" height="30" isDefault="false" />
+    <resolution type="4:3 (~12 KByte/sec)" width="80" height="60" isDefault="false" />
+    <resolution type="4:3 (~20 KByte/sec)" width="120" height="90" isDefault="true" />
+    <resolution type="QQVGA 4:3 (~36 KByte/sec)" width="160" height="120" isDefault="false" />
+    <resolution type="4:3 (~40 KByte/sec)" width="240" height="180" isDefault="false" />
+    <resolution type="HVGA 4:3 (~56 KByte/sec)" width="320" height="240" isDefault="false" />
+    <resolution type="4:3  (~60 KByte/sec)" width="480" height="360" isDefault="false" />
+    <resolution type="4:3 (~68 KByte/sec)" width="640" height="480" isDefault="false" />
+    <resolution type="XGA 4:3" width="1024" height="768" isDefault="false" />
+    <resolution type="16:9" width="256" height="150" isDefault="false" />
+    <resolution type="WQVGA 9:5" width="432" height="240" isDefault="false" />
+    <resolution type="pseudo 16:9" width="480" height="234" isDefault="false" />
+    <resolution type="16:9" width="512" height="300" isDefault="false" />
+    <resolution type="nHD 16:9" width="640" height="360" isDefault="false" />
+    <resolution type="16:9" width="1024" height="600" isDefault="false" />
+</availableCameraResolutions>
+]]>
+			</source>
+		      
+		    <p>Tip: You might edit the public/config.xml with an XML aware editor that correctly 
+		    handles the XSD defintion to avoid misconfiguration. The openmeetings-config.xsd 
+		    is in the same folder like the public/config.xml. </p>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/WebsiteGuide.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/WebsiteGuide.xml b/openmeetings-server/src/site/xdoc/WebsiteGuide.xml
index a8dc062..4c1e622 100644
--- a/openmeetings-server/src/site/xdoc/WebsiteGuide.xml
+++ b/openmeetings-server/src/site/xdoc/WebsiteGuide.xml
@@ -1,80 +1,80 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Website Guide</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="How to update Apache OpenMeetings website">
-			<subsection name="Required tools">
-				<div>
-					<ul>
-						<li>Sun JDK7</li>
-						<li>Apache Maven (3.3.9 or later)</li>
-					</ul>
-				</div>
-			</subsection>
-			<subsection name="Introduction">
-				<div>
-					<p>
-						The Apache OpenMeetings HTML websites are generated from XML files. 
-						You edit the XML files, run the MAVEN command <source><![CDATA[mvn install -P allModules,unpacked -DskipTests=true]]></source> that generates the HTML files 
-						and then you copy generated HTML files into appropriate place and commit to Git both: XML and HTML files.
-					</p>
-					<p>
-						The website itself uses JQuery to generate the menu, the pop images and the image slider at the landing page.
-					</p>
-				</div>
-			</subsection>
-			<subsection name="Editing the website">
-				<div>
-					<p>
-						OpenMeetings website (<a href="http://openmeetings.apache.org/">http://openmeetings.apache.org/</a>) is a copy from the Git repository.<br />
-						The files in the Git to be synced are at:
-						<br />
-						<a href="https://git-wip-us.apache.org/repos/asf?p=openmeetings-site.git">https://git-wip-us.apache.org/repos/asf?p=openmeetings-site.git</a><br/>
-					</p>
-					<div>
-						To update the website you need to clone master:<br />
-						<a href="https://git-wip-us.apache.org/repos/asf/openmeetings-site.git">https://git-wip-us.apache.org/repos/asf/openmeetings-site.git</a> <br/>
-						edit the files in the folder <tt>openmeetings-server/src/site</tt><br/>
-						then you run the command:
-						<source><![CDATA[mvn install -P allModules,unpacked -DskipTests=true]]></source>
-						control the output locally in the folder <tt>openmeetings-server/target/server/webapps/openmeetings/docs/</tt><br/>
-						copy site contents into target folder: <source><![CDATA[cp -r openmeetings-server/target/server/webapps/openmeetings/docs/* ../site/]]></source>
-						And then commit your changes into the Git <i>both</i> the edited xml(s) and generated html files.
-					</div>
-					<p>
-						The public website is automatically synced with the Git repository.<br/>
-						Changes to the Git should be immediately synced to the production website.<br/>
-						If not you might login to people.apache.org,<br/>
-						cd to <tt>/www/openmeetings.apache.org/content/</tt><br/>
-						and run the linux command "touch" on the files that need to be synced
-					</p>
-				</div>
-			</subsection>
-			<subsection name="Adding a new menu entry">
-				<div>
-					To add a new menu entry in the left side panel you need to modify the file: 
-					<br/>
-					<tt>openmeetings-server/src/site/site.xml</tt>
-				</div>
-			</subsection>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Website Guide</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="How to update Apache OpenMeetings website">
+			<subsection name="Required tools">
+				<div>
+					<ul>
+						<li>Sun JDK7</li>
+						<li>Apache Maven (3.3.9 or later)</li>
+					</ul>
+				</div>
+			</subsection>
+			<subsection name="Introduction">
+				<div>
+					<p>
+						The Apache OpenMeetings HTML websites are generated from XML files. 
+						You edit the XML files, run the MAVEN command <source><![CDATA[mvn install -P allModules,unpacked -DskipTests=true]]></source> that generates the HTML files 
+						and then you copy generated HTML files into appropriate place and commit to Git both: XML and HTML files.
+					</p>
+					<p>
+						The website itself uses JQuery to generate the menu, the pop images and the image slider at the landing page.
+					</p>
+				</div>
+			</subsection>
+			<subsection name="Editing the website">
+				<div>
+					<p>
+						OpenMeetings website (<a href="http://openmeetings.apache.org/">http://openmeetings.apache.org/</a>) is a copy from the Git repository.<br />
+						The files in the Git to be synced are at:
+						<br />
+						<a href="https://git-wip-us.apache.org/repos/asf?p=openmeetings-site.git">https://git-wip-us.apache.org/repos/asf?p=openmeetings-site.git</a><br/>
+					</p>
+					<div>
+						To update the website you need to clone master:<br />
+						<a href="https://git-wip-us.apache.org/repos/asf/openmeetings-site.git">https://git-wip-us.apache.org/repos/asf/openmeetings-site.git</a> <br/>
+						edit the files in the folder <tt>openmeetings-server/src/site</tt><br/>
+						then you run the command:
+						<source><![CDATA[mvn install -P allModules,unpacked -DskipTests=true]]></source>
+						control the output locally in the folder <tt>openmeetings-server/target/server/webapps/openmeetings/docs/</tt><br/>
+						copy site contents into target folder: <source><![CDATA[cp -r openmeetings-server/target/server/webapps/openmeetings/docs/* ../site/]]></source>
+						And then commit your changes into the Git <i>both</i> the edited xml(s) and generated html files.
+					</div>
+					<p>
+						The public website is automatically synced with the Git repository.<br/>
+						Changes to the Git should be immediately synced to the production website.<br/>
+						If not you might login to people.apache.org,<br/>
+						cd to <tt>/www/openmeetings.apache.org/content/</tt><br/>
+						and run the linux command "touch" on the files that need to be synced
+					</p>
+				</div>
+			</subsection>
+			<subsection name="Adding a new menu entry">
+				<div>
+					To add a new menu entry in the left side panel you need to modify the file: 
+					<br/>
+					<tt>openmeetings-server/src/site/site.xml</tt>
+				</div>
+			</subsection>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/commercial-support.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/commercial-support.xml b/openmeetings-server/src/site/xdoc/commercial-support.xml
index c5618d8..fe8a191 100644
--- a/openmeetings-server/src/site/xdoc/commercial-support.xml
+++ b/openmeetings-server/src/site/xdoc/commercial-support.xml
@@ -1,56 +1,56 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Commercial Support</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Commercial Support for OpenMeetings">
-
-			<p>There are few companies offering complex services for OpenMeetings, including code support,
-			development, integration and bug fixing
-			</p>
-			<ul>
-				<li>
-					<a href="http://www.unipro.ru/eng/index.html" target="_blank">unipro.ru</a>
-					run by Maxim Solodovnik, Timur Tleukenov, Irina Arkhipets, Denis Kandrov, Vasily Degtyarev
-				</li>
-				<li>
-                    <a href="http://www.samoo.es" target="_blank" rel="nofollow">samoo.es</a>
-                    provides support for the Sakai Plugin
-                </li>
-			</ul>
-			<p>
-				Please write to <a href="mailto:om.unipro@gmail.com">om.unipro@gmail.com</a> to get UniPro support
-			</p>
-			<p>
-			    There are more companies offering installation, customization, hosting, conferencing and support services. You can add 
-				yourself to the <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Commercial+Support">wiki page</a>.
-			</p>
-			
-			<p>
-				Want to get listed here? Become a <a href="http://www.apache.org/dev/committers.html">committer</a>.
-			</p>
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Commercial Support</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Commercial Support for OpenMeetings">
+
+			<p>There are few companies offering complex services for OpenMeetings, including code support,
+			development, integration and bug fixing
+			</p>
+			<ul>
+				<li>
+					<a href="http://www.unipro.ru/eng/index.html" target="_blank">unipro.ru</a>
+					run by Maxim Solodovnik, Timur Tleukenov, Irina Arkhipets, Denis Kandrov, Vasily Degtyarev
+				</li>
+				<li>
+                    <a href="http://www.samoo.es" target="_blank" rel="nofollow">samoo.es</a>
+                    provides support for the Sakai Plugin
+                </li>
+			</ul>
+			<p>
+				Please write to <a href="mailto:om.unipro@gmail.com">om.unipro@gmail.com</a> to get UniPro support
+			</p>
+			<p>
+			    There are more companies offering installation, customization, hosting, conferencing and support services. You can add 
+				yourself to the <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Commercial+Support">wiki page</a>.
+			</p>
+			
+			<p>
+				Want to get listed here? Become a <a href="http://www.apache.org/dev/committers.html">committer</a>.
+			</p>
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/installation.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/installation.xml b/openmeetings-server/src/site/xdoc/installation.xml
index 3dd09ef..6434d8b 100644
--- a/openmeetings-server/src/site/xdoc/installation.xml
+++ b/openmeetings-server/src/site/xdoc/installation.xml
@@ -1,284 +1,284 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Installation</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="OpenMeetings Installation">
-
-			<p>
-				To update from past versions or migrate see <a href="Upgrade.html">Upgrade</a>.<br/>
-				If you are looking for commercial help have a look at
-				<a href="commercial-support.html" target="_blank" rel="nofollow">commercial support</a>.
-			</p>
-			<div>
-				<a href="downloads.html" rel="nofollow">
-					<img src="images/installation_instructions.png" alt="Installation in 3 simple steps" />
-				</a>
-				<p>
-					<i>Note: Openmeetings requires JRE 7/8, JRE 6 is NOT compatible!</i><br />
-					<i>
-						Since Version 2.0 you can also install OpenMeetings from command line. Just cd to the unpacked 
-						archive and type ./admin.sh or admin.bat, please see
-						<a href="CommandLineAdmin.html" target="_blank" rel="nofollow">Command Line Admin</a>
-						for more options
-					</i>
-				</p>
-			</div>
-			<ol>
-				<li>
-					<b>Recommendation for production environment</b>
-					<div style="margin-top: 10px; margin-bottom:10px">
-						By default OpenMeetings uses the integrated Apache Derby database.
-						For production environment you should consider using
-						<a href="MySQLConfig.html">MySQL</a>
-						,
-						<a href="PostgresConfig.html">Postgres</a>
-						, or for example
-						<a href="IBMDB2Config.html">IBM DB2</a>
-						, or
-						<a href="OracleConfig.html">Oracle</a>
-						, or
-						<a href="MSSQLConfig.html">MSSQL</a>
-					</div>
-				</li>
-				<li>
-					<b>Enabling Image Upload and import to whiteboard</b>
-					<div style="margin-top: 10px; margin-bottom:10px">
-						Install
-						<b>ImageMagick</b>
-						on the server, you can get more information on
-						<a href="http://www.imagemagick.org" rel="nofollow" target="_blank">http://www.imagemagick.org
-						</a>
-						regarding installation. The instructions
-						for installation can be
-						found there
-						<a href="http://www.imagemagick.org/script/binary-releases.php"
-							target="_blank" rel="nofollow">http://www.imagemagick.org/script/binary-releases.php
-						</a>
-						,
-						however on
-						most Linux systems you can get it via your favorite
-						package
-						managers (apt-get it)
-					</div>
-				</li>
-				<li>
-					<b>Enabling import of PDFs into whiteboard</b>
-					<div style="margin-top: 10px; margin-bottom:10px">
-						<ul>
-							<li>
-								Install
-								<b>GhostScript</b>
-								on the server, you can get more
-								information on
-								<a href="http://www.ghostscript.com/download/gsdnld.html" target="_blank"
-									rel="nofollow">
-									http://www.ghostscript.com/download/gsdnld.html
-								</a>
-								regarding
-								installation. The instructions for installation can be
-								found
-								there, however on most Linux systems you can get it via
-								your
-								favorite package managers (apt-get it).
-							</li>
-							<li>
-								Install
-								<b>SWFTools</b>
-								on the server, you can get more information
-								on
-								<a href="http://www.swftools.org/" target="_blank" rel="nofollow">http://www.swftools.org/
-								</a>
-								regarding installation. Some of the
-								Linux distributions already
-								have it in there package manager (see
-								<a href="http://packages.debian.org/unstable/utils/swftools"
-									target="_blank" rel="nofollow">http://packages.debian.org/unstable/utils/swftools
-								</a>
-								), the
-								recommended version of SWFTools is 0.9 as prior version
-								have a
-								bug that does lead to wrong object dimensions at
-								whiteboard
-							</li>
-						</ul>
-					</div>
-				</li>
-				<li>
-					<b>Enabling import of .doc, .docx, .ppt, .pptx, ... all Office
-						Documents into whitebaord
-					</b>
-					<div style="margin-top: 10px; margin-bottom:10px">
-						<ul>
-							<li>OpenOffice or Libre Office Installed</li>
-						</ul>
-						Since Version 2.x of OpenMeetings it is no more required to start
-						OpenOffice (or Libreoffice) service, see
-						<a href="OpenOfficeConverter.html">OpenOfficeConverter</a>
-						for details
-					</div>
-				</li>
-				<li>
-					<b>Enabling Recording and import of .avi, .flv, .mov and .mp4 into
-						whiteboard
-					</b>
-					<div style="margin-top: 10px; margin-bottom:10px">
-						<ul>
-							<li>
-								Install
-								<b>FFMpeg (with -enabled libmp3lame and libx264 options)</b>
-								. You should get FFMPEG in an up to date copy! OpenMeetings is
-								tested with FFMPEG Version 10.3 and latest build from GIT
-								For Windows you can download a Build for example from
-								<a href="http://ffmpeg.zeranoe.com/builds/" target="_blank"
-									rel="nofollow">http://ffmpeg.zeranoe.com/builds/ </a>
-								Linux or OSx Users should be able to use one of the various
-								Installation Instructions on the Web. You need to enable
-								libmp3lame and libx264!
-							</li>
-							<li>
-								Install
-								<b>SoX</b>
-								<a href="http://sox.sourceforge.net/" target="_blank" rel="nofollow">http://sox.sourceforge.net/
-								</a>
-								. You should install SoX in a up
-								to date copy! SoX 12.xx will NOT
-								work!
-							</li>
-						</ul>
-					</div>
-				</li>
-			</ol>
-
-		</section>
-
-		<section name="Ports, NAT Settings, Customize">
-
-			<p>
-				See
-				<a href="PortSettings.html">PortSettings</a>
-			</p>
-		</section>
-
-		<section name="Hardware Requirements">
-			<ul>
-				<li>
-					Minimalistic requirement (without Document Converters, Recorder and
-					Upload feature) 1GHz CPU 1 GB RAM (
-					<i>server-side</i>
-					)
-				</li>
-				<li>
-					Recommended requirement 2x/4x 2GHz ++ CPU (32 or 64Bit) 4GB RAM. If
-					you have a 64Bit Operating System check if there is a OpenOffice
-					64Bit Version
-					<a href="http://download.openoffice.org/other.html#de" rel="nofollow">available
-						for your OS
-					</a>
-					(
-					<i>server-side</i>
-					)
-				</li>
-				<li>
-					Headset/Microphone recommendation: Logitech ClearChat PC Wireless,
-					for example from
-					<a
-						href="http://www.amazon.de/Logitech-ClearChat-kabelloser-Kopfh%C3%B6rer-Transmitter/dp/B00166WSN4"
-						rel="nofollow">Amazon</a>
-					or
-					<a
-						href="http://shop.ebay.com/i.html?_nkw=Logitech+ClearChat.+Wireless&amp;_sacat=0&amp;_trksid=p3286.m270.l1313&amp;LH_BIN=1&amp;LH_IncludeSIF=1&amp;_odkw=Logitech+ClearChat+PC&amp;_osacat=0"
-						rel="nofollow">EBay Auctions</a>
-					(
-					<i>cient-side</i>
-					).
-					<a href="RecommendedHardwareList.html">See all recommendations</a>
-					for cameras, headsets and speakerphones.
-				</li>
-			</ul>
-
-		</section>
-
-		<section name="Debian, Links, Changelog, VoIP">
-			<ul>
-				<li>for VoIP and SIP Integration see also <a href="voip-sip-integration.html">VoIPAndSIP</a></li>
-				<li><a href="http://meetingslive.sourceforge.net/" rel="nofollow">http://meetingslive.sourceforge.net/</a></li>
-				<li>
-					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Installation of OM 2.0 for Windows XP, 7, 2003, 2008</a>
-				</li>
-				<li>
-					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">
-						OpenMeetings Installation tutorials by Alvaro Bustos for: Ubuntu, Debian, Mint, MacOS X, CentOS, Fedora, 
-						PCLinuxOS, openSUSE and Arch Linux.</a>
-				</li>
-				<li>
-					<a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27837303"
-						rel="nofollow">Tutoriales en español relacionados con OpenMeetings</a>
-				</li>
-				<li>
-					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools"
-						rel="nofollow">Automatic script installation for Ubuntu/Debian (beta)</a>
-				</li>
-				<li>
-					French version of Installation Instructions:
-					<a href="http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation"
-						rel="nofollow">http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation
-					</a>
-				</li>
-			</ul>
-		</section>
-
-		<section name="Tips and Tricks">
-			<ul>
-				<li>
-					Use the Debug-Application: open <tt>$RED5_HOME/webapps/openmeetings/WEB-INF/web.xml</tt> change
-					<source><![CDATA[
-<init-param>
-	<param-name>configuration</param-name>
-	<param-value>DEPLOYMENT</param-value>
-</init-param>
-					]]></source> to be
-					<source><![CDATA[
-<init-param>
-	<param-name>configuration</param-name>
-	<param-value>DEVELOPMENT</param-value>
-</init-param>
-					]]></source> 
-					then access your OM installation
-				</li>
-				<li>If you have Problems with conversion-jobs check your openmeetings log
-					output (available at <tt>$RED5_HOME/log/openmeetings.log</tt>). There will be error Messages which help you. You must
-					install OpenOffice, ImageMagick, GhostScript and SWFTools to run
-					all conversion-Jobs correctly.
-				</li>
-				<li>
-					you can query a Mysql Database to get the schema_collection by
-					using this query:
-					<source><![CDATA[SELECT Table_name, TABLE_COLLATION FROM information_schema.tables WHERE table_schema = 'openmeetings' ORDER BY table_name DESC ]]></source>
-				</li>
-			</ul>
-		</section>
-
-	</body>
-
-</document>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Installation</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Installation">
+
+			<p>
+				To update from past versions or migrate see <a href="Upgrade.html">Upgrade</a>.<br/>
+				If you are looking for commercial help have a look at
+				<a href="commercial-support.html" target="_blank" rel="nofollow">commercial support</a>.
+			</p>
+			<div>
+				<a href="downloads.html" rel="nofollow">
+					<img src="images/installation_instructions.png" alt="Installation in 3 simple steps" />
+				</a>
+				<p>
+					<i>Note: Openmeetings requires JRE 7/8, JRE 6 is NOT compatible!</i><br />
+					<i>
+						Since Version 2.0 you can also install OpenMeetings from command line. Just cd to the unpacked 
+						archive and type ./admin.sh or admin.bat, please see
+						<a href="CommandLineAdmin.html" target="_blank" rel="nofollow">Command Line Admin</a>
+						for more options
+					</i>
+				</p>
+			</div>
+			<ol>
+				<li>
+					<b>Recommendation for production environment</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						By default OpenMeetings uses the integrated Apache Derby database.
+						For production environment you should consider using
+						<a href="MySQLConfig.html">MySQL</a>
+						,
+						<a href="PostgresConfig.html">Postgres</a>
+						, or for example
+						<a href="IBMDB2Config.html">IBM DB2</a>
+						, or
+						<a href="OracleConfig.html">Oracle</a>
+						, or
+						<a href="MSSQLConfig.html">MSSQL</a>
+					</div>
+				</li>
+				<li>
+					<b>Enabling Image Upload and import to whiteboard</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						Install
+						<b>ImageMagick</b>
+						on the server, you can get more information on
+						<a href="http://www.imagemagick.org" rel="nofollow" target="_blank">http://www.imagemagick.org
+						</a>
+						regarding installation. The instructions
+						for installation can be
+						found there
+						<a href="http://www.imagemagick.org/script/binary-releases.php"
+							target="_blank" rel="nofollow">http://www.imagemagick.org/script/binary-releases.php
+						</a>
+						,
+						however on
+						most Linux systems you can get it via your favorite
+						package
+						managers (apt-get it)
+					</div>
+				</li>
+				<li>
+					<b>Enabling import of PDFs into whiteboard</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								Install
+								<b>GhostScript</b>
+								on the server, you can get more
+								information on
+								<a href="http://www.ghostscript.com/download/gsdnld.html" target="_blank"
+									rel="nofollow">
+									http://www.ghostscript.com/download/gsdnld.html
+								</a>
+								regarding
+								installation. The instructions for installation can be
+								found
+								there, however on most Linux systems you can get it via
+								your
+								favorite package managers (apt-get it).
+							</li>
+							<li>
+								Install
+								<b>SWFTools</b>
+								on the server, you can get more information
+								on
+								<a href="http://www.swftools.org/" target="_blank" rel="nofollow">http://www.swftools.org/
+								</a>
+								regarding installation. Some of the
+								Linux distributions already
+								have it in there package manager (see
+								<a href="http://packages.debian.org/unstable/utils/swftools"
+									target="_blank" rel="nofollow">http://packages.debian.org/unstable/utils/swftools
+								</a>
+								), the
+								recommended version of SWFTools is 0.9 as prior version
+								have a
+								bug that does lead to wrong object dimensions at
+								whiteboard
+							</li>
+						</ul>
+					</div>
+				</li>
+				<li>
+					<b>Enabling import of .doc, .docx, .ppt, .pptx, ... all Office
+						Documents into whitebaord
+					</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>OpenOffice or Libre Office Installed</li>
+						</ul>
+						Since Version 2.x of OpenMeetings it is no more required to start
+						OpenOffice (or Libreoffice) service, see
+						<a href="OpenOfficeConverter.html">OpenOfficeConverter</a>
+						for details
+					</div>
+				</li>
+				<li>
+					<b>Enabling Recording and import of .avi, .flv, .mov and .mp4 into
+						whiteboard
+					</b>
+					<div style="margin-top: 10px; margin-bottom:10px">
+						<ul>
+							<li>
+								Install
+								<b>FFMpeg (with -enabled libmp3lame and libx264 options)</b>
+								. You should get FFMPEG in an up to date copy! OpenMeetings is
+								tested with FFMPEG Version 10.3 and latest build from GIT
+								For Windows you can download a Build for example from
+								<a href="http://ffmpeg.zeranoe.com/builds/" target="_blank"
+									rel="nofollow">http://ffmpeg.zeranoe.com/builds/ </a>
+								Linux or OSx Users should be able to use one of the various
+								Installation Instructions on the Web. You need to enable
+								libmp3lame and libx264!
+							</li>
+							<li>
+								Install
+								<b>SoX</b>
+								<a href="http://sox.sourceforge.net/" target="_blank" rel="nofollow">http://sox.sourceforge.net/
+								</a>
+								. You should install SoX in a up
+								to date copy! SoX 12.xx will NOT
+								work!
+							</li>
+						</ul>
+					</div>
+				</li>
+			</ol>
+
+		</section>
+
+		<section name="Ports, NAT Settings, Customize">
+
+			<p>
+				See
+				<a href="PortSettings.html">PortSettings</a>
+			</p>
+		</section>
+
+		<section name="Hardware Requirements">
+			<ul>
+				<li>
+					Minimalistic requirement (without Document Converters, Recorder and
+					Upload feature) 1GHz CPU 1 GB RAM (
+					<i>server-side</i>
+					)
+				</li>
+				<li>
+					Recommended requirement 2x/4x 2GHz ++ CPU (32 or 64Bit) 4GB RAM. If
+					you have a 64Bit Operating System check if there is a OpenOffice
+					64Bit Version
+					<a href="http://download.openoffice.org/other.html#de" rel="nofollow">available
+						for your OS
+					</a>
+					(
+					<i>server-side</i>
+					)
+				</li>
+				<li>
+					Headset/Microphone recommendation: Logitech ClearChat PC Wireless,
+					for example from
+					<a
+						href="http://www.amazon.de/Logitech-ClearChat-kabelloser-Kopfh%C3%B6rer-Transmitter/dp/B00166WSN4"
+						rel="nofollow">Amazon</a>
+					or
+					<a
+						href="http://shop.ebay.com/i.html?_nkw=Logitech+ClearChat.+Wireless&amp;_sacat=0&amp;_trksid=p3286.m270.l1313&amp;LH_BIN=1&amp;LH_IncludeSIF=1&amp;_odkw=Logitech+ClearChat+PC&amp;_osacat=0"
+						rel="nofollow">EBay Auctions</a>
+					(
+					<i>cient-side</i>
+					).
+					<a href="RecommendedHardwareList.html">See all recommendations</a>
+					for cameras, headsets and speakerphones.
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Debian, Links, Changelog, VoIP">
+			<ul>
+				<li>for VoIP and SIP Integration see also <a href="voip-sip-integration.html">VoIPAndSIP</a></li>
+				<li><a href="http://meetingslive.sourceforge.net/" rel="nofollow">http://meetingslive.sourceforge.net/</a></li>
+				<li>
+					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Installation of OM 2.0 for Windows XP, 7, 2003, 2008</a>
+				</li>
+				<li>
+					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">
+						OpenMeetings Installation tutorials by Alvaro Bustos for: Ubuntu, Debian, Mint, MacOS X, CentOS, Fedora, 
+						PCLinuxOS, openSUSE and Arch Linux.</a>
+				</li>
+				<li>
+					<a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27837303"
+						rel="nofollow">Tutoriales en español relacionados con OpenMeetings</a>
+				</li>
+				<li>
+					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools"
+						rel="nofollow">Automatic script installation for Ubuntu/Debian (beta)</a>
+				</li>
+				<li>
+					French version of Installation Instructions:
+					<a href="http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation"
+						rel="nofollow">http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation
+					</a>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Tips and Tricks">
+			<ul>
+				<li>
+					Use the Debug-Application: open <tt>$RED5_HOME/webapps/openmeetings/WEB-INF/web.xml</tt> change
+					<source><![CDATA[
+<init-param>
+	<param-name>configuration</param-name>
+	<param-value>DEPLOYMENT</param-value>
+</init-param>
+					]]></source> to be
+					<source><![CDATA[
+<init-param>
+	<param-name>configuration</param-name>
+	<param-value>DEVELOPMENT</param-value>
+</init-param>
+					]]></source> 
+					then access your OM installation
+				</li>
+				<li>If you have Problems with conversion-jobs check your openmeetings log
+					output (available at <tt>$RED5_HOME/log/openmeetings.log</tt>). There will be error Messages which help you. You must
+					install OpenOffice, ImageMagick, GhostScript and SWFTools to run
+					all conversion-Jobs correctly.
+				</li>
+				<li>
+					you can query a Mysql Database to get the schema_collection by
+					using this query:
+					<source><![CDATA[SELECT Table_name, TABLE_COLLATION FROM information_schema.tables WHERE table_schema = 'openmeetings' ORDER BY table_name DESC ]]></source>
+				</li>
+			</ul>
+		</section>
+
+	</body>
+
+</document>
+


[02/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
index 4ea4078..c3914a6 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
@@ -1,128 +1,128 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.test.backup;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.List;
-
-import org.apache.openmeetings.backup.BackupImport;
-import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.room.RoomGroupDao;
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.basic.Configuration;
-import org.apache.openmeetings.test.AbstractJUnitDefaults;
-import org.junit.After;
-import org.junit.Test;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class TestOldBackups extends AbstractJUnitDefaults {
-	private static final Logger log = Red5LoggerFactory.getLogger(TestOldBackups.class, webAppRootKey);
-	
-	@Autowired
-	private BackupImport backupController;
-	@Autowired
-	private GroupDao groupDao;
-	@Autowired
-	private UserDao userDao;
-	@Autowired
-	private RoomDao roomDao;
-	@Autowired
-	private AppointmentDao appointmentDao;
-	@Autowired
-	private MeetingMemberDao meetingMemberDao;
-	@Autowired
-	private RoomGroupDao roomGroupDao;
-	private String cryptClass = null;
-
-	@Override
-	public void setUp() throws Exception {
-		super.setUp();
-		// Crypt class need to be preserved here to avoid overriding by backup import
-		cryptClass = cfgDao.getCryptKey();
-	}
-	
-	@After
-	public void tearDown() {
-		List<Configuration> cfgs = cfgDao.get(CONFIG_CRYPT_KEY);
-		assertNotNull("Not null list should be returned", cfgs);
-		assertEquals("There should be exactly 1 item", 1, cfgs.size());
-		Configuration c = cfgs.get(0);
-		c.setValue(cryptClass);
-		cfgDao.update(c, null);
-	}
-	
-	@Test
-	public void importOldVersions() {
-		String backupsDir = System.getProperty("backups.dir", ".");
-		File backupsHome = new File(backupsDir);
-		
-		if (!backupsHome.exists() || !backupsHome.isDirectory()) {
-			fail("Invalid directory is specified for backup files: " + backupsDir);
-		}
-		long groupCount = 0;
-		long userCount = 0;
-		long roomCount = 0;
-		long roomGroupCount = 0;
-		long apptCount = 0;
-		long meetingMembersCount = 0;
-		for (File backup : backupsHome.listFiles()) {
-			String name = backup.getName();
-			log.debug("Import of backup file : '" + name + "' is started ...");
-			try (InputStream is = new FileInputStream(backup)) {
-				backupController.performImport(is);
-				long newGroupCount = groupDao.count();
-				long newUserCount = userDao.count();
-				long newRoomCount = roomDao.count();
-				long newRoomGroupCount = roomGroupDao.get().size();
-				long newApptCount = appointmentDao.get().size();
-				long newMeetingMembersCount = meetingMemberDao.getMeetingMembers().size();
-				assertTrue("Zero groups were imported from " + name, newGroupCount > groupCount);
-				assertTrue("Zero users were imported from " + name, newUserCount > userCount);
-				assertTrue("Zero rooms were imported from " + name, newRoomCount > roomCount);
-				assertTrue("Zero room groups were imported from " + name, newRoomGroupCount > roomGroupCount);
-				assertTrue("Zero appointments were imported from " + name, newApptCount > apptCount);
-				assertTrue("Zero meeting members were imported from " + name, newMeetingMembersCount > meetingMembersCount);
-				
-				groupCount = newGroupCount;
-				userCount = newUserCount;
-				roomCount = newRoomCount;
-				roomGroupCount = newRoomGroupCount;
-				apptCount = newApptCount;
-				meetingMembersCount = newMeetingMembersCount;
-			} catch (Exception e) {
-				throw new RuntimeException("Unexpected exception while importing backup: " + name, e);
-			}
-			log.debug("... Done.");
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.backup;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomGroupDao;
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.After;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestOldBackups extends AbstractJUnitDefaults {
+	private static final Logger log = Red5LoggerFactory.getLogger(TestOldBackups.class, webAppRootKey);
+	
+	@Autowired
+	private BackupImport backupController;
+	@Autowired
+	private GroupDao groupDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private RoomGroupDao roomGroupDao;
+	private String cryptClass = null;
+
+	@Override
+	public void setUp() throws Exception {
+		super.setUp();
+		// Crypt class need to be preserved here to avoid overriding by backup import
+		cryptClass = cfgDao.getCryptKey();
+	}
+	
+	@After
+	public void tearDown() {
+		List<Configuration> cfgs = cfgDao.get(CONFIG_CRYPT_KEY);
+		assertNotNull("Not null list should be returned", cfgs);
+		assertEquals("There should be exactly 1 item", 1, cfgs.size());
+		Configuration c = cfgs.get(0);
+		c.setValue(cryptClass);
+		cfgDao.update(c, null);
+	}
+	
+	@Test
+	public void importOldVersions() {
+		String backupsDir = System.getProperty("backups.dir", ".");
+		File backupsHome = new File(backupsDir);
+		
+		if (!backupsHome.exists() || !backupsHome.isDirectory()) {
+			fail("Invalid directory is specified for backup files: " + backupsDir);
+		}
+		long groupCount = 0;
+		long userCount = 0;
+		long roomCount = 0;
+		long roomGroupCount = 0;
+		long apptCount = 0;
+		long meetingMembersCount = 0;
+		for (File backup : backupsHome.listFiles()) {
+			String name = backup.getName();
+			log.debug("Import of backup file : '" + name + "' is started ...");
+			try (InputStream is = new FileInputStream(backup)) {
+				backupController.performImport(is);
+				long newGroupCount = groupDao.count();
+				long newUserCount = userDao.count();
+				long newRoomCount = roomDao.count();
+				long newRoomGroupCount = roomGroupDao.get().size();
+				long newApptCount = appointmentDao.get().size();
+				long newMeetingMembersCount = meetingMemberDao.getMeetingMembers().size();
+				assertTrue("Zero groups were imported from " + name, newGroupCount > groupCount);
+				assertTrue("Zero users were imported from " + name, newUserCount > userCount);
+				assertTrue("Zero rooms were imported from " + name, newRoomCount > roomCount);
+				assertTrue("Zero room groups were imported from " + name, newRoomGroupCount > roomGroupCount);
+				assertTrue("Zero appointments were imported from " + name, newApptCount > apptCount);
+				assertTrue("Zero meeting members were imported from " + name, newMeetingMembersCount > meetingMembersCount);
+				
+				groupCount = newGroupCount;
+				userCount = newUserCount;
+				roomCount = newRoomCount;
+				roomGroupCount = newRoomGroupCount;
+				apptCount = newApptCount;
+				meetingMembersCount = newMeetingMembersCount;
+			} catch (Exception e) {
+				throw new RuntimeException("Unexpected exception while importing backup: " + name, e);
+			}
+			log.debug("... Done.");
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
index 6ff7ea0..0cce759 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
@@ -1,105 +1,105 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.test.user;
-
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-import java.util.UUID;
-
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.test.AbstractWicketTester;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class TestUserContact extends AbstractWicketTester {
-	@Autowired
-	private UserDao userDao;
-	@Autowired
-	private GroupDao groupDao;
-
-	@Test
-	public void testGetUser() {
-		assertNull("Null should be returned in case User does not exist", userDao.get(Long.MAX_VALUE));
-	}
-
-	@Test
-	public void createUserWithGroup() throws Exception {
-		String uuid = UUID.randomUUID().toString();
-		User u = getUser(uuid);
-		u.getGroupUsers().add(new GroupUser(groupDao.get(1L), u));
-		u = userDao.update(u, null);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
-
-		User u1 = userDao.get(u.getId());
-		assertNotNull("Just created user should not be null", u1);
-		assertNotNull("Just created user should have non null org-users", u1.getGroupUsers());
-		assertFalse("Just created user should have not empty org-users", u1.getGroupUsers().isEmpty());
-	}
-
-	@Test
-	public void testCreateUser() throws Exception {
-		String uuid = UUID.randomUUID().toString();
-		User u = createUser(uuid);
-		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
-	}
-
-	@Test
-	public void addContactByOwner() throws Exception {
-		login(null, null);
-
-		List<User> users = userDao.getAllUsers();
-		assertNotNull("User list should not be null ", users);
-		assertFalse("User list should not be empty ", users.isEmpty());
-
-		User contact = createUserContact(getUserId());
-		String email = contact.getAddress().getEmail();
-		List<User> l = userDao.get(email, false, 0, 9999);
-		// check that contact is visible for admin
-		assertNotNull("Contact list should not be null for admin ", l);
-		assertFalse("Contact list should not be empty for admin ", l.isEmpty());
-
-		// check that contact is visible for owner
-		l = userDao.get(email, 0, 9999, null, true, getUserId());
-		assertTrue("Contact list should not be empty for owner ", !l.isEmpty());
-		//delete contact
-		userDao.delete(contact, getUserId());
-		l = userDao.get(email, false, 0, 9999);
-		assertTrue("Contact list should be empty after deletion", l.isEmpty());
-
-		User u = createUser();
-		User u1 = createUser();
-		contact = createUserContact(u.getId());
-		email = contact.getAddress().getEmail();
-		// check that contact is not visible for user that is not owner of this contact
-		l = userDao.get(email, 0, 9999, null, true, u1.getId());
-		assertTrue("Contact list should be empty for another user", l.isEmpty());
-		//delete contact
-		userDao.delete(contact, u.getId());
-		l = userDao.get(email, false, 0, 9999);
-		assertTrue("Contact list should be empty after deletion", l.isEmpty());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserContact extends AbstractWicketTester {
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private GroupDao groupDao;
+
+	@Test
+	public void testGetUser() {
+		assertNull("Null should be returned in case User does not exist", userDao.get(Long.MAX_VALUE));
+	}
+
+	@Test
+	public void createUserWithGroup() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = getUser(uuid);
+		u.getGroupUsers().add(new GroupUser(groupDao.get(1L), u));
+		u = userDao.update(u, null);
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
+
+		User u1 = userDao.get(u.getId());
+		assertNotNull("Just created user should not be null", u1);
+		assertNotNull("Just created user should have non null org-users", u1.getGroupUsers());
+		assertFalse("Just created user should have not empty org-users", u1.getGroupUsers().isEmpty());
+	}
+
+	@Test
+	public void testCreateUser() throws Exception {
+		String uuid = UUID.randomUUID().toString();
+		User u = createUser(uuid);
+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getId(), getRandomPass(uuid)));
+	}
+
+	@Test
+	public void addContactByOwner() throws Exception {
+		login(null, null);
+
+		List<User> users = userDao.getAllUsers();
+		assertNotNull("User list should not be null ", users);
+		assertFalse("User list should not be empty ", users.isEmpty());
+
+		User contact = createUserContact(getUserId());
+		String email = contact.getAddress().getEmail();
+		List<User> l = userDao.get(email, false, 0, 9999);
+		// check that contact is visible for admin
+		assertNotNull("Contact list should not be null for admin ", l);
+		assertFalse("Contact list should not be empty for admin ", l.isEmpty());
+
+		// check that contact is visible for owner
+		l = userDao.get(email, 0, 9999, null, true, getUserId());
+		assertTrue("Contact list should not be empty for owner ", !l.isEmpty());
+		//delete contact
+		userDao.delete(contact, getUserId());
+		l = userDao.get(email, false, 0, 9999);
+		assertTrue("Contact list should be empty after deletion", l.isEmpty());
+
+		User u = createUser();
+		User u1 = createUser();
+		contact = createUserContact(u.getId());
+		email = contact.getAddress().getEmail();
+		// check that contact is not visible for user that is not owner of this contact
+		l = userDao.get(email, 0, 9999, null, true, u1.getId());
+		assertTrue("Contact list should be empty for another user", l.isEmpty());
+		//delete contact
+		userDao.delete(contact, u.getId());
+		l = userDao.get(email, false, 0, 9999);
+		assertTrue("Contact list should be empty after deletion", l.isEmpty());
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
index 0fba6e5..530dae7 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
@@ -1,58 +1,58 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.test.user;
-
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.junit.Assert.assertTrue;
-
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.test.AbstractWicketTester;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class TestUserCount extends AbstractWicketTester {
-	@Autowired
-	private UserDao userDao;
-
-	@Test
-	public void testCountSearchUsers() throws Exception {
-		User u = createUser();
-		assertTrue("Account of search users should be one", userDao.count(u.getFirstname()) == 1);
-	}
-
-	@Test
-	public void testCountFilteredUsers() throws Exception {
-		User u = createUser();
-		User contact = createUserContact(u.getId());
-		assertTrue("Account of filtered user should be one", userDao.count(contact.getFirstname(), true, u.getId()) == 1);
-	}
-
-	@Test
-	public void testCountUnfilteredUsers() throws Exception {
-		User u = createUser();
-		createUserContact(u.getId());
-		assertTrue("Account of unfiltered should be more then one", userDao.count("firstname", false, getUserId()) > 1);
-	}
-
-	@Test
-	public void testCountAllUsers() {
-		assertTrue("Account of users should be positive", userDao.count() > 0);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserCount extends AbstractWicketTester {
+	@Autowired
+	private UserDao userDao;
+
+	@Test
+	public void testCountSearchUsers() throws Exception {
+		User u = createUser();
+		assertTrue("Account of search users should be one", userDao.count(u.getFirstname()) == 1);
+	}
+
+	@Test
+	public void testCountFilteredUsers() throws Exception {
+		User u = createUser();
+		User contact = createUserContact(u.getId());
+		assertTrue("Account of filtered user should be one", userDao.count(contact.getFirstname(), true, u.getId()) == 1);
+	}
+
+	@Test
+	public void testCountUnfilteredUsers() throws Exception {
+		User u = createUser();
+		createUserContact(u.getId());
+		assertTrue("Account of unfiltered should be more then one", userDao.count("firstname", false, getUserId()) > 1);
+	}
+
+	@Test
+	public void testCountAllUsers() {
+		assertTrue("Account of users should be positive", userDao.count() > 0);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java
index 949c79e..919f9df 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java
@@ -1,180 +1,180 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.webservice;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.webservice.Constants.TNS;
-
-import java.util.List;
-
-import javax.jws.WebMethod;
-import javax.jws.WebParam;
-import javax.jws.WebService;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
-
-import org.apache.cxf.feature.Features;
-import org.apache.openmeetings.db.dao.server.ServerDao;
-import org.apache.openmeetings.db.dao.server.SessiondataDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.dto.basic.ServiceResult;
-import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
-import org.apache.openmeetings.db.dto.server.ServerDTO;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.db.entity.server.Sessiondata;
-import org.apache.openmeetings.db.util.AuthLevelUtil;
-import org.apache.openmeetings.webservice.error.ServiceException;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * This class provides method implementations necessary for OM to manage servers
- * participating in cluster.
- * 
- * @author solomax, sebawagner
- * 
- */
-@WebService(serviceName="org.apache.openmeetings.webservice.ServerWebService", targetNamespace = TNS)
-@Features(features = "org.apache.cxf.feature.LoggingFeature")
-@Produces({MediaType.APPLICATION_JSON})
-@Path("/server")
-public class ServerWebService {
-	private static final Logger log = Red5LoggerFactory.getLogger(ServerWebService.class, webAppRootKey);
-
-	@Autowired
-	private SessiondataDao sessionDao;
-	@Autowired
-	private UserDao userDao;
-	@Autowired
-	private ServerDao serverDao;
-
-	/**
-	 * Method to retrieve the list of the servers participating in cluster
-	 * 
-	 * @param sid
-	 *            - session id to identify the user making request
-	 * @param start
-	 *            - server index to start with
-	 * @param max
-	 *            - Maximum server count
-	 * @return The list of servers participating in cluster
-	 */
-	@WebMethod
-	@GET
-	@Path("/{start}/{max}")
-	public List<ServerDTO> getServers(@QueryParam("sid") @WebParam(name="sid") String sid
-			, @PathParam("start") @WebParam(name="start") int start
-			, @PathParam("max") @WebParam(name="max") int max
-			) throws ServiceException
-	{
-		log.debug("getServers enter");
-		Sessiondata sd = sessionDao.check(sid);
-
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) {
-			return ServerDTO.list(serverDao.get(start, max));
-		} else {
-			log.warn("Insuffisient permissions");
-			throw new ServiceException("Insufficient permissions"); //TODO code -26
-		}
-	}
-
-	/**
-	 * Method to retrieve the total count of the servers participating in
-	 * cluster
-	 * 
-	 * @param sid
-	 *            - session id to identify the user making request
-	 * @return total count of the servers participating in cluster
-	 */
-	@WebMethod
-	@GET
-	@Path("/count")
-	public long count(@QueryParam("sid") @WebParam(name="sid") String sid) throws ServiceException {
-		log.debug("getServerCount enter");
-		Sessiondata sd = sessionDao.check(sid);
-
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) {
-			return serverDao.count();
-		} else {
-			throw new ServiceException("Insufficient permissions"); //TODO code -26
-		}
-	}
-
-	/**
-	 * Method to add/update server
-	 * 
-	 * @param sid
-	 *            - session id to identify the user making request
-	 * @param server
-	 *            - server to add/update
-	 * @return the id of saved server
-	 */
-	@WebMethod
-	@POST
-	@Path("/")
-	public ServerDTO add(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="server") @QueryParam("server") ServerDTO server) throws ServiceException {
-		log.debug("saveServerCount enter");
-		Sessiondata sd = sessionDao.check(sid);
-		Long userId = sd.getUserId();
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
-			Server s = server.get();
-			return new ServerDTO(serverDao.update(s, userId));
-		} else {
-			log.warn("Insuffisient permissions");
-			throw new ServiceException("Insufficient permissions"); //TODO code -26
-		}
-	}
-
-	/**
-	 * Method to delete server
-	 * 
-	 * @param sid
-	 *            - session id to identify the user making request
-	 * @param id
-	 *            - the id of the server to delete
-	 * @return true if the server was deleted, false otherwise
-	 */
-	@WebMethod
-	@DELETE
-	@Path("/{id}")
-	public ServiceResult delete(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="id") @PathParam("id") long id) throws ServiceException {
-		log.debug("saveServerCount enter");
-		Sessiondata sd = sessionDao.check(sid);
-		Long userId = sd.getUserId();
-
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
-			Server s = serverDao.get(id);
-			if (s != null) {
-				serverDao.delete(s, userId);
-				return new ServiceResult(id, "Deleted", Type.SUCCESS);
-			}
-			return new ServiceResult(0L, "Not found", Type.SUCCESS);
-		} else {
-			log.warn("Insuffisient permissions");
-			throw new ServiceException("Insufficient permissions"); //TODO code -26
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.webservice;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.webservice.Constants.TNS;
+
+import java.util.List;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.cxf.feature.Features;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.ServiceResult;
+import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
+import org.apache.openmeetings.db.dto.server.ServerDTO;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.util.AuthLevelUtil;
+import org.apache.openmeetings.webservice.error.ServiceException;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * This class provides method implementations necessary for OM to manage servers
+ * participating in cluster.
+ * 
+ * @author solomax, sebawagner
+ * 
+ */
+@WebService(serviceName="org.apache.openmeetings.webservice.ServerWebService", targetNamespace = TNS)
+@Features(features = "org.apache.cxf.feature.LoggingFeature")
+@Produces({MediaType.APPLICATION_JSON})
+@Path("/server")
+public class ServerWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(ServerWebService.class, webAppRootKey);
+
+	@Autowired
+	private SessiondataDao sessionDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private ServerDao serverDao;
+
+	/**
+	 * Method to retrieve the list of the servers participating in cluster
+	 * 
+	 * @param sid
+	 *            - session id to identify the user making request
+	 * @param start
+	 *            - server index to start with
+	 * @param max
+	 *            - Maximum server count
+	 * @return The list of servers participating in cluster
+	 */
+	@WebMethod
+	@GET
+	@Path("/{start}/{max}")
+	public List<ServerDTO> getServers(@QueryParam("sid") @WebParam(name="sid") String sid
+			, @PathParam("start") @WebParam(name="start") int start
+			, @PathParam("max") @WebParam(name="max") int max
+			) throws ServiceException
+	{
+		log.debug("getServers enter");
+		Sessiondata sd = sessionDao.check(sid);
+
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) {
+			return ServerDTO.list(serverDao.get(start, max));
+		} else {
+			log.warn("Insuffisient permissions");
+			throw new ServiceException("Insufficient permissions"); //TODO code -26
+		}
+	}
+
+	/**
+	 * Method to retrieve the total count of the servers participating in
+	 * cluster
+	 * 
+	 * @param sid
+	 *            - session id to identify the user making request
+	 * @return total count of the servers participating in cluster
+	 */
+	@WebMethod
+	@GET
+	@Path("/count")
+	public long count(@QueryParam("sid") @WebParam(name="sid") String sid) throws ServiceException {
+		log.debug("getServerCount enter");
+		Sessiondata sd = sessionDao.check(sid);
+
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) {
+			return serverDao.count();
+		} else {
+			throw new ServiceException("Insufficient permissions"); //TODO code -26
+		}
+	}
+
+	/**
+	 * Method to add/update server
+	 * 
+	 * @param sid
+	 *            - session id to identify the user making request
+	 * @param server
+	 *            - server to add/update
+	 * @return the id of saved server
+	 */
+	@WebMethod
+	@POST
+	@Path("/")
+	public ServerDTO add(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="server") @QueryParam("server") ServerDTO server) throws ServiceException {
+		log.debug("saveServerCount enter");
+		Sessiondata sd = sessionDao.check(sid);
+		Long userId = sd.getUserId();
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
+			Server s = server.get();
+			return new ServerDTO(serverDao.update(s, userId));
+		} else {
+			log.warn("Insuffisient permissions");
+			throw new ServiceException("Insufficient permissions"); //TODO code -26
+		}
+	}
+
+	/**
+	 * Method to delete server
+	 * 
+	 * @param sid
+	 *            - session id to identify the user making request
+	 * @param id
+	 *            - the id of the server to delete
+	 * @return true if the server was deleted, false otherwise
+	 */
+	@WebMethod
+	@DELETE
+	@Path("/{id}")
+	public ServiceResult delete(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="id") @PathParam("id") long id) throws ServiceException {
+		log.debug("saveServerCount enter");
+		Sessiondata sd = sessionDao.check(sid);
+		Long userId = sd.getUserId();
+
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
+			Server s = serverDao.get(id);
+			if (s != null) {
+				serverDao.delete(s, userId);
+				return new ServiceResult(id, "Deleted", Type.SUCCESS);
+			}
+			return new ServiceResult(0L, "Not found", Type.SUCCESS);
+		} else {
+			log.warn("Insuffisient permissions");
+			throw new ServiceException("Insufficient permissions"); //TODO code -26
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/SlaveHTTPConnectionManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/SlaveHTTPConnectionManager.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/SlaveHTTPConnectionManager.java
index ad3cdf7..1f83615 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/SlaveHTTPConnectionManager.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/SlaveHTTPConnectionManager.java
@@ -1,99 +1,99 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.webservice.cluster;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.openmeetings.core.remote.ISlaveHTTPConnectionManager;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-/**
- * Manages connections to the other nodes of the cluster.
- * 
- * Use-case: When you kick a user via the admin-panel, it is probably on anther server.
- * So you need to perform a REST call to the node and let that node do the actual disconnect.
- * 
- * @author sebawagner
- *
- */
-public class SlaveHTTPConnectionManager implements ISlaveHTTPConnectionManager {
-	private static Logger log = Red5LoggerFactory.getLogger(SlaveHTTPConnectionManager.class, webAppRootKey);
-
-	/**
-	 * We store the list of RestClients in the memory, so that we can simply
-	 * call ping to get the load, without the need to get a new session Hash and
-	 * to login again. <br/>
-	 * There can be only one RestClient per server, so we use the primary key of
-	 * the server to store the RestClient.
-	 */
-	private static Map<Long, RestClient> restClientsSessionStore = new ConcurrentHashMap<>();
-
-	/**
-	 * Synchronized, cause nobody should manipulate the object while another
-	 * process requests it, the scheduler could run several times and request
-	 * the same object, add or remove it.<br/>
-	 * If there is no object yet, create one.
-	 * 
-	 * @param server
-	 */
-	private static RestClient getRestClient(Server server) {
-		RestClient restClient = restClientsSessionStore.get(server.getId());
-
-		// check if any values of the server have been changed,
-		// if yes, we need a new RestClient to make sure it will re-login to the
-		// changed server details
-		if (restClient != null && restClient.hasServerDetailsChanged(server)) {
-			log.debug("Server details changed, get new rest client");
-			restClient = null;
-		}
-
-		if (restClient == null) {
-			restClient = new RestClient(server);
-			restClientsSessionStore.put(server.getId(), restClient);
-		}
-		return restClient;
-	}
-
-	/**
-	 * Gets the current {@link RestClient} from the session store and then
-	 * performs a kickUser on that. It is not possible that there is no
-	 * {@link RestClient}, because if you want to kick a user from a slave, the
-	 * master <i>must</i> already have loaded the sessions from the slave, so
-	 * there logically <i>must</i> by a {@link RestClient} available that has an 
-	 * open connection to that slave / {@link Server}
-	 * 
-	 * @param serverId
-	 * @param publicSID
-	 */
-	@Override
-	public void kickSlaveUser(Server server, String publicSID) throws Exception {
-		RestClient rClient = getRestClient(server);
-		
-		if (rClient == null) {
-			throw new Exception("No RestClient found for server " + server);
-		}
-		
-		rClient.kickUser(publicSID);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.webservice.cluster;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.openmeetings.core.remote.ISlaveHTTPConnectionManager;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Manages connections to the other nodes of the cluster.
+ * 
+ * Use-case: When you kick a user via the admin-panel, it is probably on anther server.
+ * So you need to perform a REST call to the node and let that node do the actual disconnect.
+ * 
+ * @author sebawagner
+ *
+ */
+public class SlaveHTTPConnectionManager implements ISlaveHTTPConnectionManager {
+	private static Logger log = Red5LoggerFactory.getLogger(SlaveHTTPConnectionManager.class, webAppRootKey);
+
+	/**
+	 * We store the list of RestClients in the memory, so that we can simply
+	 * call ping to get the load, without the need to get a new session Hash and
+	 * to login again. <br/>
+	 * There can be only one RestClient per server, so we use the primary key of
+	 * the server to store the RestClient.
+	 */
+	private static Map<Long, RestClient> restClientsSessionStore = new ConcurrentHashMap<>();
+
+	/**
+	 * Synchronized, cause nobody should manipulate the object while another
+	 * process requests it, the scheduler could run several times and request
+	 * the same object, add or remove it.<br/>
+	 * If there is no object yet, create one.
+	 * 
+	 * @param server
+	 */
+	private static RestClient getRestClient(Server server) {
+		RestClient restClient = restClientsSessionStore.get(server.getId());
+
+		// check if any values of the server have been changed,
+		// if yes, we need a new RestClient to make sure it will re-login to the
+		// changed server details
+		if (restClient != null && restClient.hasServerDetailsChanged(server)) {
+			log.debug("Server details changed, get new rest client");
+			restClient = null;
+		}
+
+		if (restClient == null) {
+			restClient = new RestClient(server);
+			restClientsSessionStore.put(server.getId(), restClient);
+		}
+		return restClient;
+	}
+
+	/**
+	 * Gets the current {@link RestClient} from the session store and then
+	 * performs a kickUser on that. It is not possible that there is no
+	 * {@link RestClient}, because if you want to kick a user from a slave, the
+	 * master <i>must</i> already have loaded the sessions from the slave, so
+	 * there logically <i>must</i> by a {@link RestClient} available that has an 
+	 * open connection to that slave / {@link Server}
+	 * 
+	 * @param serverId
+	 * @param publicSID
+	 */
+	@Override
+	public void kickSlaveUser(Server server, String publicSID) throws Exception {
+		RestClient rClient = getRestClient(server);
+		
+		if (rClient == null) {
+			throw new Exception("No RestClient found for server " + server);
+		}
+		
+		rClient.kickUser(publicSID);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-webservice/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/site/site.xml b/openmeetings-webservice/src/site/site.xml
index c26954e..0d9f35c 100644
--- a/openmeetings-webservice/src/site/site.xml
+++ b/openmeetings-webservice/src/site/site.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/src/site/site.xml
----------------------------------------------------------------------
diff --git a/src/site/site.xml b/src/site/site.xml
index aa78843..5727f48 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -1,77 +1,77 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<bannerLeft>
-		<name>Apache OpenMeetings</name>
-		<src>http://openmeetings.apache.org/images/logo.png</src>
-		<href>http://openmeetings.apache.org/index.html</href>
-	</bannerLeft>
-	<bannerRight>
-		<name>Apache</name>
-		<src>http://apache.org/img/asf_logo.png</src>
-		<href>http://apache.org</href>
-	</bannerRight>
-
-	<skin>
-		<groupId>lt.velykis.maven.skins</groupId>
-		<artifactId>reflow-maven-skin</artifactId>
-		<version>1.1.1</version>
-	</skin>
-
-	<version position="none"/>
-
-	<body>
-		<head><![CDATA[
-			<link rel="stylesheet" href="$resourcePath/css/site.css"/>
-		]]></head>
-		<links>
-			<item name="Demo" href="http://openmeetings.apache.org/demo.html"/>
-			<item name="Download" href="http://openmeetings.apache.org/downloads.html"/>
-			<item name="Wiki" href="https://cwiki.apache.org/confluence/display/OPENMEETINGS"/>
-		</links>
-		<menu ref="modules" inherit="top"/>
-	</body>
-
-	<poweredBy></poweredBy>
-
-	<custom>
-		<reflowSkin>
-			<brand>
-				<name><![CDATA[
-					<span class="color-highlight">Apache</span> OpenMeetings
-				]]></name>
-			</brand>
-			<!--absoluteResourceURL>http://localhost:5080/openmeetings/docs</absoluteResourceURL--><!-- DEVELOPMENT -->
-			<absoluteResourceURL>http://openmeetings.apache.org</absoluteResourceURL>
-			<protocolRelativeURLs>true</protocolRelativeURLs>
-			<localResources>true</localResources>
-			<theme>site</theme><!-- http://bootswatch.com/2/cerulean offline -->
-			<bottomNav maxSpan="12">
-				<column>General</column>
-				<column>Installation</column>
-				<column>Community</column>
-				<column>Development</column>
-			</bottomNav>
-			<toc>sidebar</toc>
-			<skinAttribution>false</skinAttribution>
-			<endContent>
-				<script src="$resourcePath/js/site.js"></script>
-			</endContent>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<bannerLeft>
+		<name>Apache OpenMeetings</name>
+		<src>http://openmeetings.apache.org/images/logo.png</src>
+		<href>http://openmeetings.apache.org/index.html</href>
+	</bannerLeft>
+	<bannerRight>
+		<name>Apache</name>
+		<src>http://apache.org/img/asf_logo.png</src>
+		<href>http://apache.org</href>
+	</bannerRight>
+
+	<skin>
+		<groupId>lt.velykis.maven.skins</groupId>
+		<artifactId>reflow-maven-skin</artifactId>
+		<version>1.1.1</version>
+	</skin>
+
+	<version position="none"/>
+
+	<body>
+		<head><![CDATA[
+			<link rel="stylesheet" href="$resourcePath/css/site.css"/>
+		]]></head>
+		<links>
+			<item name="Demo" href="http://openmeetings.apache.org/demo.html"/>
+			<item name="Download" href="http://openmeetings.apache.org/downloads.html"/>
+			<item name="Wiki" href="https://cwiki.apache.org/confluence/display/OPENMEETINGS"/>
+		</links>
+		<menu ref="modules" inherit="top"/>
+	</body>
+
+	<poweredBy></poweredBy>
+
+	<custom>
+		<reflowSkin>
+			<brand>
+				<name><![CDATA[
+					<span class="color-highlight">Apache</span> OpenMeetings
+				]]></name>
+			</brand>
+			<!--absoluteResourceURL>http://localhost:5080/openmeetings/docs</absoluteResourceURL--><!-- DEVELOPMENT -->
+			<absoluteResourceURL>http://openmeetings.apache.org</absoluteResourceURL>
+			<protocolRelativeURLs>true</protocolRelativeURLs>
+			<localResources>true</localResources>
+			<theme>site</theme><!-- http://bootswatch.com/2/cerulean offline -->
+			<bottomNav maxSpan="12">
+				<column>General</column>
+				<column>Installation</column>
+				<column>Community</column>
+				<column>Development</column>
+			</bottomNav>
+			<toc>sidebar</toc>
+			<skinAttribution>false</skinAttribution>
+			<endContent>
+				<script src="$resourcePath/js/site.js"></script>
+			</endContent>
+		</reflowSkin>
+	</custom>
+</project>


[07/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
index dd6c2a7..81c8468 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
@@ -1,177 +1,177 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.common;
-
-import java.io.Serializable;
-import java.util.function.Consumer;
-
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.markup.html.border.Border;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.EmptyPanel;
-import org.apache.wicket.model.Model;
-
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageFormDialog;
-
-public abstract class ConfirmableAjaxBorder extends Border {
-	private static final long serialVersionUID = 1L;
-	private static final String DIALOG_ID = "dialog";
-	protected final Form<?> form = new Form<>("form");
-	private final ConfirmableBorderDialog dialog;
-
-	public ConfirmableAjaxBorder(String id, String title, String message) {
-		this(id, title, message, null, null);
-	}
-
-	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {
-		this(id, title, message, form, null);
-	}
-
-	public ConfirmableAjaxBorder(String id, String title, String message, ConfirmableBorderDialog dialog) {
-		this(id, title, message, null, dialog);
-	}
-
-	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> userForm, ConfirmableBorderDialog dialog) {
-		super(id, Model.of(message));
-		if (dialog == null) {
-			this.dialog = new ConfirmableBorderDialog(DIALOG_ID, title, message, userForm == null ? form : userForm);
-			form.add(this.dialog);
-		} else {
-			this.dialog = dialog;
-			form.add(new EmptyPanel(DIALOG_ID));
-		}
-		this.dialog.setSubmitHandler((Consumer<AjaxRequestTarget> & Serializable)(t)->onSubmit(t));
-		this.dialog.setErrorHandler((Consumer<AjaxRequestTarget> & Serializable)(t)->onError(t));
-		setOutputMarkupId(true);
-	}
-
-	public AbstractFormDialog<?> getDialog() {
-		return dialog;
-	}
-
-	@Override
-	protected void onInitialize() {
-		super.onInitialize();
-		add(new AjaxEventBehavior("click") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-				super.updateAjaxAttributes(attributes);
-				ConfirmableAjaxBorder.this.updateAjaxAttributes(attributes);
-			}
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				if (isClickable()) {
-					dialog.open(target);
-				}
-			}
-		});
-		addToBorder(form);
-	}
-
-	protected boolean isClickable() {
-		return true;
-	}
-
-	/**
-	 * Gives a chance to the specializations to modify the attributes.
-	 *
-	 * @param attributes attributes
-	 */
-	protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-	}
-
-	protected void onEvent(AjaxRequestTarget target) {
-		dialog.open(target);
-	}
-
-	/**
-	 * Triggered when the form is submitted, but the validation failed
-	 *
-	 * @param target the {@link AjaxRequestTarget}
-	 * @param form the {@link Form}
-	 */
-	protected void onError(AjaxRequestTarget target) {
-	}
-
-	/**
-	 * Triggered when the form is submitted, and the validation succeed
-	 *
-	 * @param target the {@link AjaxRequestTarget}
-	 * @param form the {@link Form}
-	 */
-	protected abstract void onSubmit(AjaxRequestTarget target);
-
-	public static class ConfirmableBorderDialog extends MessageFormDialog {
-		private static final long serialVersionUID = 1L;
-		private Form<?> form;
-		private Consumer<AjaxRequestTarget> submitHandler = null;
-		private Consumer<AjaxRequestTarget> errorHandler = null;
-
-		public ConfirmableBorderDialog(String id, String title, String message) {
-			this(id, title, message, null);
-		}
-
-		public ConfirmableBorderDialog(String id, String title, String message, Form<?> form) {
-			super(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN);
-			this.form = form;
-		}
-
-		public void setSubmitHandler(Consumer<AjaxRequestTarget> submitHandler) {
-			this.submitHandler = submitHandler;
-		}
-
-		public void setErrorHandler(Consumer<AjaxRequestTarget> errorHandler) {
-			this.errorHandler = errorHandler;
-		}
-
-		@Override
-		public DialogButton getSubmitButton() {
-			return this.findButton(OK);
-		}
-
-		@Override
-		public Form<?> getForm() {
-			return this.form;
-		}
-
-		@Override
-		protected void onError(AjaxRequestTarget target) {
-			super.close(target, null); // closes the dialog on error.
-			if (errorHandler != null) {
-				errorHandler.accept(target);
-			}
-		}
-
-		@Override
-		protected void onSubmit(AjaxRequestTarget target) {
-			if (submitHandler != null) {
-				submitHandler.accept(target);
-			}
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.io.Serializable;
+import java.util.function.Consumer;
+
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.markup.html.border.Border;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.EmptyPanel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageFormDialog;
+
+public abstract class ConfirmableAjaxBorder extends Border {
+	private static final long serialVersionUID = 1L;
+	private static final String DIALOG_ID = "dialog";
+	protected final Form<?> form = new Form<>("form");
+	private final ConfirmableBorderDialog dialog;
+
+	public ConfirmableAjaxBorder(String id, String title, String message) {
+		this(id, title, message, null, null);
+	}
+
+	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {
+		this(id, title, message, form, null);
+	}
+
+	public ConfirmableAjaxBorder(String id, String title, String message, ConfirmableBorderDialog dialog) {
+		this(id, title, message, null, dialog);
+	}
+
+	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> userForm, ConfirmableBorderDialog dialog) {
+		super(id, Model.of(message));
+		if (dialog == null) {
+			this.dialog = new ConfirmableBorderDialog(DIALOG_ID, title, message, userForm == null ? form : userForm);
+			form.add(this.dialog);
+		} else {
+			this.dialog = dialog;
+			form.add(new EmptyPanel(DIALOG_ID));
+		}
+		this.dialog.setSubmitHandler((Consumer<AjaxRequestTarget> & Serializable)(t)->onSubmit(t));
+		this.dialog.setErrorHandler((Consumer<AjaxRequestTarget> & Serializable)(t)->onError(t));
+		setOutputMarkupId(true);
+	}
+
+	public AbstractFormDialog<?> getDialog() {
+		return dialog;
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+				super.updateAjaxAttributes(attributes);
+				ConfirmableAjaxBorder.this.updateAjaxAttributes(attributes);
+			}
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				if (isClickable()) {
+					dialog.open(target);
+				}
+			}
+		});
+		addToBorder(form);
+	}
+
+	protected boolean isClickable() {
+		return true;
+	}
+
+	/**
+	 * Gives a chance to the specializations to modify the attributes.
+	 *
+	 * @param attributes attributes
+	 */
+	protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+	}
+
+	protected void onEvent(AjaxRequestTarget target) {
+		dialog.open(target);
+	}
+
+	/**
+	 * Triggered when the form is submitted, but the validation failed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected void onError(AjaxRequestTarget target) {
+	}
+
+	/**
+	 * Triggered when the form is submitted, and the validation succeed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected abstract void onSubmit(AjaxRequestTarget target);
+
+	public static class ConfirmableBorderDialog extends MessageFormDialog {
+		private static final long serialVersionUID = 1L;
+		private Form<?> form;
+		private Consumer<AjaxRequestTarget> submitHandler = null;
+		private Consumer<AjaxRequestTarget> errorHandler = null;
+
+		public ConfirmableBorderDialog(String id, String title, String message) {
+			this(id, title, message, null);
+		}
+
+		public ConfirmableBorderDialog(String id, String title, String message, Form<?> form) {
+			super(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN);
+			this.form = form;
+		}
+
+		public void setSubmitHandler(Consumer<AjaxRequestTarget> submitHandler) {
+			this.submitHandler = submitHandler;
+		}
+
+		public void setErrorHandler(Consumer<AjaxRequestTarget> errorHandler) {
+			this.errorHandler = errorHandler;
+		}
+
+		@Override
+		public DialogButton getSubmitButton() {
+			return this.findButton(OK);
+		}
+
+		@Override
+		public Form<?> getForm() {
+			return this.form;
+		}
+
+		@Override
+		protected void onError(AjaxRequestTarget target) {
+			super.close(target, null); // closes the dialog on error.
+			if (errorHandler != null) {
+				errorHandler.accept(target);
+			}
+		}
+
+		@Override
+		protected void onSubmit(AjaxRequestTarget target) {
+			if (submitHandler != null) {
+				submitHandler.accept(target);
+			}
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.html
index 3f72418..24c7a40 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.html
@@ -1,27 +1,27 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div id="header">
-			<span wicket:id="appName"></span>
-		</div>
-	</wicket:panel>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div id="header">
+			<span wicket:id="appName"></span>
+		</div>
+	</wicket:panel>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.java
index 16dfd76..5c1218e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/HeaderPanel.java
@@ -1,32 +1,32 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.common;
-
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.util.string.Strings;
-
-public class HeaderPanel extends BasePanel {
-	private static final long serialVersionUID = 1L;
-
-	public HeaderPanel(String id, String appName) {
-		super(id);
-		setOutputMarkupPlaceholderTag(true);
-		add(new Label("appName", Strings.isEmpty(appName) ? "&nbsp;" : appName).setEscapeModelStrings(false));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class HeaderPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+
+	public HeaderPanel(String id, String appName) {
+		super(id);
+		setOutputMarkupPlaceholderTag(true);
+		add(new Label("appName", Strings.isEmpty(appName) ? "&nbsp;" : appName).setEscapeModelStrings(false));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
index 9b178ca..d9e9391 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-	    <a wicket:id="first" class="goto icon ui-icon ui-icon-seek-first"></a>
-	    <a wicket:id="prev" class="goto icon ui-icon ui-icon-seek-prev"></a>
-	    <span wicket:id="navigation" class="goto">
-	        <a wicket:id="pageLink" href="#"><span wicket:id="pageNumber">5</span></a>
-	    </span>
-	    <a wicket:id="next" class="goto icon ui-icon ui-icon-seek-next"></a>
-	    <a wicket:id="last" class="goto icon ui-icon ui-icon-seek-end"></a>
-	</wicket:panel>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+	    <a wicket:id="first" class="goto icon ui-icon ui-icon-seek-first"></a>
+	    <a wicket:id="prev" class="goto icon ui-icon ui-icon-seek-prev"></a>
+	    <span wicket:id="navigation" class="goto">
+	        <a wicket:id="pageLink" href="#"><span wicket:id="pageNumber">5</span></a>
+	    </span>
+	    <a wicket:id="next" class="goto icon ui-icon ui-icon-seek-next"></a>
+	    <a wicket:id="last" class="goto icon ui-icon ui-icon-seek-end"></a>
+	</wicket:panel>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
index 596ab5f..8f5b7cf 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
@@ -1,32 +1,32 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.common;
-
-import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
-import org.apache.wicket.markup.html.navigation.paging.IPageable;
-
-public class OmPagingNavigator extends AjaxPagingNavigator {
-
-	private static final long serialVersionUID = 1L;
-	
-	public OmPagingNavigator(String id, IPageable pageable) {
-		super(id, pageable);
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
+import org.apache.wicket.markup.html.navigation.paging.IPageable;
+
+public class OmPagingNavigator extends AjaxPagingNavigator {
+
+	private static final long serialVersionUID = 1L;
+	
+	public OmPagingNavigator(String id, IPageable pageable) {
+		super(id, pageable);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.html
index 0912301..c9f997f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<div wicket:id="menu" class="ui-widget-header"></div>
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="menu" class="ui-widget-header"></div>
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
index f22381f..b15d93d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
@@ -1,69 +1,69 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.common.menu;
-
-import java.util.List;
-
-import org.apache.openmeetings.web.common.BasePanel;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.util.string.Strings;
-
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
-import com.googlecode.wicket.jquery.ui.widget.menu.Menu;
-
-/**
- * Loads the menu items into the main area
- *
- * @author sebawagner
- *
- */
-public class MenuPanel extends BasePanel {
-	private static final long serialVersionUID = 1L;
-
-	public MenuPanel(String id, List<IMenuItem> menus) {
-		super(id);
-		setOutputMarkupPlaceholderTag(true);
-		setMarkupId(id);
-		add(new Menu("menu", menus, new Options().set("icons", "{ submenu: 'ui-icon-triangle-1-s' }")
-					.set("position", "{ my: 'left top', at: 'left bottom'}"))
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void addMenuItem(ListItem<IMenuItem> item, IMenuItem menuItem) {
-				super.addMenuItem(item, menuItem);
-				MenuItem m = (MenuItem)menuItem;
-				item.add(AttributeModifier.append("class", m.isTop() ? "top" : "sub"));
-				if (!Strings.isEmpty(m.getDesc())) {
-					item.add(AttributeModifier.append("title", m.getDesc()));
-				}
-				if (!Strings.isEmpty(m.getIcon())) {
-					item.add(AttributeModifier.append("class", m.getIcon()));
-				}
-			}
-		});
-	}
-
-	public void update(IPartialPageRequestHandler target) {
-		target.add(this);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common.menu;
+
+import java.util.List;
+
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.util.string.Strings;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
+import com.googlecode.wicket.jquery.ui.widget.menu.Menu;
+
+/**
+ * Loads the menu items into the main area
+ *
+ * @author sebawagner
+ *
+ */
+public class MenuPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+
+	public MenuPanel(String id, List<IMenuItem> menus) {
+		super(id);
+		setOutputMarkupPlaceholderTag(true);
+		setMarkupId(id);
+		add(new Menu("menu", menus, new Options().set("icons", "{ submenu: 'ui-icon-triangle-1-s' }")
+					.set("position", "{ my: 'left top', at: 'left bottom'}"))
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void addMenuItem(ListItem<IMenuItem> item, IMenuItem menuItem) {
+				super.addMenuItem(item, menuItem);
+				MenuItem m = (MenuItem)menuItem;
+				item.add(AttributeModifier.append("class", m.isTop() ? "top" : "sub"));
+				if (!Strings.isEmpty(m.getDesc())) {
+					item.add(AttributeModifier.append("title", m.getDesc()));
+				}
+				if (!Strings.isEmpty(m.getIcon())) {
+					item.add(AttributeModifier.append("class", m.getIcon()));
+				}
+			}
+		});
+	}
+
+	public void update(IPartialPageRequestHandler target) {
+		target.add(this);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/DataViewContainer.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/DataViewContainer.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/DataViewContainer.java
index bef8153..a9fd58d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/DataViewContainer.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/DataViewContainer.java
@@ -1,53 +1,53 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.data;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-
-public class DataViewContainer<T extends IDataProviderEntity> implements Serializable {
-	private static final long serialVersionUID = 1L;
-	public WebMarkupContainer container;
-	public SearchableDataView<T> view;
-	public PagedEntityListPanel navigator;
-	private List<OmOrderByBorder<T>> orderLinks = new ArrayList<>();
-
-	public DataViewContainer(WebMarkupContainer container, SearchableDataView<T> view, PagedEntityListPanel navigator) {
-		this.container = container;
-		this.view = view;
-		this.navigator = navigator;
-	}
-
-	public DataViewContainer<T> addLink(OmOrderByBorder<T> link) {
-		orderLinks.add(link);
-		return this;
-	}
-
-	public OmOrderByBorder<T>[] getLinks() {
-		@SuppressWarnings("unchecked")
-		OmOrderByBorder<T>[] a = new OmOrderByBorder[0];
-		return orderLinks.toArray(a);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+public class DataViewContainer<T extends IDataProviderEntity> implements Serializable {
+	private static final long serialVersionUID = 1L;
+	public WebMarkupContainer container;
+	public SearchableDataView<T> view;
+	public PagedEntityListPanel navigator;
+	private List<OmOrderByBorder<T>> orderLinks = new ArrayList<>();
+
+	public DataViewContainer(WebMarkupContainer container, SearchableDataView<T> view, PagedEntityListPanel navigator) {
+		this.container = container;
+		this.view = view;
+		this.navigator = navigator;
+	}
+
+	public DataViewContainer<T> addLink(OmOrderByBorder<T> link) {
+		orderLinks.add(link);
+		return this;
+	}
+
+	public OmOrderByBorder<T>[] getLinks() {
+		@SuppressWarnings("unchecked")
+		OmOrderByBorder<T>[] a = new OmOrderByBorder[0];
+		return orderLinks.toArray(a);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/OmOrderByBorder.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
index f0e077c..7625924 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
@@ -1,45 +1,45 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.data;
-
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByBorder;
-
-public class OmOrderByBorder<T extends IDataProviderEntity> extends AjaxFallbackOrderByBorder<String> {
-	private static final long serialVersionUID = 1L;
-	private DataViewContainer<T> container;
-
-	public OmOrderByBorder(final String id, final String property, DataViewContainer<T> container) {
-		super(id, property, container.view.getDataProvider());
-		this.container = container;
-		setOutputMarkupId(true);
-	}
-
-	@Override
-	protected void onSortChanged() {
-		container.view.setCurrentPage(0);
-	}
-
-	@Override
-	protected void onAjaxClick(AjaxRequestTarget target) {
-		target.add(container.container, container.navigator);
-		target.add(container.getLinks());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByBorder;
+
+public class OmOrderByBorder<T extends IDataProviderEntity> extends AjaxFallbackOrderByBorder<String> {
+	private static final long serialVersionUID = 1L;
+	private DataViewContainer<T> container;
+
+	public OmOrderByBorder(final String id, final String property, DataViewContainer<T> container) {
+		super(id, property, container.view.getDataProvider());
+		this.container = container;
+		setOutputMarkupId(true);
+	}
+
+	@Override
+	protected void onSortChanged() {
+		container.view.setCurrentPage(0);
+	}
+
+	@Override
+	protected void onAjaxClick(AjaxRequestTarget target) {
+		target.add(container.container, container.navigator);
+		target.add(container.getLinks());
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/SearchableDataProvider.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
index 15c160d..6c88d6b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
@@ -1,92 +1,92 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.data;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import java.util.Iterator;
-
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-
-/**
- * provides function to fill paging tables
- *
- * @author swagner
- *
- * @param <T>
- */
-public class SearchableDataProvider<T extends IDataProviderEntity> extends SortableDataProvider<T, String> {
-	private static final long serialVersionUID = 1L;
-	protected Class<? extends IDataProviderDao<T>> clazz;
-	protected String search = null;
-
-	public SearchableDataProvider(Class<? extends IDataProviderDao<T>> c) {
-		this.clazz = c;
-	}
-
-	@Override
-	public void detach() {
-		// does nothing
-	}
-
-	protected IDataProviderDao<T> getDao() {
-		return getBean(clazz);
-	}
-
-	protected String getSortStr() {
-		String result = null;
-		if (getSort() != null) {
-			result = getSort().getProperty() + " " + (getSort().isAscending() ? "ASC" : "DESC");
-		}
-		return result;
-	}
-
-	@Override
-	public Iterator<? extends T> iterator(long first, long count) {
-		return (search == null && getSort() == null
-			? getDao().get((int)first, (int)count)
-			: getDao().get(search, (int)first, (int)count, getSortStr())).iterator();
-	}
-
-	@Override
-	public long size() {
-		return search == null ? getDao().count() : getDao().count(search);
-	}
-
-	@Override
-	public IModel<T> model(T object) {
-		return new CompoundPropertyModel<>(object);
-	}
-
-	public void setSearch(String search) {
-		if (search != null && !search.trim().isEmpty()) {
-			this.search = search.trim();
-		} else {
-			this.search = null;
-		}
-	}
-
-	public String getSearch() {
-		return search;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+
+/**
+ * provides function to fill paging tables
+ *
+ * @author swagner
+ *
+ * @param <T>
+ */
+public class SearchableDataProvider<T extends IDataProviderEntity> extends SortableDataProvider<T, String> {
+	private static final long serialVersionUID = 1L;
+	protected Class<? extends IDataProviderDao<T>> clazz;
+	protected String search = null;
+
+	public SearchableDataProvider(Class<? extends IDataProviderDao<T>> c) {
+		this.clazz = c;
+	}
+
+	@Override
+	public void detach() {
+		// does nothing
+	}
+
+	protected IDataProviderDao<T> getDao() {
+		return getBean(clazz);
+	}
+
+	protected String getSortStr() {
+		String result = null;
+		if (getSort() != null) {
+			result = getSort().getProperty() + " " + (getSort().isAscending() ? "ASC" : "DESC");
+		}
+		return result;
+	}
+
+	@Override
+	public Iterator<? extends T> iterator(long first, long count) {
+		return (search == null && getSort() == null
+			? getDao().get((int)first, (int)count)
+			: getDao().get(search, (int)first, (int)count, getSortStr())).iterator();
+	}
+
+	@Override
+	public long size() {
+		return search == null ? getDao().count() : getDao().count(search);
+	}
+
+	@Override
+	public IModel<T> model(T object) {
+		return new CompoundPropertyModel<>(object);
+	}
+
+	public void setSearch(String search) {
+		if (search != null && !search.trim().isEmpty()) {
+			this.search = search.trim();
+		} else {
+			this.search = null;
+		}
+	}
+
+	public String getSearch() {
+		return search;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java
index 727f4e7..ed02171 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ActivatePage.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.pages;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import java.util.Date;
-
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.entity.user.User.Right;
-import org.apache.openmeetings.db.util.AuthLevelUtil;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-public class ActivatePage extends BaseNotInitedPage {
-	private static final long serialVersionUID = 1L;
-	public static final String ACTIVATION_PARAM = "u";
-	
-	public ActivatePage(PageParameters pp) {
-		String userHash = pp.get(ACTIVATION_PARAM).toString();
-		if (userHash != null) {
-			User user = getBean(UserDao.class).getUserByActivationHash(userHash);
-
-			if (user != null && !AuthLevelUtil.hasLoginLevel(user.getRights())) {
-				// activate
-				user.getRights().add(Right.Login);
-				user.setUpdated(new Date());
-
-				getBean(UserDao.class).update(user, null);
-			}
-		}
-		setResponsePage(Application.get().getSignInPageClass());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.util.AuthLevelUtil;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class ActivatePage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+	public static final String ACTIVATION_PARAM = "u";
+	
+	public ActivatePage(PageParameters pp) {
+		String userHash = pp.get(ACTIVATION_PARAM).toString();
+		if (userHash != null) {
+			User user = getBean(UserDao.class).getUserByActivationHash(userHash);
+
+			if (user != null && !AuthLevelUtil.hasLoginLevel(user.getRights())) {
+				// activate
+				user.getRights().add(Right.Login);
+				user.setUpdated(new Date());
+
+				getBean(UserDao.class).update(user, null);
+			}
+		}
+		setResponsePage(Application.get().getSignInPageClass());
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.html
index 3171a21..a6896fa 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.html
@@ -1,32 +1,32 @@
-<!DOCTYPE html>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:extend>
-	<!-- FIXME localized versions of this file need to be created -->
-	<div class="message">
-		<b>OpenMeetings - Loading ...</b><br />
-		The server is not yet completely initialized. Please try again in a couple of seconds.<br/>
-		If this message persists for several minutes contact your Sys-Administration.<br/>
-		If that message stays forever you should check the logs located in 
-		<pre>openmeetings_install_dir/log</pre> folder, probably your database user/pwd/host is wrong!
-	</div>
-</wicket:extend>
-</html>
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<!-- FIXME localized versions of this file need to be created -->
+	<div class="message">
+		<b>OpenMeetings - Loading ...</b><br />
+		The server is not yet completely initialized. Please try again in a couple of seconds.<br/>
+		If this message persists for several minutes contact your Sys-Administration.<br/>
+		If that message stays forever you should check the logs located in 
+		<pre>openmeetings_install_dir/log</pre> folder, probably your database user/pwd/host is wrong!
+	</div>
+</wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.java
index b0e39a1..3cecb0a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/NotInitedPage.java
@@ -1,40 +1,40 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.pages;
-
-import org.apache.openmeetings.util.InitializationContainer;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.RestartResponseException;
-
-public class NotInitedPage extends BaseNotInitedPage {
-	private static final long serialVersionUID = 1L;
-	
-	public NotInitedPage() {
-		if (InitializationContainer.initComplete) {
-			continueToOriginalDestination();
-			// Ups, no original destination. Go to the home page
-			throw new RestartResponseException(Application.get().getHomePage());
-		}
-	}
-
-	@Override
-	protected String getGaCode() {
-		return null;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.RestartResponseException;
+
+public class NotInitedPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+	
+	public NotInitedPage() {
+		if (InitializationContainer.initComplete) {
+			continueToOriginalDestination();
+			// Ups, no original destination. Go to the home page
+			throw new RestartResponseException(Application.get().getHomePage());
+		}
+	}
+
+	@Override
+	protected String getGaCode() {
+		return null;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
index 4f6d993..5e39f7b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:extend>
-		<div wicket:id="resetPassword"></div>
-	</wicket:extend>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:extend>
+		<div wicket:id="resetPassword"></div>
+	</wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
index 1f6dae0..45b93a5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java
@@ -1,44 +1,44 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.pages;
-
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.pages.auth.ResetPasswordDialog;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-public class ResetPage extends BaseNotInitedPage {
-	private static final long serialVersionUID = 1L;	
-	private final String RESET_PARAM = "hash";
-	
-	public ResetPage(PageParameters pp){
-		String resetHash = pp.get(RESET_PARAM).toString();
-		if (resetHash != null){
-			Object user = Application.getBean(UserDao.class).getUserByHash(resetHash);
-			if (user instanceof User){
-				add(new ResetPasswordDialog("resetPassword", (User)user));
-			} else {
-				setResponsePage(Application.get().getSignInPageClass());		
-			}
-		} else {
-			setResponsePage(Application.get().getSignInPageClass());		
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.pages.auth.ResetPasswordDialog;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class ResetPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;	
+	private final String RESET_PARAM = "hash";
+	
+	public ResetPage(PageParameters pp){
+		String resetHash = pp.get(RESET_PARAM).toString();
+		if (resetHash != null){
+			Object user = Application.getBean(UserDao.class).getUserByHash(resetHash);
+			if (user instanceof User){
+				add(new ResetPasswordDialog("resetPassword", (User)user));
+			} else {
+				setResponsePage(Application.get().getSignInPageClass());		
+			}
+		} else {
+			setResponsePage(Application.get().getSignInPageClass());		
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
index 1163346..a72f866 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
@@ -1,29 +1,29 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<table>
-			<tr>
-				<td wicket:id="message">[message]</td>
-			</tr>
-		</table>
-	</wicket:panel>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<table>
+			<tr>
+				<td wicket:id="message">[message]</td>
+			</tr>
+		</table>
+	</wicket:panel>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
index b2f489f..f2dad62 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
@@ -1,58 +1,58 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.pages.auth;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.basic.Label;
-
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-
-public class KickMessageDialog extends AbstractDialog<String> {
-	private static final long serialVersionUID = 1L;
-
-	public KickMessageDialog(String id) {
-		super(id, "");
-	}
-
-	@Override
-	protected void onInitialize() {
-		super.onInitialize();
-		add(new Label("message", getString("606")));
-	};
-
-	@Override
-	public void onConfigure(JQueryBehavior behavior) {
-		super.onConfigure(behavior);
-		behavior.setOption("autoOpen", true);
-		behavior.setOption("closeOnEscape", false);
-		behavior.setOption("classes", "{'ui-dialog-titlebar': 'ui-corner-all no-close'}");
-		behavior.setOption("resizable", false);
-	}
-
-	@Override
-	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-		WebSession.setKickedByAdmin(false);
-		Application.get().restartResponseAtSignInPage();
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.basic.Label;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class KickMessageDialog extends AbstractDialog<String> {
+	private static final long serialVersionUID = 1L;
+
+	public KickMessageDialog(String id) {
+		super(id, "");
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new Label("message", getString("606")));
+	};
+
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("autoOpen", true);
+		behavior.setOption("closeOnEscape", false);
+		behavior.setOption("classes", "{'ui-dialog-titlebar': 'ui-corner-all no-close'}");
+		behavior.setOption("resizable", false);
+	}
+
+	@Override
+	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+		WebSession.setKickedByAdmin(false);
+		Application.get().restartResponseAtSignInPage();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
index fd73713..476a5d2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
@@ -1,43 +1,43 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<form wicket:id="form">
-		<table>
-			<tr>
-				<td><label wicket:for="login"><wicket:message key="314" /></label></td>
-				<td><input type="text" readonly wicket:id="login" /></td>
-			</tr>
-			<tr>
-				<td><label><wicket:message key="328" /></label></td>
-				<td><input type="password" wicket:id="password" /></td>
-			</tr>
-			<tr>
-				<td><label><wicket:message key="329" /></label></td>
-				<td><input type="password" wicket:id="confirmPassword" /></td>
-			</tr>
-		</table>
-		<span wicket:id="feedback"></span>
-		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
-	</form>
-	<div wicket:id="confirmReset"></div>
-</wicket:panel>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<td><label wicket:for="login"><wicket:message key="314" /></label></td>
+				<td><input type="text" readonly wicket:id="login" /></td>
+			</tr>
+			<tr>
+				<td><label><wicket:message key="328" /></label></td>
+				<td><input type="password" wicket:id="password" /></td>
+			</tr>
+			<tr>
+				<td><label><wicket:message key="329" /></label></td>
+				<td><input type="password" wicket:id="confirmPassword" /></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+	<div wicket:id="confirmReset"></div>
+</wicket:panel>
 </html>
\ No newline at end of file


[23/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/FormatHelper.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/FormatHelper.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/FormatHelper.java
index c1788f7..64409b7 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/FormatHelper.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/FormatHelper.java
@@ -1,81 +1,81 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.util;
-
-import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;
-
-import java.util.regex.Pattern;
-
-import org.apache.openmeetings.db.entity.user.User;
-
-public class FormatHelper {
-	/**
-	 * taken from BidiUtils
-	 * 
-	 * A regular expression for matching right-to-left language codes. See
-	 * {@link #isRtlLanguage} for the design.
-	 */
-	private static final Pattern RtlLocalesRe = Pattern.compile("^(ar|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Arab|Hebr|Thaa|Nkoo|Tfng))"
-					+ "(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)");
-
-	/**
-	 * Check if a BCP 47 / III language code indicates an RTL language, i.e.
-	 * either: - a language code explicitly specifying one of the right-to-left
-	 * scripts, e.g. "az-Arab", or
-	 * <p>
-	 * - a language code specifying one of the languages normally written in a
-	 * right-to-left script, e.g. "fa" (Farsi), except ones explicitly
-	 * specifying Latin or Cyrillic script (which are the usual LTR
-	 * alternatives).
-	 * <p>
-	 * The list of right-to-left scripts appears in the 100-199 range in
-	 * http://www.unicode.org/iso15924/iso15924-num.html, of which Arabic and
-	 * Hebrew are by far the most widely used. We also recognize Thaana, N'Ko,
-	 * and Tifinagh, which also have significant modern usage. The rest (Syriac,
-	 * Samaritan, Mandaic, etc.) seem to have extremely limited or no modern
-	 * usage and are not recognized. The languages usually written in a
-	 * right-to-left script are taken as those with Suppress-Script:
-	 * Hebr|Arab|Thaa|Nkoo|Tfng in
-	 * http://www.iana.org/assignments/language-subtag-registry, as well as
-	 * Sindhi (sd) and Uyghur (ug). The presence of other subtags of the
-	 * language code, e.g. regions like EG (Egypt), is ignored.
-	 */
-	public static boolean isRtlLanguage(String languageString) {
-		return languageString != null && RtlLocalesRe.matcher(languageString).find();
-	}
-
-	public static String formatUser(User u) {
-		return formatUser(u, false);
-	}
-
-	// TODO check RIGHTS here (email might need to be hidden)
-	public static String formatUser(User u, boolean isHTMLEscape) {
-		String user = "";
-		if (u != null) {
-			String email = u.getAddress() == null ? "" : u.getAddress().getEmail();
-			if (u.getFirstname() == null && u.getLastname() == null) {
-				user = email;
-			} else {
-				user = String.format("\"%s %s\" <%s>", u.getFirstname(), u.getLastname(), email);
-			}
-			user = isHTMLEscape ? escapeHtml4(user) : user;
-		}
-		return user;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.util;
+
+import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;
+
+import java.util.regex.Pattern;
+
+import org.apache.openmeetings.db.entity.user.User;
+
+public class FormatHelper {
+	/**
+	 * taken from BidiUtils
+	 * 
+	 * A regular expression for matching right-to-left language codes. See
+	 * {@link #isRtlLanguage} for the design.
+	 */
+	private static final Pattern RtlLocalesRe = Pattern.compile("^(ar|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Arab|Hebr|Thaa|Nkoo|Tfng))"
+					+ "(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)");
+
+	/**
+	 * Check if a BCP 47 / III language code indicates an RTL language, i.e.
+	 * either: - a language code explicitly specifying one of the right-to-left
+	 * scripts, e.g. "az-Arab", or
+	 * <p>
+	 * - a language code specifying one of the languages normally written in a
+	 * right-to-left script, e.g. "fa" (Farsi), except ones explicitly
+	 * specifying Latin or Cyrillic script (which are the usual LTR
+	 * alternatives).
+	 * <p>
+	 * The list of right-to-left scripts appears in the 100-199 range in
+	 * http://www.unicode.org/iso15924/iso15924-num.html, of which Arabic and
+	 * Hebrew are by far the most widely used. We also recognize Thaana, N'Ko,
+	 * and Tifinagh, which also have significant modern usage. The rest (Syriac,
+	 * Samaritan, Mandaic, etc.) seem to have extremely limited or no modern
+	 * usage and are not recognized. The languages usually written in a
+	 * right-to-left script are taken as those with Suppress-Script:
+	 * Hebr|Arab|Thaa|Nkoo|Tfng in
+	 * http://www.iana.org/assignments/language-subtag-registry, as well as
+	 * Sindhi (sd) and Uyghur (ug). The presence of other subtags of the
+	 * language code, e.g. regions like EG (Egypt), is ignored.
+	 */
+	public static boolean isRtlLanguage(String languageString) {
+		return languageString != null && RtlLocalesRe.matcher(languageString).find();
+	}
+
+	public static String formatUser(User u) {
+		return formatUser(u, false);
+	}
+
+	// TODO check RIGHTS here (email might need to be hidden)
+	public static String formatUser(User u, boolean isHTMLEscape) {
+		String user = "";
+		if (u != null) {
+			String email = u.getAddress() == null ? "" : u.getAddress().getEmail();
+			if (u.getFirstname() == null && u.getLastname() == null) {
+				user = email;
+			} else {
+				user = String.format("\"%s %s\" <%s>", u.getFirstname(), u.getLastname(), email);
+			}
+			user = isHTMLEscape ? escapeHtml4(user) : user;
+		}
+		return user;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/site/site.xml b/openmeetings-db/src/site/site.xml
index c26954e..0d9f35c 100644
--- a/openmeetings-db/src/site/site.xml
+++ b/openmeetings-db/src/site/site.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/components/miniIcons.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/components/miniIcons.lzx b/openmeetings-flash/src/main/swf/base/components/miniIcons.lzx
index 747c0ea..6b06435 100644
--- a/openmeetings-flash/src/main/swf/base/components/miniIcons.lzx
+++ b/openmeetings-flash/src/main/swf/base/components/miniIcons.lzx
@@ -1,67 +1,67 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-<class name="miniIcons" extends="view" stretches="both">
-	<attribute name="showhandcursor" value="true" type="boolean" />
-    <handler name="onmouseover">
-    	if (this.showhandcursor) {
-        	this.setAttribute("x",this.x-1);
-        	this.setAttribute("y",this.y-1);
-        	this.setAttribute("height",this.height+2);
-        	this.setAttribute("width",this.width+2);
-    	}
-        parent.parent.onmouseover.sendEvent();
-    </handler>
-    <handler name="onmouseout">
-    	if (this.showhandcursor) {
-        	this.setAttribute("x",this.x+1);
-            this.setAttribute("y",this.y+1);
-            this.setAttribute("height",this.height-2);
-            this.setAttribute("width",this.width-2);
-    	}
-        parent.parent.onmouseout.sendEvent();
-    </handler>
-</class>
-
-<class name="miniIconsImage" extends="omImage" stretches="both">
-	<attribute name="showhandcursor" value="true" type="boolean" />
-    <handler name="onmouseover">
-    	if (this.showhandcursor) {
-        	this.setAttribute("x",this.x-1);
-        	this.setAttribute("y",this.y-1);
-        	this.setAttribute("height",this.height+2);
-        	this.setAttribute("width",this.width+2);
-    	}
-        parent.parent.onmouseover.sendEvent();
-    </handler>
-    <handler name="onmouseout">
-    	if (this.showhandcursor) {
-        	this.setAttribute("x",this.x+1);
-            this.setAttribute("y",this.y+1);
-            this.setAttribute("height",this.height-2);
-            this.setAttribute("width",this.width-2);
-    	}
-        parent.parent.onmouseout.sendEvent();
-    </handler>
-</class>
-
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="miniIcons" extends="view" stretches="both">
+	<attribute name="showhandcursor" value="true" type="boolean" />
+    <handler name="onmouseover">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x-1);
+        	this.setAttribute("y",this.y-1);
+        	this.setAttribute("height",this.height+2);
+        	this.setAttribute("width",this.width+2);
+    	}
+        parent.parent.onmouseover.sendEvent();
+    </handler>
+    <handler name="onmouseout">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x+1);
+            this.setAttribute("y",this.y+1);
+            this.setAttribute("height",this.height-2);
+            this.setAttribute("width",this.width-2);
+    	}
+        parent.parent.onmouseout.sendEvent();
+    </handler>
+</class>
+
+<class name="miniIconsImage" extends="omImage" stretches="both">
+	<attribute name="showhandcursor" value="true" type="boolean" />
+    <handler name="onmouseover">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x-1);
+        	this.setAttribute("y",this.y-1);
+        	this.setAttribute("height",this.height+2);
+        	this.setAttribute("width",this.width+2);
+    	}
+        parent.parent.onmouseover.sendEvent();
+    </handler>
+    <handler name="onmouseout">
+    	if (this.showhandcursor) {
+        	this.setAttribute("x",this.x+1);
+            this.setAttribute("y",this.y+1);
+            this.setAttribute("height",this.height-2);
+            this.setAttribute("width",this.width-2);
+    	}
+        parent.parent.onmouseout.sendEvent();
+    </handler>
+</class>
+
 </library>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/components/miniIconsNew.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/components/miniIconsNew.lzx b/openmeetings-flash/src/main/swf/base/components/miniIconsNew.lzx
index 2e4a1a2..30e2e17 100644
--- a/openmeetings-flash/src/main/swf/base/components/miniIconsNew.lzx
+++ b/openmeetings-flash/src/main/swf/base/components/miniIconsNew.lzx
@@ -1,47 +1,47 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-	<class name="miniIconsNew" extends="view" >
-		<attribute name="innerResource" value="" type="string" />
-		<handler name="onmouseover">
-	    	if (this.showhandcursor) {
-	        	this.innnerView.setAttribute("x",this.innnerView.x-1);
-	        	this.innnerView.setAttribute("y",this.innnerView.y-1);
-	        	this.innnerView.setAttribute("height",this.innnerView.height+2);
-	        	this.innnerView.setAttribute("width",this.innnerView.width+2);
-	    	}
-	    </handler>
-	    <handler name="onmouseout">
-	    	if (this.showhandcursor) {
-	        	this.innnerView.setAttribute("x",this.innnerView.x+1);
-	            this.innnerView.setAttribute("y",this.innnerView.y+1);
-	            this.innnerView.setAttribute("height",this.innnerView.height-2);
-	            this.innnerView.setAttribute("width",this.innnerView.width-2);
-	    	}
-	    </handler>
-		<view name="innnerView" resource="$once{ parent.innerResource }" stretches="both"
-				width="$once{ parent.width }" height="$once{ parent.height }">
-		    
-		</view>
-	</class>
-	
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="miniIconsNew" extends="view" >
+		<attribute name="innerResource" value="" type="string" />
+		<handler name="onmouseover">
+	    	if (this.showhandcursor) {
+	        	this.innnerView.setAttribute("x",this.innnerView.x-1);
+	        	this.innnerView.setAttribute("y",this.innnerView.y-1);
+	        	this.innnerView.setAttribute("height",this.innnerView.height+2);
+	        	this.innnerView.setAttribute("width",this.innnerView.width+2);
+	    	}
+	    </handler>
+	    <handler name="onmouseout">
+	    	if (this.showhandcursor) {
+	        	this.innnerView.setAttribute("x",this.innnerView.x+1);
+	            this.innnerView.setAttribute("y",this.innnerView.y+1);
+	            this.innnerView.setAttribute("height",this.innnerView.height-2);
+	            this.innnerView.setAttribute("width",this.innnerView.width-2);
+	    	}
+	    </handler>
+		<view name="innnerView" resource="$once{ parent.innerResource }" stretches="both"
+				width="$once{ parent.width }" height="$once{ parent.height }">
+		    
+		</view>
+	</class>
+	
 </library>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/components/omImage.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/components/omImage.lzx b/openmeetings-flash/src/main/swf/base/components/omImage.lzx
index 8694db1..f3ec381 100644
--- a/openmeetings-flash/src/main/swf/base/components/omImage.lzx
+++ b/openmeetings-flash/src/main/swf/base/components/omImage.lzx
@@ -1,52 +1,52 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-<class name="omImage" extends="image">
-	<handler name="onsrc" method="loadOmSrc" />
-	<handler name="oninit" method="loadOmImage" />
-
-	<method name="loadOmImage" args="ignore">
-	<![CDATA[
-		if (this.src != '' && this.src != null) {
-			canvas.loadImgBySrc(this, this.src, completeCallback);
-		}
-	]]>
-	</method>
-
-	<method name="completeCallback" args="event">
-		//if($debug) Debug.write("[width, height] ", this.src, this.sprite.imgLoader.width, this.sprite.imgLoader.height, this.width, this.height);
-		this.sprite.imgLoader.width = this.width;
-		this.sprite.imgLoader.height = this.height;
-	</method>
-	
-	<method name="loadOmSrc" args="src">
-	<![CDATA[
-		//if ($debug) Debug.write("omImage::loadOmSrc src  ", src);
-		if (src != null) {
-			this.setSource(src);
-			loadOmImage(null);
-		}
-	]]>
-	</method>
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="omImage" extends="image">
+	<handler name="onsrc" method="loadOmSrc" />
+	<handler name="oninit" method="loadOmImage" />
+
+	<method name="loadOmImage" args="ignore">
+	<![CDATA[
+		if (this.src != '' && this.src != null) {
+			canvas.loadImgBySrc(this, this.src, completeCallback);
+		}
+	]]>
+	</method>
+
+	<method name="completeCallback" args="event">
+		//if($debug) Debug.write("[width, height] ", this.src, this.sprite.imgLoader.width, this.sprite.imgLoader.height, this.width, this.height);
+		this.sprite.imgLoader.width = this.width;
+		this.sprite.imgLoader.height = this.height;
+	</method>
+	
+	<method name="loadOmSrc" args="src">
+	<![CDATA[
+		//if ($debug) Debug.write("omImage::loadOmSrc src  ", src);
+		if (src != null) {
+			this.setSource(src);
+			loadOmImage(null);
+		}
+	]]>
+	</method>
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/components/omMiniIcon.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/components/omMiniIcon.lzx b/openmeetings-flash/src/main/swf/base/components/omMiniIcon.lzx
index 7dfed47..44484cd 100644
--- a/openmeetings-flash/src/main/swf/base/components/omMiniIcon.lzx
+++ b/openmeetings-flash/src/main/swf/base/components/omMiniIcon.lzx
@@ -1,37 +1,37 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-<class name="omMiniIcon">
-	<attribute name="imgUrl" value="" type="string" />
-	
-	<handler name="oninit">
-		canvas.loadImgBySrc(this, imgUrl, completeCallback);
-	</handler>
-	
-	<method name="completeCallback" args="event">
-		//if ($debug) Debug.info("omMiniIcon::completeCallback: ", imgUrl, this.sprite.imgLoader.width, this.sprite.imgLoader.height, this.width, this.height);
-		this.sprite.imgLoader.width = this.width;
-		this.sprite.imgLoader.height = this.height;
-	</method>
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="omMiniIcon">
+	<attribute name="imgUrl" value="" type="string" />
+	
+	<handler name="oninit">
+		canvas.loadImgBySrc(this, imgUrl, completeCallback);
+	</handler>
+	
+	<method name="completeCallback" args="event">
+		//if ($debug) Debug.info("omMiniIcon::completeCallback: ", imgUrl, this.sprite.imgLoader.width, this.sprite.imgLoader.height, this.width, this.height);
+		this.sprite.imgLoader.width = this.width;
+		this.sprite.imgLoader.height = this.height;
+	</method>
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/components/scrollbars/library.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/components/scrollbars/library.lzx b/openmeetings-flash/src/main/swf/base/components/scrollbars/library.lzx
index 9ee00e1..a0af972 100644
--- a/openmeetings-flash/src/main/swf/base/components/scrollbars/library.lzx
+++ b/openmeetings-flash/src/main/swf/base/components/scrollbars/library.lzx
@@ -1,44 +1,44 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-	<!-- APL Author sebawagner -->
-	<resource name="omscrolltrack_y_rsc" src="resources/y_scrolltrack.swf" />
-	
-	<!-- APL Author sebawagner -->
-    <resource name="omscrollbar_ythumbmiddle_rsc" src="resources/scrollthumb_y_mid.swf" />
-    <!-- APL Author sebawagner -->
-    <resource name="omscrollbar_ythumbtop_rsc" src="resources/scrollthumb_y_top.swf" />
-    <!-- APL Author sebawagner -->
-    <resource name="omscrollbar_ythumbbottom_rsc" src="resources/scrollthumb_y_bottom.swf" />
-    <!-- APL Author sebawagner -->
-   	<resource name="omscrolltrack_x_rsc" src="resources/x_scrolltrack.swf" />
-	<!-- APL Author sebawagner -->
-    <resource name="omscrollbar_xthumbmiddle_rsc" src="resources/scrollthumb_x_mid.swf" />
-    <!-- APL Author sebawagner -->
-    <resource name="omscrollbar_xthumbleft_rsc" src="resources/scrollthumb_x_left.swf" />
-    <!-- APL Author sebawagner -->
-    <resource name="omscrollbar_xthumbright_rsc" src="resources/scrollthumb_x_right.swf" />
-
-	<include href="om_vscrollbar.lzx"/>
-	<include href="om_hscrollbar.lzx"/>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- APL Author sebawagner -->
+	<resource name="omscrolltrack_y_rsc" src="resources/y_scrolltrack.swf" />
+	
+	<!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbmiddle_rsc" src="resources/scrollthumb_y_mid.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbtop_rsc" src="resources/scrollthumb_y_top.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_ythumbbottom_rsc" src="resources/scrollthumb_y_bottom.swf" />
+    <!-- APL Author sebawagner -->
+   	<resource name="omscrolltrack_x_rsc" src="resources/x_scrolltrack.swf" />
+	<!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbmiddle_rsc" src="resources/scrollthumb_x_mid.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbleft_rsc" src="resources/scrollthumb_x_left.swf" />
+    <!-- APL Author sebawagner -->
+    <resource name="omscrollbar_xthumbright_rsc" src="resources/scrollthumb_x_right.swf" />
+
+	<include href="om_vscrollbar.lzx"/>
+	<include href="om_hscrollbar.lzx"/>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/components/scrollbars/scrollbar_yresources.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/components/scrollbars/scrollbar_yresources.lzx b/openmeetings-flash/src/main/swf/base/components/scrollbars/scrollbar_yresources.lzx
index bc08ffe..ed0b7f6 100644
--- a/openmeetings-flash/src/main/swf/base/components/scrollbars/scrollbar_yresources.lzx
+++ b/openmeetings-flash/src/main/swf/base/components/scrollbars/scrollbar_yresources.lzx
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-
-    
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+    
 </library>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/remote/baseVideoStream.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/remote/baseVideoStream.lzx b/openmeetings-flash/src/main/swf/base/remote/baseVideoStream.lzx
index 5c71fb5..7ca59ab 100644
--- a/openmeetings-flash/src/main/swf/base/remote/baseVideoStream.lzx
+++ b/openmeetings-flash/src/main/swf/base/remote/baseVideoStream.lzx
@@ -1,385 +1,385 @@
-<library>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-	  http://www.apache.org/licenses/LICENSE-2.0
-		  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-
-<!---
-	extends the Video-View with Streaming functions
- -->
-
-<class name="baseVideoStream" extends="baseVideoView">
-
-	<switch>
-	<when property="$as3">
-		<passthrough>
-			import flash.events.*;
-			import flash.net.*;
-			import flash.media.*
-		</passthrough>
-	</when>
-	</switch>
-	
-	<attribute name="yDebug" value="-20" type="number" />
-	
-	<method name="getYDebug">
-		this.yDebug += 20;
-		return this.yDebug;
-	</method>
-
-	<!--- the NetStream Object
-			  @keywords final -->
-	<attribute name="_ns" value="null" />
-
-	<!--- This value does indicate if this stream play or broadcasts
-			  @keywords readonly -->
-	<attribute name="mode" value="play" type="string" />
-
-	<!--- This is the current buffer used, in Live Streaming this MUST be 0
-			  @keywords readonly -->
-	<attribute name="bufferTime" value="0" type="number" />
-
-	<!--- This is a reference to the current microphone, only set if broadcasting
-			  @keywords readonly -->
-	<attribute name="micro" value="null" />
-
-	<!--- This is a reference to the current camara, only set if broadcasting
-			  @keywords readonly -->
-	<attribute name="camera" value="null" />
-
-	<!--- Reference To the Sound Object
-		@keywords final -->
-	<attribute name="soundRef" value="null" />
-	<!--- Reference To the Sound MovieClip
-		@keywords final -->
-	<attribute name="soundRefMC" value="null" />
-
-	<!--- Default mic gain -->
-	<attribute name="micGain" value="50" type="number"/>
-	
-	<attribute name="micMuted" value="false" />
-
-	<event name="onMetaDataEvent" />
-	<event name="onPlayStatusEvent" />
-	<event name="onCuePointEvent" />
-	<event name="onAsyncError" />
-	<event name="onNetStatus" />
-	<event name="onIoError" />
-
-	<!-- save value for restart -->
-		<attribute name="streamName" type="string"/>
-		<attribute name="delay" />
-	<!--- @keywords private -->
-	<method name="createStream">
-		var tStream = this._findnc();
-		if (!tStream.connected) {
-			if ($debug) Debug.warn("NetConnection is not connected");
-		}
-		this._ns = new NetStream(tStream);
-		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
-		//according to the docs the construct to catch event has to be implemented like this.
-		var t = this;
-		var clientObject = new Object();
-		clientObject.onMetaData = function(metadata:Object):void {
-			t.onMetaData(metadata);
-		};
-		clientObject.onPlayStatus = function(metadata:Object):void {
-			t.onPlayStatus(metadata);
-		};
-		clientObject.onCuePoint = function(metadata:Object):void {
-			t.onCuePoint(metadata);
-		};
-		clientObject.ioError = function(error:Object):void {
-			t.ioError(error);
-		};
-		clientObject.netStatus = function(status:Object):void {
-			t.netStatus(status);
-		};
-		clientObject.asyncError = function(error:Object):void {
-			t.asyncError(error);
-		};
-		this._ns.client = clientObject;
-		//this is a workaround, attaching the event to the client object does not work
-		this._ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
-	</method>
-	
-	<method name="onNetStatus2" args="evt">
-		if($debug) Debug.write("netStream_onNetStatus: " , evt.info.code, evt.target);
-		this.onNetStatus.sendEvent(evt.info);
-	</method>
-	
-	<method name="asyncError" args="error">
-		if($debug) Debug.write("simpleNetStream asyncError",error);
-		this.onAsyncError.sendEvent(error);
-	</method>
-	
-	<method name="netStatus" args="status">
-		if($debug) Debug.write("simpleNetStream netStatus",status);
-		this.onNetStatus.sendEvent(status);
-	</method>
-	
-	<method name="ioError" args="error">
-		if($debug) Debug.write("simpleNetStream ioError",error);
-		this.onIoError.sendEvent(error);
-	</method>
-
-	<method name="onCuePoint" args="info"><![CDATA[
-		if($debug) Debug.write("simpleNetStream onCuePoint",info);
-		this.onCuePointEvent.sendEvent(info);
-	]]></method>
-
-	<method name="onPlayStatus" args="info"><![CDATA[
-		if($debug) Debug.write("simpleNetStream onPlayStatus",info);
-		this.onPlayStatusEvent.sendEvent(info);
-	]]></method>
-
-	<method name="onMetaData" args="info"><![CDATA[
-		if($debug) Debug.write("simpleNetStream onMetaData",info);
-		this.onMetaDataEvent.sendEvent(info);
-	]]></method>
-
-	<!--- Find the Flash NetConnection object.
-		  @keywords private -->
-	<method name="_findnc">
-		if (canvas.currentNC == null) {
-			if ($debug) Debug.warn("canvas.currentNC is NULL, maybe connection did fail?");
-		}
-		return canvas.currentNC;
-	</method>
-
-	<!---
-		Plays a Video Stream, makes a new Instance of a NetStream, if previous NetStream
-		is still open it will first close that, used to subscribe to a live-stream
-		@param string streamName the streamname to play
-		@param number delay The time it should seek, for Live-Streams this value should be -1
-	 -->
-	<method name="playStream" args="_streamName, delay">
-	<![CDATA[
-		this.streamName = "" + _streamName;
-		this.delay = delay;
-		if (this._ns != null){
-			this._stop();
-		}
-		this.mode = "play";
-		this.createStream();
-		//invokes Method in baseVideoView which shows the stream
-		this.attachVideo(this._ns);
-		//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
-		//after re-syncing the stream
-		//this.setBuffer(0.1);
-		if ($debug) Debug.write("Play Stream '" + streamName + "'");
-		if (delay == 0) {
-			this._ns.play(streamName);
-		} else {
-			this._ns.play(streamName,delay);
-		}
-	]]>
-	</method>
-
-	<method name="justPlayStream" args="_streamName, delay">
-		<![CDATA[
-			this.streamName = "" + _streamName;
-			this.delay=delay;
-			if (this._ns!=null){
-				if ($debug) Debug.write("STOP NS is NOT null ")
-				this._stop();
-			}
-			this.mode = "play";
-			this.createStream();
-			//invokes Method in baseVideoView which shows the stream
-			this.attachVideo(this._ns);
-			//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
-			//after re-syncing the stream
-
-			this.setBuffer(6);
-
-			if ($debug) Debug.write("Just Play Stream "+streamName);
-
-			this._ns.play(streamName,delay);
-		]]>
-	</method>
-
-	<method name="prepare" args="mode, streamName, camReference, micReference">
-	<![CDATA[
-		if (this._ns != null){
-			this._stop();
-		}
-		this.mode = mode;
-		this.createStream();
-		
-		if (camReference != null) {
-			this.setAttribute('camera', camReference);
-			this._ns.attachCamera(camReference);
-			//invokes Method in baseVideoView which shows the cam
-			this.attachCamera(camReference);
-			
-			var videoStreamSettings = null;
-			if ($debug) Debug.write("codecType=" + canvas.codecType);
-			if (canvas.codecType === "h264") {
-				videoStreamSettings = new H264VideoStreamSettings();
-				videoStreamSettings.setProfileLevel(H264Profile.BASELINE, H264Level.LEVEL_3_1);
-			} else {
-				videoStreamSettings = new VideoStreamSettings();
-			}
-			videoStreamSettings.setQuality(camReference.bandwidth, camReference.quality);
-			videoStreamSettings.setKeyFrameInterval(camReference.keyFrameInterval);
-			if ($debug) Debug.write("::keyFrameInterval " + camReference.keyFrameInterval);
-			videoStreamSettings.setMode(camReference.width, camReference.height, camReference.fps);
-			this._ns.videoStreamSettings = videoStreamSettings;
-		}
-		if (micReference != null) {
-			this.setAttribute('micro', micReference);
-			this._ns.attachAudio(micReference);
-			//FIXME TODO muteMicro(this.micMuted);
-		}
-		this._ns.publish("" + streamName, (mode == "broadcast") ? "live" : mode);
-	]]>
-	</method>
-	<!---
-		BroadCasts a Stream
-		@param string streamName the streamname to broadcast
-		@param camera camReference a reference to the Camera-Object to stream
-		@param micropone micReference a reference to the Micropohne Object to stream
-	 -->
-	<method name="broadcast" args="streamName,camReference,micReference">
-		prepare("broadcast", streamName, camReference, micReference);
-	</method>
-
-	<method name="record" args="streamName,camReference,micReference">
-		prepare("record", streamName, camReference, micReference);
-	</method>
-	
-	<!---
-		Stops playing or broadcasting a Stream and clears the Video-Object
-	 -->
-	<method name="_stop">
-		if ($debug) Debug.write("STOP: ",this.mode,this._ns);
-		//Stop NetStream
-		if (this._ns == null) return;
-		this.camera = null;
-		this.micro = null;
-		this._ns.attachCamera(null);
-		this._ns.attachAudio(null);
-		if (this.mode == "play") {
-			this.soundRefMC = null;
-			this.soundRef = null;
-			this._ns.pause();
-			this._ns.close();
-			//remove NetStream from Video-Object
-			this.clear();
-			this._ns = null;
-		} else if (this.mode == "broadcast") {
-			this._ns.publish(false);
-			//remove NetStream from Video-Object
-			this.clear();
-			this._ns.close();
-			this._ns = null;
-		} else if (this.mode == "record") {
-			this._ns.publish(false);
-			//remove NetStream from Video-Object
-			this.clear();
-			this._ns.close();
-			this._ns = null;
-		} else {
-			this.clear();
-			this._ns.close();
-			this._ns = null;
-			if ($debug) Debug.warn("Not known Mode: ",this.mode,this);
-		}
-	</method>
-
-	<method name="restart">
-		 this._stop();
-		 this.playStream(this.streamName ,this.delay);
-	</method>
-	
-	<method name="setBuffer" args="time">
-		if ($debug) Debug.warn("setBuffer has no 1:1 equivalent in AS3 ");
-		return;
-		if(this._ns!=null){
-			this.bufferTime = time;
-			this._ns.setBufferTime(time);
-		} else {
-			if ($debug) Debug.warn("setBuffer but no NetStream initialized",this);
-		}
-	</method>
-
-	<!--- sets the Volume of the VideoStream
-		@param number volume Number between 0 and 100
-	 -->
-	<method name="setSoundVolume" args="volume">
-		//if ($debug) Debug.write(":: setSoundVolume ", parent.parent.publicSID);
-		//this.soundRef.setVolume(volume);
-		if (this._ns!=null){
-			this._ns.soundTransform = new SoundTransform(volume/100.0);
-		}
-	</method>
-
-	<method name="muteMicro" args="mute">
-		if ($debug) Debug.write(":: muteMicro ", mute, parent.parent.publicSID);
-		this.micMuted = mute;
-		if(this.micro != null) {
-			if(mute) {
-				if (this.micro.gain == 0) {
-					return;
-				}
-				if ($debug) Debug.write("Make Gain mute again from ",this.micro.gain);
-				this.setAttribute('micGain', this.micro.gain);
-				this.micro.gain = 0;
-			} else {
-				if ($debug) Debug.write("Make Gain loud again to ",this.micGain);
-				this.micro.gain = this.micGain;
-			}
-		}
-	</method>
-	
-	<!---
-		pause or resumes the NetStream
-		@args pauseStatus true pause, false resume
-	 -->
-	<method name="pause" args="pauseStatus">
-		if ($debug) Debug.write("do Pause",pauseStatus);
-		if (this._ns==null){
-			if ($debug) Debug.warn("No NetStream");
-			return;
-		}
-		if (pauseStatus) {
-			this._ns.pause();
-		} else {
-			this._ns.resume();
-		}
-	</method>
-	
-	<!---
-		Seek the stream to a flvTime
-		this might only work if there are keyframes in the FLV, normally it should 
-		try to use the nearest keyframe available for the specified time.
-	 -->
-	<method name="seekStream" args="flvTime">
-		if ($debug) Debug.write("do seek",flvTime);
-		if (this._ns==null){
-			if ($debug) Debug.warn("No NetStream");
-			return;
-		}
-		this._ns.seek(flvTime);
-	</method>
-
-</class>
-
-
-</library>
+<library>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+	  http://www.apache.org/licenses/LICENSE-2.0
+		  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!---
+	extends the Video-View with Streaming functions
+ -->
+
+<class name="baseVideoStream" extends="baseVideoView">
+
+	<switch>
+	<when property="$as3">
+		<passthrough>
+			import flash.events.*;
+			import flash.net.*;
+			import flash.media.*
+		</passthrough>
+	</when>
+	</switch>
+	
+	<attribute name="yDebug" value="-20" type="number" />
+	
+	<method name="getYDebug">
+		this.yDebug += 20;
+		return this.yDebug;
+	</method>
+
+	<!--- the NetStream Object
+			  @keywords final -->
+	<attribute name="_ns" value="null" />
+
+	<!--- This value does indicate if this stream play or broadcasts
+			  @keywords readonly -->
+	<attribute name="mode" value="play" type="string" />
+
+	<!--- This is the current buffer used, in Live Streaming this MUST be 0
+			  @keywords readonly -->
+	<attribute name="bufferTime" value="0" type="number" />
+
+	<!--- This is a reference to the current microphone, only set if broadcasting
+			  @keywords readonly -->
+	<attribute name="micro" value="null" />
+
+	<!--- This is a reference to the current camara, only set if broadcasting
+			  @keywords readonly -->
+	<attribute name="camera" value="null" />
+
+	<!--- Reference To the Sound Object
+		@keywords final -->
+	<attribute name="soundRef" value="null" />
+	<!--- Reference To the Sound MovieClip
+		@keywords final -->
+	<attribute name="soundRefMC" value="null" />
+
+	<!--- Default mic gain -->
+	<attribute name="micGain" value="50" type="number"/>
+	
+	<attribute name="micMuted" value="false" />
+
+	<event name="onMetaDataEvent" />
+	<event name="onPlayStatusEvent" />
+	<event name="onCuePointEvent" />
+	<event name="onAsyncError" />
+	<event name="onNetStatus" />
+	<event name="onIoError" />
+
+	<!-- save value for restart -->
+		<attribute name="streamName" type="string"/>
+		<attribute name="delay" />
+	<!--- @keywords private -->
+	<method name="createStream">
+		var tStream = this._findnc();
+		if (!tStream.connected) {
+			if ($debug) Debug.warn("NetConnection is not connected");
+		}
+		this._ns = new NetStream(tStream);
+		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
+		//according to the docs the construct to catch event has to be implemented like this.
+		var t = this;
+		var clientObject = new Object();
+		clientObject.onMetaData = function(metadata:Object):void {
+			t.onMetaData(metadata);
+		};
+		clientObject.onPlayStatus = function(metadata:Object):void {
+			t.onPlayStatus(metadata);
+		};
+		clientObject.onCuePoint = function(metadata:Object):void {
+			t.onCuePoint(metadata);
+		};
+		clientObject.ioError = function(error:Object):void {
+			t.ioError(error);
+		};
+		clientObject.netStatus = function(status:Object):void {
+			t.netStatus(status);
+		};
+		clientObject.asyncError = function(error:Object):void {
+			t.asyncError(error);
+		};
+		this._ns.client = clientObject;
+		//this is a workaround, attaching the event to the client object does not work
+		this._ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
+	</method>
+	
+	<method name="onNetStatus2" args="evt">
+		if($debug) Debug.write("netStream_onNetStatus: " , evt.info.code, evt.target);
+		this.onNetStatus.sendEvent(evt.info);
+	</method>
+	
+	<method name="asyncError" args="error">
+		if($debug) Debug.write("simpleNetStream asyncError",error);
+		this.onAsyncError.sendEvent(error);
+	</method>
+	
+	<method name="netStatus" args="status">
+		if($debug) Debug.write("simpleNetStream netStatus",status);
+		this.onNetStatus.sendEvent(status);
+	</method>
+	
+	<method name="ioError" args="error">
+		if($debug) Debug.write("simpleNetStream ioError",error);
+		this.onIoError.sendEvent(error);
+	</method>
+
+	<method name="onCuePoint" args="info"><![CDATA[
+		if($debug) Debug.write("simpleNetStream onCuePoint",info);
+		this.onCuePointEvent.sendEvent(info);
+	]]></method>
+
+	<method name="onPlayStatus" args="info"><![CDATA[
+		if($debug) Debug.write("simpleNetStream onPlayStatus",info);
+		this.onPlayStatusEvent.sendEvent(info);
+	]]></method>
+
+	<method name="onMetaData" args="info"><![CDATA[
+		if($debug) Debug.write("simpleNetStream onMetaData",info);
+		this.onMetaDataEvent.sendEvent(info);
+	]]></method>
+
+	<!--- Find the Flash NetConnection object.
+		  @keywords private -->
+	<method name="_findnc">
+		if (canvas.currentNC == null) {
+			if ($debug) Debug.warn("canvas.currentNC is NULL, maybe connection did fail?");
+		}
+		return canvas.currentNC;
+	</method>
+
+	<!---
+		Plays a Video Stream, makes a new Instance of a NetStream, if previous NetStream
+		is still open it will first close that, used to subscribe to a live-stream
+		@param string streamName the streamname to play
+		@param number delay The time it should seek, for Live-Streams this value should be -1
+	 -->
+	<method name="playStream" args="_streamName, delay">
+	<![CDATA[
+		this.streamName = "" + _streamName;
+		this.delay = delay;
+		if (this._ns != null){
+			this._stop();
+		}
+		this.mode = "play";
+		this.createStream();
+		//invokes Method in baseVideoView which shows the stream
+		this.attachVideo(this._ns);
+		//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
+		//after re-syncing the stream
+		//this.setBuffer(0.1);
+		if ($debug) Debug.write("Play Stream '" + streamName + "'");
+		if (delay == 0) {
+			this._ns.play(streamName);
+		} else {
+			this._ns.play(streamName,delay);
+		}
+	]]>
+	</method>
+
+	<method name="justPlayStream" args="_streamName, delay">
+		<![CDATA[
+			this.streamName = "" + _streamName;
+			this.delay=delay;
+			if (this._ns!=null){
+				if ($debug) Debug.write("STOP NS is NOT null ")
+				this._stop();
+			}
+			this.mode = "play";
+			this.createStream();
+			//invokes Method in baseVideoView which shows the stream
+			this.attachVideo(this._ns);
+			//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
+			//after re-syncing the stream
+
+			this.setBuffer(6);
+
+			if ($debug) Debug.write("Just Play Stream "+streamName);
+
+			this._ns.play(streamName,delay);
+		]]>
+	</method>
+
+	<method name="prepare" args="mode, streamName, camReference, micReference">
+	<![CDATA[
+		if (this._ns != null){
+			this._stop();
+		}
+		this.mode = mode;
+		this.createStream();
+		
+		if (camReference != null) {
+			this.setAttribute('camera', camReference);
+			this._ns.attachCamera(camReference);
+			//invokes Method in baseVideoView which shows the cam
+			this.attachCamera(camReference);
+			
+			var videoStreamSettings = null;
+			if ($debug) Debug.write("codecType=" + canvas.codecType);
+			if (canvas.codecType === "h264") {
+				videoStreamSettings = new H264VideoStreamSettings();
+				videoStreamSettings.setProfileLevel(H264Profile.BASELINE, H264Level.LEVEL_3_1);
+			} else {
+				videoStreamSettings = new VideoStreamSettings();
+			}
+			videoStreamSettings.setQuality(camReference.bandwidth, camReference.quality);
+			videoStreamSettings.setKeyFrameInterval(camReference.keyFrameInterval);
+			if ($debug) Debug.write("::keyFrameInterval " + camReference.keyFrameInterval);
+			videoStreamSettings.setMode(camReference.width, camReference.height, camReference.fps);
+			this._ns.videoStreamSettings = videoStreamSettings;
+		}
+		if (micReference != null) {
+			this.setAttribute('micro', micReference);
+			this._ns.attachAudio(micReference);
+			//FIXME TODO muteMicro(this.micMuted);
+		}
+		this._ns.publish("" + streamName, (mode == "broadcast") ? "live" : mode);
+	]]>
+	</method>
+	<!---
+		BroadCasts a Stream
+		@param string streamName the streamname to broadcast
+		@param camera camReference a reference to the Camera-Object to stream
+		@param micropone micReference a reference to the Micropohne Object to stream
+	 -->
+	<method name="broadcast" args="streamName,camReference,micReference">
+		prepare("broadcast", streamName, camReference, micReference);
+	</method>
+
+	<method name="record" args="streamName,camReference,micReference">
+		prepare("record", streamName, camReference, micReference);
+	</method>
+	
+	<!---
+		Stops playing or broadcasting a Stream and clears the Video-Object
+	 -->
+	<method name="_stop">
+		if ($debug) Debug.write("STOP: ",this.mode,this._ns);
+		//Stop NetStream
+		if (this._ns == null) return;
+		this.camera = null;
+		this.micro = null;
+		this._ns.attachCamera(null);
+		this._ns.attachAudio(null);
+		if (this.mode == "play") {
+			this.soundRefMC = null;
+			this.soundRef = null;
+			this._ns.pause();
+			this._ns.close();
+			//remove NetStream from Video-Object
+			this.clear();
+			this._ns = null;
+		} else if (this.mode == "broadcast") {
+			this._ns.publish(false);
+			//remove NetStream from Video-Object
+			this.clear();
+			this._ns.close();
+			this._ns = null;
+		} else if (this.mode == "record") {
+			this._ns.publish(false);
+			//remove NetStream from Video-Object
+			this.clear();
+			this._ns.close();
+			this._ns = null;
+		} else {
+			this.clear();
+			this._ns.close();
+			this._ns = null;
+			if ($debug) Debug.warn("Not known Mode: ",this.mode,this);
+		}
+	</method>
+
+	<method name="restart">
+		 this._stop();
+		 this.playStream(this.streamName ,this.delay);
+	</method>
+	
+	<method name="setBuffer" args="time">
+		if ($debug) Debug.warn("setBuffer has no 1:1 equivalent in AS3 ");
+		return;
+		if(this._ns!=null){
+			this.bufferTime = time;
+			this._ns.setBufferTime(time);
+		} else {
+			if ($debug) Debug.warn("setBuffer but no NetStream initialized",this);
+		}
+	</method>
+
+	<!--- sets the Volume of the VideoStream
+		@param number volume Number between 0 and 100
+	 -->
+	<method name="setSoundVolume" args="volume">
+		//if ($debug) Debug.write(":: setSoundVolume ", parent.parent.publicSID);
+		//this.soundRef.setVolume(volume);
+		if (this._ns!=null){
+			this._ns.soundTransform = new SoundTransform(volume/100.0);
+		}
+	</method>
+
+	<method name="muteMicro" args="mute">
+		if ($debug) Debug.write(":: muteMicro ", mute, parent.parent.publicSID);
+		this.micMuted = mute;
+		if(this.micro != null) {
+			if(mute) {
+				if (this.micro.gain == 0) {
+					return;
+				}
+				if ($debug) Debug.write("Make Gain mute again from ",this.micro.gain);
+				this.setAttribute('micGain', this.micro.gain);
+				this.micro.gain = 0;
+			} else {
+				if ($debug) Debug.write("Make Gain loud again to ",this.micGain);
+				this.micro.gain = this.micGain;
+			}
+		}
+	</method>
+	
+	<!---
+		pause or resumes the NetStream
+		@args pauseStatus true pause, false resume
+	 -->
+	<method name="pause" args="pauseStatus">
+		if ($debug) Debug.write("do Pause",pauseStatus);
+		if (this._ns==null){
+			if ($debug) Debug.warn("No NetStream");
+			return;
+		}
+		if (pauseStatus) {
+			this._ns.pause();
+		} else {
+			this._ns.resume();
+		}
+	</method>
+	
+	<!---
+		Seek the stream to a flvTime
+		this might only work if there are keyframes in the FLV, normally it should 
+		try to use the nearest keyframe available for the specified time.
+	 -->
+	<method name="seekStream" args="flvTime">
+		if ($debug) Debug.write("do seek",flvTime);
+		if (this._ns==null){
+			if ($debug) Debug.warn("No NetStream");
+			return;
+		}
+		this._ns.seek(flvTime);
+	</method>
+
+</class>
+
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/remote/baseVideoStreamDevice.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/remote/baseVideoStreamDevice.lzx b/openmeetings-flash/src/main/swf/base/remote/baseVideoStreamDevice.lzx
index da1717b..57073ff 100644
--- a/openmeetings-flash/src/main/swf/base/remote/baseVideoStreamDevice.lzx
+++ b/openmeetings-flash/src/main/swf/base/remote/baseVideoStreamDevice.lzx
@@ -1,172 +1,172 @@
-<library>
-	<!-- Licensed to the Apache Software Foundation (ASF) under one or more 
-		contributor license agreements. See the NOTICE file distributed with this 
-		work for additional information regarding copyright ownership. The ASF licenses 
-		this file to you under the Apache License, Version 2.0 (the "License"); you 
-		may not use this file except in compliance with the License. You may obtain 
-		a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
-		required by applicable law or agreed to in writing, software distributed 
-		under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
-		OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
-		the specific language governing permissions and limitations under the License. -->
-
-	<!--- extends the baseVideoStream with functions to catch Device Events 
-		this Class uses Events from the Base Class baseVideoStream onmicro and oncamera, 
-		which are thrown, once a device was set -->
-
-	<class name="baseVideoStreamDevice" extends="baseVideoStream">
-		<switch>
-			<when property="$as3">
-				<passthrough>
-					import flash.events.StatusEvent;
-					import flash.events.ActivityEvent;
-					import flash.external.ExternalInterface;
-				</passthrough>
-			</when>
-		</switch>
-
-		<!--- Shows if there is Activity on the Microphone -->
-		<attribute name="micactive" value="false" type="boolean" />
-
-		<!--- Level delegate, used to track level changes.
-			@keywords private -->
-		<attribute name="_leveldel"
-			value="$once{new LzDelegate(this, '_updateLevel')}" />
-
-		<!--- Audio level, 0-100, the amount of sound detected by this microphone. 
-			Reset to 0 when there is no audio (no activity or not allowed).
-			@keywords readonly -->
-		<attribute name="level" type="number" value="0" />
-
-		<!--- Shows if there is Activity on the Camera -->
-		<attribute name="camactive" value="false" type="boolean" />
-
-		<!--- Message to send to Clients -->
-		<attribute name="objMessage" value="null" />
-		<!--- indicates if the message should be send, you can change the notification 
-			level by changing the loudnessAcitviation in the public/config.xml -->
-		<attribute name="isgreater" value="false" type="boolean" />
-
-		<attribute name="doSendNotification" value="true" type="boolean" />
-
-		<!--- If true the component will send an event via LocalConnection when 
-			sound is louder or less 5% -->
-		<attribute name="sendNotificationViaLocalConnection" value="true"
-			type="boolean" />
-
-		<event name="sendCameraStatus" />
-
-		<event name="sendMicroStatus" />
-
-		<handler name="oncamera" args="c">
-			//if ($debug) Debug.write("Cam: ",c);
-			c.addEventListener(ActivityEvent.ACTIVITY, onActivity);
-			c.addEventListener(StatusEvent.STATUS, onStatus);
-		</handler>
-
-		<method name="onStatus" args="stats">
-			if ($debug) Debug.write("CamStatus: ",stats);
-			this.sendCameraStatus.sendEvent(stats.code);
-		</method>
-
-		<method name="onActivity" args="event">
-			this.setAttribute("camactive", event.activating);
-		</method>
-
-		<handler name="onmicro" args="m">
-			//if ($debug) Debug.write("onmicro: ",m);
-			var t = this;
-			//send mic active to true to start the onActivity callback Idle job
-			this.setAttribute("micactive", true);
-			m.addEventListener(ActivityEvent.ACTIVITY, onMicActivity);
-			m.addEventListener(StatusEvent.STATUS, onMicStatus);
-		</handler>
-
-		<method name="onMicStatus" args="stats">
-			if ($debug) Debug.write("onMicStatus 1: ",stats);
-			this.sendMicroStatus.sendEvent(stats.code);
-		</method>
-
-		<method name="onMicActivity" args="event">
-			if ($debug) Debug.write("onMicActivity: ",event);
-		</method>
-
-		<!--- Handler for the Flash Microphone onActivity callback.
-			@keywords private -->
-		<handler name="onmicactive">
-		<![CDATA[
-			if (this.onlevel) {
-				if (this.micactive) {
-					this._leveldel.register(lz.Idle, "onidle");
-				} else {
-					this._leveldel.unregisterAll();
-					this.setAttribute("level", 0);
-				}
-			}
-		]]>
-		</handler>
-
-		<!--- Handler for updating the microphone activity level attribute.
-			@keywords private -->
-		<method name="_updateLevel" args="arg">
-		<![CDATA[
-			if (this.micro == null) {
-				return;
-			}
-			var level = this.micro.activityLevel;
-			if (level < 0) {
-				level = 0;
-			}
-
-			if (level != this.level) {
-				this.setAttribute("level", level);
-			}
-		]]>
-		</method>
-
-		<!-- these methods send a Notification to all Connected users of a Room 
-			about the onActivity-Change -->
-		<handler name="onlevel" args="level">
-		<![CDATA[
-			//if ($debug) Debug.write("onlevel ",this.level,level);
-			
-			if (!this.doSendNotification) {
-				return;
-			}
-			
-			//greater 5 means the green dot starts to blink if the loudness is greater then 5%
-			//it makes no sense to set this to zero as there will be 1000 of events send
-			//per minute to change the status just of this icon, swagner 12.02.2012
-			var tVal = (level > 8);
-			
-			if (this.isgreater != tVal) {
-				//if ($debug) Debug.write("Level sendNotification ",this.isgreater,tVal,level);
-				this.isgreater = tVal;
-				this.sendNotification();
-			}
-		]]>
-		</handler>
-
-		<method name="sendNotification">
-			//if ($debug) Debug.write("Level sendNotification ",this.isgreater);
-			if (!this.sendNotificationViaLocalConnection) {
-				return;
-			}
-			if (parent.parent._loudness != null) {
-				parent.parent._loudness.setSpeaking(this.isgreater);
-			}
-			this.objMessage = new Array ();
-			this.objMessage[0] = 'audioActivity';
-			this.objMessage[1] = this.isgreater;
-			this.objMessage[2] = parent.parent.publicSID;
-			ExternalInterface.call("audioActivity", parent.parent.publicSID, this.isgreater);
-			//if ($debug) Debug.write("Level sendNotification ",this.objMessage);
-			this.sendMessage.doCall();
-		</method>
-
-		<netRemoteCallHib name="sendMessage" funcname="sendMessage"
-			remotecontext="$once{ canvas.thishib }" showLoading="false">
-			<netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>
-		</netRemoteCallHib>
-	</class>
-</library>
+<library>
+	<!-- Licensed to the Apache Software Foundation (ASF) under one or more 
+		contributor license agreements. See the NOTICE file distributed with this 
+		work for additional information regarding copyright ownership. The ASF licenses 
+		this file to you under the Apache License, Version 2.0 (the "License"); you 
+		may not use this file except in compliance with the License. You may obtain 
+		a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
+		required by applicable law or agreed to in writing, software distributed 
+		under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
+		OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
+		the specific language governing permissions and limitations under the License. -->
+
+	<!--- extends the baseVideoStream with functions to catch Device Events 
+		this Class uses Events from the Base Class baseVideoStream onmicro and oncamera, 
+		which are thrown, once a device was set -->
+
+	<class name="baseVideoStreamDevice" extends="baseVideoStream">
+		<switch>
+			<when property="$as3">
+				<passthrough>
+					import flash.events.StatusEvent;
+					import flash.events.ActivityEvent;
+					import flash.external.ExternalInterface;
+				</passthrough>
+			</when>
+		</switch>
+
+		<!--- Shows if there is Activity on the Microphone -->
+		<attribute name="micactive" value="false" type="boolean" />
+
+		<!--- Level delegate, used to track level changes.
+			@keywords private -->
+		<attribute name="_leveldel"
+			value="$once{new LzDelegate(this, '_updateLevel')}" />
+
+		<!--- Audio level, 0-100, the amount of sound detected by this microphone. 
+			Reset to 0 when there is no audio (no activity or not allowed).
+			@keywords readonly -->
+		<attribute name="level" type="number" value="0" />
+
+		<!--- Shows if there is Activity on the Camera -->
+		<attribute name="camactive" value="false" type="boolean" />
+
+		<!--- Message to send to Clients -->
+		<attribute name="objMessage" value="null" />
+		<!--- indicates if the message should be send, you can change the notification 
+			level by changing the loudnessAcitviation in the public/config.xml -->
+		<attribute name="isgreater" value="false" type="boolean" />
+
+		<attribute name="doSendNotification" value="true" type="boolean" />
+
+		<!--- If true the component will send an event via LocalConnection when 
+			sound is louder or less 5% -->
+		<attribute name="sendNotificationViaLocalConnection" value="true"
+			type="boolean" />
+
+		<event name="sendCameraStatus" />
+
+		<event name="sendMicroStatus" />
+
+		<handler name="oncamera" args="c">
+			//if ($debug) Debug.write("Cam: ",c);
+			c.addEventListener(ActivityEvent.ACTIVITY, onActivity);
+			c.addEventListener(StatusEvent.STATUS, onStatus);
+		</handler>
+
+		<method name="onStatus" args="stats">
+			if ($debug) Debug.write("CamStatus: ",stats);
+			this.sendCameraStatus.sendEvent(stats.code);
+		</method>
+
+		<method name="onActivity" args="event">
+			this.setAttribute("camactive", event.activating);
+		</method>
+
+		<handler name="onmicro" args="m">
+			//if ($debug) Debug.write("onmicro: ",m);
+			var t = this;
+			//send mic active to true to start the onActivity callback Idle job
+			this.setAttribute("micactive", true);
+			m.addEventListener(ActivityEvent.ACTIVITY, onMicActivity);
+			m.addEventListener(StatusEvent.STATUS, onMicStatus);
+		</handler>
+
+		<method name="onMicStatus" args="stats">
+			if ($debug) Debug.write("onMicStatus 1: ",stats);
+			this.sendMicroStatus.sendEvent(stats.code);
+		</method>
+
+		<method name="onMicActivity" args="event">
+			if ($debug) Debug.write("onMicActivity: ",event);
+		</method>
+
+		<!--- Handler for the Flash Microphone onActivity callback.
+			@keywords private -->
+		<handler name="onmicactive">
+		<![CDATA[
+			if (this.onlevel) {
+				if (this.micactive) {
+					this._leveldel.register(lz.Idle, "onidle");
+				} else {
+					this._leveldel.unregisterAll();
+					this.setAttribute("level", 0);
+				}
+			}
+		]]>
+		</handler>
+
+		<!--- Handler for updating the microphone activity level attribute.
+			@keywords private -->
+		<method name="_updateLevel" args="arg">
+		<![CDATA[
+			if (this.micro == null) {
+				return;
+			}
+			var level = this.micro.activityLevel;
+			if (level < 0) {
+				level = 0;
+			}
+
+			if (level != this.level) {
+				this.setAttribute("level", level);
+			}
+		]]>
+		</method>
+
+		<!-- these methods send a Notification to all Connected users of a Room 
+			about the onActivity-Change -->
+		<handler name="onlevel" args="level">
+		<![CDATA[
+			//if ($debug) Debug.write("onlevel ",this.level,level);
+			
+			if (!this.doSendNotification) {
+				return;
+			}
+			
+			//greater 5 means the green dot starts to blink if the loudness is greater then 5%
+			//it makes no sense to set this to zero as there will be 1000 of events send
+			//per minute to change the status just of this icon, swagner 12.02.2012
+			var tVal = (level > 8);
+			
+			if (this.isgreater != tVal) {
+				//if ($debug) Debug.write("Level sendNotification ",this.isgreater,tVal,level);
+				this.isgreater = tVal;
+				this.sendNotification();
+			}
+		]]>
+		</handler>
+
+		<method name="sendNotification">
+			//if ($debug) Debug.write("Level sendNotification ",this.isgreater);
+			if (!this.sendNotificationViaLocalConnection) {
+				return;
+			}
+			if (parent.parent._loudness != null) {
+				parent.parent._loudness.setSpeaking(this.isgreater);
+			}
+			this.objMessage = new Array ();
+			this.objMessage[0] = 'audioActivity';
+			this.objMessage[1] = this.isgreater;
+			this.objMessage[2] = parent.parent.publicSID;
+			ExternalInterface.call("audioActivity", parent.parent.publicSID, this.isgreater);
+			//if ($debug) Debug.write("Level sendNotification ",this.objMessage);
+			this.sendMessage.doCall();
+		</method>
+
+		<netRemoteCallHib name="sendMessage" funcname="sendMessage"
+			remotecontext="$once{ canvas.thishib }" showLoading="false">
+			<netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>
+		</netRemoteCallHib>
+	</class>
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/base/remote/baseVideoView.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/base/remote/baseVideoView.lzx b/openmeetings-flash/src/main/swf/base/remote/baseVideoView.lzx
index 4d92d37..aa42c1a 100644
--- a/openmeetings-flash/src/main/swf/base/remote/baseVideoView.lzx
+++ b/openmeetings-flash/src/main/swf/base/remote/baseVideoView.lzx
@@ -1,104 +1,104 @@
-<library>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-
-
-<!---
-	This class provides the basic functions for the video-output
-
-		@START_CODE
-			<baseVideoView x="20" y="20" width="320" height="240" bgcolor="black" />
-		@END_CODE
- -->
-
-<class name="baseVideoView" width="${parent.width}" height="${parent.height}">
-	<passthrough when="$as3">
-		import flash.media.*;
-		import flash.net.NetConnection;
-		import flash.net.NetStream;
-	</passthrough>
-
-	<attribute name="_sound" value="null"/>
-	<attribute name="__LZvideo" value="null"/>
-
-	<method name="init"><![CDATA[
-		super.init();
-		var mc = new Video(this.width, this.height);
-		this.sprite.addChild(mc);
-		this.__LZvideo = mc;
-		this.applySizeToVid();
-	]]></method>
-
-	<method name="applySizeToVid">
-		var vid = this._getflashvideo();
-		if(vid != null) {
-			vid.width = this.width;
-			vid.height = this.height;
-		} else {
-			if ($debug) Debug.warn("applySizeToVid IS NULL ",this.width,this.height);
-		}
-	</method>
-
-	<handler name="onwidth" args="w">
-		this.applySizeToVid();
-	</handler>
-
-	<handler name="onheight" args="h">
-		//if ($debug) Debug.info("onheight ",this.width,this.height);
-		this.applySizeToVid();
-	</handler>
-
-	<method name="_getflashvideo">
-	<![CDATA[
-		if (__LZvideo == null) {
-			init();
-		}
-		//if ($debug) Debug.write("_getflashvideo()");
-		return this.__LZvideo;
-	]]>
-	</method>
-
-	<method name="attachCamera" args="camera">
-		var vid = this._getflashvideo();
-		vid.attachCamera(camera);
-		//if ($debug) Debug.write("Attaching video :: ", this, vid, camera);
-	</method>
-
-	<!--- shows the Video (NetStream) in the View -->
-	<method name="attachVideo" args="video">
-		var vid = this._getflashvideo();
-		vid.attachNetStream(video);
-	</method>
-
-	<method name="clear">
-		if ($debug) Debug.write("Select unattach :3");
-		if (this.__LZvideo != null) {
-			this.__LZvideo.attachCamera(null);
-			this.__LZvideo.attachNetStream(null);
-			this.__LZvideo.clear();
-			this.sprite.removeChild(this.__LZvideo);
-			this.__LZvideo = null;
-		}
-		if ($debug) Debug.write("Select unattach : 4");
-	</method>
-</class>
-
-
-</library>
+<library>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+
+<!---
+	This class provides the basic functions for the video-output
+
+		@START_CODE
+			<baseVideoView x="20" y="20" width="320" height="240" bgcolor="black" />
+		@END_CODE
+ -->
+
+<class name="baseVideoView" width="${parent.width}" height="${parent.height}">
+	<passthrough when="$as3">
+		import flash.media.*;
+		import flash.net.NetConnection;
+		import flash.net.NetStream;
+	</passthrough>
+
+	<attribute name="_sound" value="null"/>
+	<attribute name="__LZvideo" value="null"/>
+
+	<method name="init"><![CDATA[
+		super.init();
+		var mc = new Video(this.width, this.height);
+		this.sprite.addChild(mc);
+		this.__LZvideo = mc;
+		this.applySizeToVid();
+	]]></method>
+
+	<method name="applySizeToVid">
+		var vid = this._getflashvideo();
+		if(vid != null) {
+			vid.width = this.width;
+			vid.height = this.height;
+		} else {
+			if ($debug) Debug.warn("applySizeToVid IS NULL ",this.width,this.height);
+		}
+	</method>
+
+	<handler name="onwidth" args="w">
+		this.applySizeToVid();
+	</handler>
+
+	<handler name="onheight" args="h">
+		//if ($debug) Debug.info("onheight ",this.width,this.height);
+		this.applySizeToVid();
+	</handler>
+
+	<method name="_getflashvideo">
+	<![CDATA[
+		if (__LZvideo == null) {
+			init();
+		}
+		//if ($debug) Debug.write("_getflashvideo()");
+		return this.__LZvideo;
+	]]>
+	</method>
+
+	<method name="attachCamera" args="camera">
+		var vid = this._getflashvideo();
+		vid.attachCamera(camera);
+		//if ($debug) Debug.write("Attaching video :: ", this, vid, camera);
+	</method>
+
+	<!--- shows the Video (NetStream) in the View -->
+	<method name="attachVideo" args="video">
+		var vid = this._getflashvideo();
+		vid.attachNetStream(video);
+	</method>
+
+	<method name="clear">
+		if ($debug) Debug.write("Select unattach :3");
+		if (this.__LZvideo != null) {
+			this.__LZvideo.attachCamera(null);
+			this.__LZvideo.attachNetStream(null);
+			this.__LZvideo.clear();
+			this.sprite.removeChild(this.__LZvideo);
+			this.__LZvideo = null;
+		}
+		if ($debug) Debug.write("Select unattach : 4");
+	</method>
+</class>
+
+
+</library>


[04/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidget.java
index 4dbebe3..e9c1073 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidget.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard.admin;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class AdminWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-	public static final String WIDGET_ID_ADMIN = "AdminWidget";
-
-	public AdminWidget() {
-		super();
-		location = new WidgetLocation(0, 2);
-		init();
-	}
-	
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString("dashboard.widget.admin.title");
-		id = WIDGET_ID_ADMIN;
-	}
-	
-	@Override
-	public WidgetView createView(String viewId) {
-		return new AdminWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard.admin;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class AdminWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_ADMIN = "AdminWidget";
+
+	public AdminWidget() {
+		super();
+		location = new WidgetLocation(0, 2);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString("dashboard.widget.admin.title");
+		id = WIDGET_ID_ADMIN;
+	}
+	
+	@Override
+	public WidgetView createView(String viewId) {
+		return new AdminWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetDescriptor.java
index 3d418de..f57583e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard.admin;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class AdminWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString("dashboard.widget.admin.title");
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString("dashboard.widget.admin.desc");
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return AdminWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.admin";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard.admin;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class AdminWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString("dashboard.widget.admin.title");
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString("dashboard.widget.admin.desc");
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return AdminWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.admin";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.html
index feb8a3d..1912617 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.html
@@ -1,29 +1,29 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<h3><wicket:message key="dashboard.widget.admin.title"/></h3>
-	<form wicket:id="form">
-		<button wicket:id="show-cleanup-dialog"><wicket:message key="dashboard.widget.admin.cleanup.show"/></button>
-		<div wicket:id="cleanup-dialog"></div>
-	</form>
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<h3><wicket:message key="dashboard.widget.admin.title"/></h3>
+	<form wicket:id="form">
+		<button wicket:id="show-cleanup-dialog"><wicket:message key="dashboard.widget.admin.cleanup.show"/></button>
+		<div wicket:id="cleanup-dialog"></div>
+	</form>
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
index 2efeeac..8d95d20 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminWidgetView.java
@@ -1,54 +1,54 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard.admin;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-import com.googlecode.wicket.jquery.ui.form.button.IndicatingAjaxButton;
-
-@AuthorizeInstantiation("Admin")
-public class AdminWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-	private final AdminCleanupInfoDialog cleanupDialog;
-	final Form<Void> form = new Form<>("form");
-
-	public AdminWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-		add(form);
-		form.add(cleanupDialog = new AdminCleanupInfoDialog("cleanup-dialog"));
-		form.add(new IndicatingAjaxButton("show-cleanup-dialog") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected boolean isDisabledOnClick() {
-				return true;
-			}
-
-			@Override
-			protected void onSubmit(AjaxRequestTarget target) {
-				cleanupDialog.show(target);
-			}
-		});
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard.admin;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+import com.googlecode.wicket.jquery.ui.form.button.IndicatingAjaxButton;
+
+@AuthorizeInstantiation("Admin")
+public class AdminWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+	private final AdminCleanupInfoDialog cleanupDialog;
+	final Form<Void> form = new Form<>("form");
+
+	public AdminWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		add(form);
+		form.add(cleanupDialog = new AdminCleanupInfoDialog("cleanup-dialog"));
+		form.add(new IndicatingAjaxButton("show-cleanup-dialog") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected boolean isDisabledOnClick() {
+				return true;
+			}
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				cleanupDialog.show(target);
+			}
+		});
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
index c376953..7df1978 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
@@ -1,87 +1,87 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<div class="user info panel">
-		<table>
-			<tr>
-				<td><div wicket:id="img"></div></td>
-				<td>
-					<table>
-						<tr>
-							<td><wicket:message key="1164"/></td><td><span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></td>
-						</tr>
-						<tr>
-							<td><wicket:message key="1165"/></td><td><span wicket:id="timeZoneId"></span></td>
-						</tr>
-						<tr>
-							<td><wicket:message key="1296"/></td><td><span wicket:id="regdate"></span></td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-		<div>
-			<fieldset class="ui-widget-content">
-				<legend class="ui-widget-header"><wicket:message key="1166"/></legend>
-				<table>
-					<tr>
-						<td><wicket:message key="1162"/></td>
-						<td><textarea wicket:id="userOffers"></textarea></td>
-					</tr>
-					<tr>
-						<td><wicket:message key="1163"/></td>
-						<td><textarea wicket:id="userSearchs"></textarea></td>
-					</tr>
-				</table>
-			</fieldset> 
-		</div>
-		<div>
-			<fieldset class="ui-widget-content">
-				<legend class="ui-widget-header"><wicket:message key="1167"/></legend>
-				<table wicket:id="address">
-					<tr>
-						<td><wicket:message key="607" /></td>
-						<td><span wicket:id="address.phone"></span></td>
-					</tr>
-					<tr>
-						<td><wicket:message key="139" /></td>
-						<td><span wicket:id="address.street"></span>&nbsp;<span wicket:id="address.additionalname"></span></td>
-					</tr>
-					<tr>
-						<td><wicket:message key="140" /></td>
-						<td><span wicket:id="address.zip"></span>&nbsp;<span wicket:id="address.town"></span></td>
-					</tr>
-					<tr>
-						<td><wicket:message key="141" /></td>
-						<td><span wicket:id="country"></span></td>
-					</tr>
-					<tr>
-						<td><wicket:message key="142" /></td>
-						<td><span wicket:id="address.comment"></span></td>
-					</tr>
-				</table>
-				<div wicket:id="addressDenied"></div>
-			</fieldset> 
-		</div>
-	</div>
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="user info panel">
+		<table>
+			<tr>
+				<td><div wicket:id="img"></div></td>
+				<td>
+					<table>
+						<tr>
+							<td><wicket:message key="1164"/></td><td><span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></td>
+						</tr>
+						<tr>
+							<td><wicket:message key="1165"/></td><td><span wicket:id="timeZoneId"></span></td>
+						</tr>
+						<tr>
+							<td><wicket:message key="1296"/></td><td><span wicket:id="regdate"></span></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+		<div>
+			<fieldset class="ui-widget-content">
+				<legend class="ui-widget-header"><wicket:message key="1166"/></legend>
+				<table>
+					<tr>
+						<td><wicket:message key="1162"/></td>
+						<td><textarea wicket:id="userOffers"></textarea></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="1163"/></td>
+						<td><textarea wicket:id="userSearchs"></textarea></td>
+					</tr>
+				</table>
+			</fieldset> 
+		</div>
+		<div>
+			<fieldset class="ui-widget-content">
+				<legend class="ui-widget-header"><wicket:message key="1167"/></legend>
+				<table wicket:id="address">
+					<tr>
+						<td><wicket:message key="607" /></td>
+						<td><span wicket:id="address.phone"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="139" /></td>
+						<td><span wicket:id="address.street"></span>&nbsp;<span wicket:id="address.additionalname"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="140" /></td>
+						<td><span wicket:id="address.zip"></span>&nbsp;<span wicket:id="address.town"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="141" /></td>
+						<td><span wicket:id="country"></span></td>
+					</tr>
+					<tr>
+						<td><wicket:message key="142" /></td>
+						<td><span wicket:id="address.comment"></span></td>
+					</tr>
+				</table>
+				<div wicket:id="addressDenied"></div>
+			</fieldset> 
+		</div>
+	</div>
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
index 63dd237..56713fb 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
@@ -1,73 +1,73 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.profile;
-
-import static org.apache.openmeetings.db.util.LocaleHelper.getCountryName;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import org.apache.openmeetings.db.dao.user.UserContactDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.ProfileImagePanel;
-import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.model.CompoundPropertyModel;
-
-public class UserProfilePanel extends UserPanel {
-	private static final long serialVersionUID = 1L;
-	private final WebMarkupContainer address = new WebMarkupContainer("address");
-	private final Label addressDenied = new Label("addressDenied", "");
-
-	public UserProfilePanel(String id, long userId) {
-		this(id, new CompoundPropertyModel<>(getBean(UserDao.class).get(userId)));
-	}
-
-	public UserProfilePanel(String id, CompoundPropertyModel<User> model) {
-		super(id, model);
-
-		add(new ProfileImagePanel("img", model.getObject().getId()));
-		add(new Label("firstname"));
-		add(new Label("lastname"));
-		add(new Label("timeZoneId"));
-		add(new Label("regdate"));
-		add(new TextArea<String>("userOffers").setEnabled(false));
-		add(new TextArea<String>("userSearchs").setEnabled(false));
-		if (getUserId().equals(model.getObject().getId()) || model.getObject().isShowContactData()
-				|| (model.getObject().isShowContactDataToContacts() && getBean(UserContactDao.class).isContact(model.getObject().getId(), getUserId())))
-		{
-			addressDenied.setVisible(false);
-			address.add(new Label("address.phone"));
-			address.add(new Label("address.street"));
-			address.add(new Label("address.additionalname"));
-			address.add(new Label("address.zip"));
-			address.add(new Label("address.town"));
-			address.add(new Label("country", getCountryName(model.getObject().getAddress().getCountry(), getLocale())));
-			address.add(new Label("address.comment"));
-		} else {
-			address.setVisible(false);
-			addressDenied.setDefaultModelObject(Application.getString(model.getObject().isShowContactDataToContacts() ? 1269 : 1268));
-		}
-		add(address.setDefaultModel(model));
-		add(addressDenied);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.db.util.LocaleHelper.getCountryName;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.user.UserContactDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ProfileImagePanel;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.CompoundPropertyModel;
+
+public class UserProfilePanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer address = new WebMarkupContainer("address");
+	private final Label addressDenied = new Label("addressDenied", "");
+
+	public UserProfilePanel(String id, long userId) {
+		this(id, new CompoundPropertyModel<>(getBean(UserDao.class).get(userId)));
+	}
+
+	public UserProfilePanel(String id, CompoundPropertyModel<User> model) {
+		super(id, model);
+
+		add(new ProfileImagePanel("img", model.getObject().getId()));
+		add(new Label("firstname"));
+		add(new Label("lastname"));
+		add(new Label("timeZoneId"));
+		add(new Label("regdate"));
+		add(new TextArea<String>("userOffers").setEnabled(false));
+		add(new TextArea<String>("userSearchs").setEnabled(false));
+		if (getUserId().equals(model.getObject().getId()) || model.getObject().isShowContactData()
+				|| (model.getObject().isShowContactDataToContacts() && getBean(UserContactDao.class).isContact(model.getObject().getId(), getUserId())))
+		{
+			addressDenied.setVisible(false);
+			address.add(new Label("address.phone"));
+			address.add(new Label("address.street"));
+			address.add(new Label("address.additionalname"));
+			address.add(new Label("address.zip"));
+			address.add(new Label("address.town"));
+			address.add(new Label("country", getCountryName(model.getObject().getAddress().getCountry(), getLocale())));
+			address.add(new Label("address.comment"));
+		} else {
+			address.setVisible(false);
+			addressDenied.setDefaultModelObject(Application.getString(model.getObject().isShowContactDataToContacts() ? 1269 : 1268));
+		}
+		add(address.setDefaultModel(model));
+		add(addressDenied);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
index dc1cc3c..33b62b6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
@@ -1,69 +1,69 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<!--  FIXME move styles into CSS -->
-	<table style="width: 100%; height: 100%;">
-		<tr>
-			<td valign="top" style="width: 200px;">
-				<form wicket:id="form">
-					<div><wicket:message key="1179"/></div>
-					<input type="text" wicket:id="text"/><br/>
-					<div><wicket:message key="1177"/></div>
-					<input type="text" wicket:id="offer"/><br/>
-					<div><wicket:message key="1178"/></div>
-					<input type="text" wicket:id="search"/><br/>
-					<br/>
-					<button wicket:id="submit" type="button"><wicket:message key="1176"/></button>
-				</form>
-			</td>
-			<td valign="top">
-				<div wicket:id="container" style="height: 100%; min-height: 400px;">
-					<div><strong><wicket:message key="1184"/></strong>&nbsp;&nbsp;&nbsp;<span wicket:id="navigator"></span></div>
-					<table id="searchUsersTable" style="width: 100%;">
-						<thead>
-							<tr>
-								<th><wicket:message key="1180"/></th>
-								<th><wicket:message key="1181"/></th>
-								<th><wicket:message key="1182"/></th>
-								<th><wicket:message key="1183"/></th>
-								<th><wicket:message key="1185"/></th>
-							</tr>
-						</thead>
-						<tbody>
-							<tr wicket:id="users">
-								<td><span class="om-icon" wicket:id="status"></span><span wicket:id="name"></span></td>
-								<td wicket:id="tz"></td>
-								<td wicket:id="offer"></td>
-								<td wicket:id="search"></td>
-								<td style="white-space: nowrap;"><div wicket:id="add" class="add om-icon clickable" wicket:message="title:1186"
-									></div><div wicket:id="message" class="new-email om-icon clickable" wicket:message="title:1253"
-									></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"
-									></div><div wicket:id="invite" class="invite om-icon clickable" wicket:message="title:1131"></div></td>
-							</tr>
-						</tbody>
-					</table>
-				</div>
-			</td>
-		</tr>
-	</table>
-</wicket:panel>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<!--  FIXME move styles into CSS -->
+	<table style="width: 100%; height: 100%;">
+		<tr>
+			<td valign="top" style="width: 200px;">
+				<form wicket:id="form">
+					<div><wicket:message key="1179"/></div>
+					<input type="text" wicket:id="text"/><br/>
+					<div><wicket:message key="1177"/></div>
+					<input type="text" wicket:id="offer"/><br/>
+					<div><wicket:message key="1178"/></div>
+					<input type="text" wicket:id="search"/><br/>
+					<br/>
+					<button wicket:id="submit" type="button"><wicket:message key="1176"/></button>
+				</form>
+			</td>
+			<td valign="top">
+				<div wicket:id="container" style="height: 100%; min-height: 400px;">
+					<div><strong><wicket:message key="1184"/></strong>&nbsp;&nbsp;&nbsp;<span wicket:id="navigator"></span></div>
+					<table id="searchUsersTable" style="width: 100%;">
+						<thead>
+							<tr>
+								<th><wicket:message key="1180"/></th>
+								<th><wicket:message key="1181"/></th>
+								<th><wicket:message key="1182"/></th>
+								<th><wicket:message key="1183"/></th>
+								<th><wicket:message key="1185"/></th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr wicket:id="users">
+								<td><span class="om-icon" wicket:id="status"></span><span wicket:id="name"></span></td>
+								<td wicket:id="tz"></td>
+								<td wicket:id="offer"></td>
+								<td wicket:id="search"></td>
+								<td style="white-space: nowrap;"><div wicket:id="add" class="add om-icon clickable" wicket:message="title:1186"
+									></div><div wicket:id="message" class="new-email om-icon clickable" wicket:message="title:1253"
+									></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"
+									></div><div wicket:id="invite" class="invite om-icon clickable" wicket:message="title:1131"></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</td>
+		</tr>
+	</table>
+</wicket:panel>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
index 02be695..eb536de 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
@@ -1,154 +1,154 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.profile;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.Application.isUserOnline;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.user.UserContactDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.util.TimezoneUtil;
-import org.apache.openmeetings.web.common.PagingNavigatorPanel;
-import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.repeater.Item;
-import org.apache.wicket.markup.repeater.data.DataView;
-import org.apache.wicket.markup.repeater.data.IDataProvider;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
-import com.googlecode.wicket.jquery.ui.plugins.fixedheadertable.FixedHeaderTableBehavior;
-
-public class UserSearchPanel extends UserPanel {
-	private static final long serialVersionUID = 1L;
-	private final static List<Integer> itemsPerPage = Arrays.asList(10, 25, 50, 75, 100, 200, 500, 1000, 2500, 5000);
-	private String text;
-	private String search;
-	private String offer;
-	private String orderBy = "u.firstname";
-	private boolean asc = true;
-	private boolean searched = false;
-	private final WebMarkupContainer container = new WebMarkupContainer("container");
-	private final FixedHeaderTableBehavior fixedHeader = new FixedHeaderTableBehavior("#searchUsersTable", new Options("height", 400));
-
-	private void refresh(IPartialPageRequestHandler handler) {
-		handler.add(container.add(fixedHeader));
-	}
-
-	public UserSearchPanel(String id) {
-		super(id);
-
-		add(new Form<Void>("form") {
-			private static final long serialVersionUID = 1L;
-			{
-				add(new TextField<>("text", new PropertyModel<String>(UserSearchPanel.this, "text")));
-				add(new TextField<>("offer", new PropertyModel<String>(UserSearchPanel.this, "offer")));
-				add(new TextField<>("search", new PropertyModel<String>(UserSearchPanel.this, "search")));
-				add(new AjaxButton("submit") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onSubmit(AjaxRequestTarget target) {
-						searched = true;
-						refresh(target);
-					}
-				});
-			}
-		});
-		IDataProvider<User> dp = new IDataProvider<User>() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void detach() {
-			}
-
-			@Override
-			public Iterator<? extends User> iterator(long first, long count) {
-				return searched ? getBean(UserDao.class).searchUserProfile(getUserId(), text, offer, search, orderBy, (int)first, (int)count, asc).iterator()
-						: new ArrayList<User>().iterator();
-			}
-
-			@Override
-			public long size() {
-				return searched ? getBean(UserDao.class).searchCountUserProfile(getUserId(), text, offer, search) : 0;
-			}
-
-			@Override
-			public IModel<User> model(User object) {
-				return new CompoundPropertyModel<>(object);
-			}
-
-		};
-		final DataView<User> dw = new DataView<User>("users", dp) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(Item<User> item) {
-				final UserContactDao contactsDao = getBean(UserContactDao.class);
-				User u = item.getModelObject();
-				final long userId = u.getId();
-				item.add(new WebMarkupContainer("status").add(AttributeModifier.append("class", isUserOnline(userId) ? "online" : "offline")));
-				item.add(new Label("name", getName(u)));
-				item.add(new Label("tz", getBean(TimezoneUtil.class).getTimeZone(u).getID()));
-				item.add(new Label("offer", u.getUserOffers()));
-				item.add(new Label("search", u.getUserSearchs()));
-				item.add(new WebMarkupContainer("view").add(AttributeModifier.append("onclick", String.format("showUserInfo(%s);", userId))));
-				item.add(new WebMarkupContainer("add").setVisible(userId != getUserId() && !contactsDao.isContact(userId, getUserId()))
-						.add(AttributeModifier.append("onclick", String.format("addContact(%s);", userId))));
-				item.add(new WebMarkupContainer("message").setVisible(userId != getUserId()).add(AttributeModifier.append("onclick", String.format("privateMessage(%s);", userId))));
-				item.add(new WebMarkupContainer("invite").setVisible(userId != getUserId()).add(AttributeModifier.append("onclick", String.format("inviteUser(%s);", userId))));
-				//item.add(new TooltipBehavior(new Options("content", "TODO:: Picture will be displayed"))); //FIXME
-			}
-		};
-
-		add(container.add(dw, new PagingNavigatorPanel("navigator", dw, itemsPerPage, 100) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				refresh(target);
-			}
-		}).setOutputMarkupId(true));
-	}
-
-	private static String getName(User u) {
-		return "" + u.getFirstname() + " " + u.getLastname() + " [" + u.getLogin() + "]"; //FIXME salutation
-	}
-
-	@Override
-	public void onNewMessageClose(IPartialPageRequestHandler handler) {
-		refresh(handler);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.Application.isUserOnline;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserContactDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.web.common.PagingNavigatorPanel;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.IDataProvider;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.PropertyModel;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.jquery.ui.plugins.fixedheadertable.FixedHeaderTableBehavior;
+
+public class UserSearchPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final static List<Integer> itemsPerPage = Arrays.asList(10, 25, 50, 75, 100, 200, 500, 1000, 2500, 5000);
+	private String text;
+	private String search;
+	private String offer;
+	private String orderBy = "u.firstname";
+	private boolean asc = true;
+	private boolean searched = false;
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final FixedHeaderTableBehavior fixedHeader = new FixedHeaderTableBehavior("#searchUsersTable", new Options("height", 400));
+
+	private void refresh(IPartialPageRequestHandler handler) {
+		handler.add(container.add(fixedHeader));
+	}
+
+	public UserSearchPanel(String id) {
+		super(id);
+
+		add(new Form<Void>("form") {
+			private static final long serialVersionUID = 1L;
+			{
+				add(new TextField<>("text", new PropertyModel<String>(UserSearchPanel.this, "text")));
+				add(new TextField<>("offer", new PropertyModel<String>(UserSearchPanel.this, "offer")));
+				add(new TextField<>("search", new PropertyModel<String>(UserSearchPanel.this, "search")));
+				add(new AjaxButton("submit") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target) {
+						searched = true;
+						refresh(target);
+					}
+				});
+			}
+		});
+		IDataProvider<User> dp = new IDataProvider<User>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void detach() {
+			}
+
+			@Override
+			public Iterator<? extends User> iterator(long first, long count) {
+				return searched ? getBean(UserDao.class).searchUserProfile(getUserId(), text, offer, search, orderBy, (int)first, (int)count, asc).iterator()
+						: new ArrayList<User>().iterator();
+			}
+
+			@Override
+			public long size() {
+				return searched ? getBean(UserDao.class).searchCountUserProfile(getUserId(), text, offer, search) : 0;
+			}
+
+			@Override
+			public IModel<User> model(User object) {
+				return new CompoundPropertyModel<>(object);
+			}
+
+		};
+		final DataView<User> dw = new DataView<User>("users", dp) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<User> item) {
+				final UserContactDao contactsDao = getBean(UserContactDao.class);
+				User u = item.getModelObject();
+				final long userId = u.getId();
+				item.add(new WebMarkupContainer("status").add(AttributeModifier.append("class", isUserOnline(userId) ? "online" : "offline")));
+				item.add(new Label("name", getName(u)));
+				item.add(new Label("tz", getBean(TimezoneUtil.class).getTimeZone(u).getID()));
+				item.add(new Label("offer", u.getUserOffers()));
+				item.add(new Label("search", u.getUserSearchs()));
+				item.add(new WebMarkupContainer("view").add(AttributeModifier.append("onclick", String.format("showUserInfo(%s);", userId))));
+				item.add(new WebMarkupContainer("add").setVisible(userId != getUserId() && !contactsDao.isContact(userId, getUserId()))
+						.add(AttributeModifier.append("onclick", String.format("addContact(%s);", userId))));
+				item.add(new WebMarkupContainer("message").setVisible(userId != getUserId()).add(AttributeModifier.append("onclick", String.format("privateMessage(%s);", userId))));
+				item.add(new WebMarkupContainer("invite").setVisible(userId != getUserId()).add(AttributeModifier.append("onclick", String.format("inviteUser(%s);", userId))));
+				//item.add(new TooltipBehavior(new Options("content", "TODO:: Picture will be displayed"))); //FIXME
+			}
+		};
+
+		add(container.add(dw, new PagingNavigatorPanel("navigator", dw, itemsPerPage, 100) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				refresh(target);
+			}
+		}).setOutputMarkupId(true));
+	}
+
+	private static String getName(User u) {
+		return "" + u.getFirstname() + " " + u.getLastname() + " [" + u.getLogin() + "]"; //FIXME salutation
+	}
+
+	@Override
+	public void onNewMessageClose(IPartialPageRequestHandler handler) {
+		refresh(handler);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
index acb81c9..4a57ffe 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
@@ -1,62 +1,62 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<table>
-		<tr>
-			<td style="vertical-align: top">
-				<div wicket:id="list"></div>
-			</td>
-			<td style="vertical-align: top">
-				<!-- Users in this Room -->
-				<fieldset class="ui-widget-content" wicket:id="details">
-					<div class="formelement" style="font-style: italic;">
-	                    <label><wicket:message key="404" /></label>
-					</div>
-					<div class="formelement">
-	                    <label style="font-weight: bold;"><wicket:message key="406" /></label>
-	                    <span wicket:id="roomName"></span>&nbsp;#<span wicket:id="roomId"></span>
-					</div>
-					<div class="formelement">
-	                    <label style="font-weight: bold;"><wicket:message key="270" /></label>
-	                    <span wicket:id="roomComment"></span>
-					</div>
-					<div class="formelement">
-	                    <label><wicket:message key="407" /></label>
-					</div>
-					<div class="tableWrapper" id="adminTable">
-						<table class="adminListTable">
-							<tbody wicket:id="clientsContainer">		
-					    		<tr wicket:id="clients">
-									<td style="width: 50px;"><img wicket:id="clientImage" style="min-width: 50px; height:50px" /></td>
-									<td style="width: 350px; height:50px">
-										<div style="width: 350px; height:50px"><span wicket:id="clientLogin"></span>&nbsp;<wicket:message key="408"/>&nbsp;<span wicket:id="from"></span></div>
-									</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</fieldset>
-			</td>
-		</tr>
-	</table>
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<table>
+		<tr>
+			<td style="vertical-align: top">
+				<div wicket:id="list"></div>
+			</td>
+			<td style="vertical-align: top">
+				<!-- Users in this Room -->
+				<fieldset class="ui-widget-content" wicket:id="details">
+					<div class="formelement" style="font-style: italic;">
+	                    <label><wicket:message key="404" /></label>
+					</div>
+					<div class="formelement">
+	                    <label style="font-weight: bold;"><wicket:message key="406" /></label>
+	                    <span wicket:id="roomName"></span>&nbsp;#<span wicket:id="roomId"></span>
+					</div>
+					<div class="formelement">
+	                    <label style="font-weight: bold;"><wicket:message key="270" /></label>
+	                    <span wicket:id="roomComment"></span>
+					</div>
+					<div class="formelement">
+	                    <label><wicket:message key="407" /></label>
+					</div>
+					<div class="tableWrapper" id="adminTable">
+						<table class="adminListTable">
+							<tbody wicket:id="clientsContainer">		
+					    		<tr wicket:id="clients">
+									<td style="width: 50px;"><img wicket:id="clientImage" style="min-width: 50px; height:50px" /></td>
+									<td style="width: 350px; height:50px">
+										<div style="width: 350px; height:50px"><span wicket:id="clientLogin"></span>&nbsp;<wicket:message key="408"/>&nbsp;<span wicket:id="from"></span></div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</fieldset>
+			</td>
+		</tr>
+	</table>
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
index 6399fd0..1bd414c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
@@ -1,137 +1,137 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.rooms;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.basic.Client;
-import org.apache.openmeetings.db.entity.room.Room;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.Image;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.resource.ByteArrayResource;
-import org.apache.wicket.util.io.IOUtils;
-
-public class RoomsPanel extends UserPanel {
-	private static final long serialVersionUID = 1L;
-	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
-	private final WebMarkupContainer details = new WebMarkupContainer("details");
-	private final ListView<Client> clients;
-	private IModel<Long> roomID = Model.of((Long)null);
-	private IModel<String> roomName = Model.of((String)null);
-	private IModel<String> roomComment = Model.of((String)null);
-	private List<Client> clientsInRoom = null;
-	private Long roomId = 0L;
-
-	public RoomsPanel(String id, List<Room> rooms) {
-		super(id);
-		add(new RoomListPanel("list", rooms, Application.getString(131)) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onContainerClick(AjaxRequestTarget target, Room r) {
-				roomId = r.getId();
-				updateRoomDetails(target);
-			}
-
-			@Override
-			public void onRefreshClick(AjaxRequestTarget target, Room r) {
-				super.onRefreshClick(target, r);
-				roomId = r.getId();
-				updateRoomDetails(target);
-			}
-		});
-
-		// Users in this Room
-		add(details.setOutputMarkupId(true).setVisible(rooms.size() > 0));
-		details.add(new Label("roomId", roomID));
-		details.add(new Label("roomName", roomName));
-		details.add(new Label("roomComment", roomComment));
-		clients = new ListView<Client>("clients", clientsInRoom){
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(final ListItem<Client> item) {
-				Client client = item.getModelObject();
-				final Long userId = client.getUserId();
-				item.add(new Image("clientImage", new ByteArrayResource("image/jpeg") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected ResourceResponse newResourceResponse(Attributes attributes) {
-						ResourceResponse rr = super.newResourceResponse(attributes);
-						rr.disableCaching();
-						return rr;
-					}
-
-					@Override
-					protected byte[] getData(Attributes attributes) {
-						String uri = null;
-						if (userId != null) {
-							uri = getBean(UserDao.class).get(userId > 0 ? userId : -userId).getPictureuri();
-						}
-						File img = OmFileHelper.getUserProfilePicture(userId, uri);
-						try (InputStream is = new FileInputStream(img)) {
-							return IOUtils.toByteArray(is);
-						} catch (Exception e) {
-							//no-op
-						}
-						return null;
-					}
-				}));
-				item.add(new Label("clientLogin", client.getUser().getLogin()));
-				item.add(new Label("from", client.getConnectedSince()));
-			}
-		};
-		details.add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
-	}
-
-	void updateRoomDetails(AjaxRequestTarget target) {
-		final List<Client> clientsInRoom = Application.getRoomClients(roomId);
-		clients.setDefaultModelObject(clientsInRoom);
-		Room room = getBean(RoomDao.class).get(roomId);
-		roomID.setObject(room.getId());
-		roomName.setObject(room.getName());
-		roomComment.setObject(room.getComment());
-		target.add(clientsContainer, details);
-	}
-
-	@Override
-	protected void onDetach() {
-		roomID.detach();
-		roomName.detach();
-		roomComment.detach();
-		super.onDetach();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.util.io.IOUtils;
+
+public class RoomsPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
+	private final WebMarkupContainer details = new WebMarkupContainer("details");
+	private final ListView<Client> clients;
+	private IModel<Long> roomID = Model.of((Long)null);
+	private IModel<String> roomName = Model.of((String)null);
+	private IModel<String> roomComment = Model.of((String)null);
+	private List<Client> clientsInRoom = null;
+	private Long roomId = 0L;
+
+	public RoomsPanel(String id, List<Room> rooms) {
+		super(id);
+		add(new RoomListPanel("list", rooms, Application.getString(131)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onContainerClick(AjaxRequestTarget target, Room r) {
+				roomId = r.getId();
+				updateRoomDetails(target);
+			}
+
+			@Override
+			public void onRefreshClick(AjaxRequestTarget target, Room r) {
+				super.onRefreshClick(target, r);
+				roomId = r.getId();
+				updateRoomDetails(target);
+			}
+		});
+
+		// Users in this Room
+		add(details.setOutputMarkupId(true).setVisible(rooms.size() > 0));
+		details.add(new Label("roomId", roomID));
+		details.add(new Label("roomName", roomName));
+		details.add(new Label("roomComment", roomComment));
+		clients = new ListView<Client>("clients", clientsInRoom){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final ListItem<Client> item) {
+				Client client = item.getModelObject();
+				final Long userId = client.getUserId();
+				item.add(new Image("clientImage", new ByteArrayResource("image/jpeg") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected ResourceResponse newResourceResponse(Attributes attributes) {
+						ResourceResponse rr = super.newResourceResponse(attributes);
+						rr.disableCaching();
+						return rr;
+					}
+
+					@Override
+					protected byte[] getData(Attributes attributes) {
+						String uri = null;
+						if (userId != null) {
+							uri = getBean(UserDao.class).get(userId > 0 ? userId : -userId).getPictureuri();
+						}
+						File img = OmFileHelper.getUserProfilePicture(userId, uri);
+						try (InputStream is = new FileInputStream(img)) {
+							return IOUtils.toByteArray(is);
+						} catch (Exception e) {
+							//no-op
+						}
+						return null;
+					}
+				}));
+				item.add(new Label("clientLogin", client.getUser().getLogin()));
+				item.add(new Label("from", client.getConnectedSince()));
+			}
+		};
+		details.add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
+	}
+
+	void updateRoomDetails(AjaxRequestTarget target) {
+		final List<Client> clientsInRoom = Application.getRoomClients(roomId);
+		clients.setDefaultModelObject(clientsInRoom);
+		Room room = getBean(RoomDao.class).get(roomId);
+		roomID.setObject(room.getId());
+		roomName.setObject(room.getName());
+		roomComment.setObject(room.getComment());
+		target.add(clientsContainer, details);
+	}
+
+	@Override
+	protected void onDetach() {
+		roomID.detach();
+		roomName.detach();
+		roomComment.detach();
+		super.onDetach();
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
index dde60ba..f433301 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
@@ -1,27 +1,27 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<div wicket:id="title" class="rooms title"></div>
-	<div wicket:id="desc" class="rooms desc info-text"></div>
-	<div wicket:id="rooms"></div>
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="title" class="rooms title"></div>
+	<div wicket:id="desc" class="rooms desc info-text"></div>
+	<div wicket:id="rooms"></div>
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
index eb0ef24..b931e24 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
@@ -1,56 +1,56 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.rooms;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.openmeetings.web.util.OmUrlFragment.MenuParams;
-import org.apache.wicket.markup.html.basic.Label;
-
-public class RoomsSelectorPanel extends UserPanel {
-	private static final long serialVersionUID = 1L;
-
-	public RoomsSelectorPanel(String id, MenuParams param) {
-		super(id);
-
-		long title, desc;
-		RoomDao roomDao = Application.getBean(RoomDao.class);
-		switch (param) {
-			case myTabButton:
-				title = 781L;
-				desc = 782L;
-				add(new RoomsPanel("rooms", getMyRooms()));
-				break;
-			case privateTabButton:
-				title = 779L;
-				desc = 780L;
-				add(new RoomsTabbedPanel("rooms")); 
-				break;
-			case publicTabButton:
-			default:
-				title = 777L;
-				desc = 778L;
-				add(new RoomsPanel("rooms", roomDao.getPublicRooms()));
-				break;
-		}
-		add(new Label("title", Application.getString(title)));
-		add(new Label("desc", Application.getString(desc)));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.openmeetings.web.util.OmUrlFragment.MenuParams;
+import org.apache.wicket.markup.html.basic.Label;
+
+public class RoomsSelectorPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+
+	public RoomsSelectorPanel(String id, MenuParams param) {
+		super(id);
+
+		long title, desc;
+		RoomDao roomDao = Application.getBean(RoomDao.class);
+		switch (param) {
+			case myTabButton:
+				title = 781L;
+				desc = 782L;
+				add(new RoomsPanel("rooms", getMyRooms()));
+				break;
+			case privateTabButton:
+				title = 779L;
+				desc = 780L;
+				add(new RoomsTabbedPanel("rooms")); 
+				break;
+			case publicTabButton:
+			default:
+				title = 777L;
+				desc = 778L;
+				add(new RoomsPanel("rooms", roomDao.getPublicRooms()));
+				break;
+		}
+		add(new Label("title", Application.getString(title)));
+		add(new Label("desc", Application.getString(desc)));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
index b8aa48b..a92599d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
@@ -1,30 +1,30 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div id="orgTabs">
-			<ul>
-				<li wicket:id="orgTabs"><a wicket:id="link"><wicket:container wicket:id="name"></wicket:container></a></li>
-			</ul>
-			<wicket:container wicket:id="orgRooms"><div wicket:id="rooms"></div></wicket:container>
-		</div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div id="orgTabs">
+			<ul>
+				<li wicket:id="orgTabs"><a wicket:id="link"><wicket:container wicket:id="name"></wicket:container></a></li>
+			</ul>
+			<wicket:container wicket:id="orgRooms"><div wicket:id="rooms"></div></wicket:container>
+		</div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
index 89eaa24..f73a2d9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
@@ -1,70 +1,70 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.rooms;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.Model;
-
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-
-public class RoomsTabbedPanel extends UserPanel {
-	private static final long serialVersionUID = 3642004664480074881L;
-
-	public RoomsTabbedPanel(String id) {
-		super(id);
-		
-		User u = getBean(UserDao.class).get(getUserId());
-		add(new ListView<GroupUser>("orgTabs", u.getGroupUsers()) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(ListItem<GroupUser> item) {
-				Group org = item.getModelObject().getGroup();
-				item.add(new WebMarkupContainer("link")
-					.add(new Label("name", Model.of(org.getName())))
-					.add(new AttributeModifier("href", "#org" + org.getId())));
-			}
-		});
-		add(new ListView<GroupUser>("orgRooms", u.getGroupUsers()) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(ListItem<GroupUser> item) {
-				Group org = item.getModelObject().getGroup();
-				item.add(new RoomsPanel("rooms"
-					, getBean(RoomDao.class).getGroupRooms(org.getId()))
-					.setMarkupId("org" + org.getId())).setRenderBodyOnly(true);
-			}
-		});
-		add(new JQueryBehavior("#orgTabs", "tabs"));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+
+public class RoomsTabbedPanel extends UserPanel {
+	private static final long serialVersionUID = 3642004664480074881L;
+
+	public RoomsTabbedPanel(String id) {
+		super(id);
+		
+		User u = getBean(UserDao.class).get(getUserId());
+		add(new ListView<GroupUser>("orgTabs", u.getGroupUsers()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<GroupUser> item) {
+				Group org = item.getModelObject().getGroup();
+				item.add(new WebMarkupContainer("link")
+					.add(new Label("name", Model.of(org.getName())))
+					.add(new AttributeModifier("href", "#org" + org.getId())));
+			}
+		});
+		add(new ListView<GroupUser>("orgRooms", u.getGroupUsers()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<GroupUser> item) {
+				Group org = item.getModelObject().getGroup();
+				item.add(new RoomsPanel("rooms"
+					, getBean(RoomDao.class).getGroupRooms(org.getId()))
+					.setMarkupId("org" + org.getId())).setRenderBodyOnly(true);
+			}
+		});
+		add(new JQueryBehavior("#orgTabs", "tabs"));
+	}
+}


[13/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/OpenOfficeConverter.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/OpenOfficeConverter.xml b/openmeetings-server/src/site/xdoc/OpenOfficeConverter.xml
index b4848b5..66e48b9 100644
--- a/openmeetings-server/src/site/xdoc/OpenOfficeConverter.xml
+++ b/openmeetings-server/src/site/xdoc/OpenOfficeConverter.xml
@@ -1,54 +1,54 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>OpenOffice converter for OpenMeetings</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="OpenOffice Service for OpenMeetings">
-			<p>
-				To import .doc, .docx, .odp, .xls, .xlsx, .ppt, .pptx, ... [ all
-				files that you can open with OpenOffice ]
-				to OpenMeetings and use
-				them in the whiteboard you need OpenOffice or LibreOffice
-				installed the machine that runs OpenMeetings.
-			</p>
-			<div class="alert alert-success">
-				<i>Since Version 2.0 of OpenMeetings starting of
-					OpenOffice/LibreOffice as service in not required, JODConverter
-					will automatically start and shut down the service!
-				</i>
-			</div>
-			<div class="alert alert-success">
-				<i>JODConverter is bundled into OpenMeetings since 3.1.4</i>
-			</div>
-			<p>
-				Installation of JODConverter means: You download the ZIP binary from
-				their
-				<a href="https://code.google.com/archive/p/jodconverter/downloads" target="_blank" rel="nofollow">website</a>
-				and then configure in Apache OpenMeetings Administration >
-				Configuration (or during installation) the config key
-				<tt>jod.path</tt>
-				to point to the "lib" directory of the unpacked JODConverter binary.
-				There is no restart of OpenMeetings required.
-			</p>
-			<p>You should use an OpenOffice version greater 3</p>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>OpenOffice converter for OpenMeetings</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="OpenOffice Service for OpenMeetings">
+			<p>
+				To import .doc, .docx, .odp, .xls, .xlsx, .ppt, .pptx, ... [ all
+				files that you can open with OpenOffice ]
+				to OpenMeetings and use
+				them in the whiteboard you need OpenOffice or LibreOffice
+				installed the machine that runs OpenMeetings.
+			</p>
+			<div class="alert alert-success">
+				<i>Since Version 2.0 of OpenMeetings starting of
+					OpenOffice/LibreOffice as service in not required, JODConverter
+					will automatically start and shut down the service!
+				</i>
+			</div>
+			<div class="alert alert-success">
+				<i>JODConverter is bundled into OpenMeetings since 3.1.4</i>
+			</div>
+			<p>
+				Installation of JODConverter means: You download the ZIP binary from
+				their
+				<a href="https://code.google.com/archive/p/jodconverter/downloads" target="_blank" rel="nofollow">website</a>
+				and then configure in Apache OpenMeetings Administration >
+				Configuration (or during installation) the config key
+				<tt>jod.path</tt>
+				to point to the "lib" directory of the unpacked JODConverter binary.
+				There is no restart of OpenMeetings required.
+			</p>
+			<p>You should use an OpenOffice version greater 3</p>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/OracleConfig.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/OracleConfig.xml b/openmeetings-server/src/site/xdoc/OracleConfig.xml
index 3165724..e59c78a 100644
--- a/openmeetings-server/src/site/xdoc/OracleConfig.xml
+++ b/openmeetings-server/src/site/xdoc/OracleConfig.xml
@@ -1,61 +1,61 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Oracle Configuration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="IBM DB2 Configuration">
-
-			<subsection name="Before you start">
-				<ul>
-					<li>Download the latest JDBC Driver from Oracle for your database
-						version. Place those JARs into
-						$Red5/webapps/openmeetings/WEB-INF/lib
-					</li>
-					<li>If you encounter issues, you can drop the db and then run
-						the web based installer again
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="Steps todo">
-				<ul>
-					<li>
-						Run red5-service and goto the web-based installer:
-						http://localhost:5080/openmeetings/install
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="Oracle Sample Configuration">
-				<p>
-					There is a sample configuration for Oracle that ships with
-					every release in:
-					<br />
-					/webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
-				</p>
-			</subsection>
-
-
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Oracle Configuration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="IBM DB2 Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>Download the latest JDBC Driver from Oracle for your database
+						version. Place those JARs into
+						$Red5/webapps/openmeetings/WEB-INF/lib
+					</li>
+					<li>If you encounter issues, you can drop the db and then run
+						the web based installer again
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Oracle Sample Configuration">
+				<p>
+					There is a sample configuration for Oracle that ships with
+					every release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/PortSettings.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/PortSettings.xml b/openmeetings-server/src/site/xdoc/PortSettings.xml
index e5a15d5..19ff013 100644
--- a/openmeetings-server/src/site/xdoc/PortSettings.xml
+++ b/openmeetings-server/src/site/xdoc/PortSettings.xml
@@ -1,86 +1,86 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Port settings</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Default Configuration">
-			<ul>
-				<li>Port 5080: HTTP (For example for file upload and download) </li>
-				<li>Port 1935: RTMP (Flash Stream and Remoting/RPC) </li>
-			</ul>
-			<p>Additionally red5 uses some ports internally. However those ports
-				are not in use by OpenMeetings by default.
-			</p>
-		</section>
-
-		<section name="Configure alternative ports">
-			<p>You need to change two files: </p>
-			<ul>
-				<li>Server-Side configuration: $RED5_HOME/conf/red5.properties, you
-					need to restart the red5-service so that changes are online.
-				</li>
-				<li>Client-Side configuration:
-					$RED5_HOME/webapps/openmeetings/public/config.xml, you need to clear your
-					browser cache after changing the file.
-				</li>
-				<li>
-					<tt>Every server side configuration has a client side representative</tt>
-				</li>
-			</ul>
-			<p></p>
-			<table>
-				<tr>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Config-Name </th>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Default-value </th>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in red5.properties </th>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in public/config.xml </th>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> HTTP </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 5080 </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http.port </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> red5httpport </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> RTMP </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1935 </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmp.port </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmpport </td>
-				</tr>
-			</table>
-		</section>
-
-		<section name="Preventing Firewall issues">
-			<p>A common way of bypassing the firewall is to change HTTP port to 80</p>
-			<p>A short description about the connection mechanism: The
-				application first tries connecting to rtmp 3 times, because rtmp is
-				the protocol that is less performance hungry. If that fails the
-				application will fallback to rtmpT.
-			</p>
-		</section>
-
-		<section name="OpenMeetings over SSL">
-			<p>
-				You can run OpenMeetings completely over SSL. See <a href="RTMPSAndHTTPS.html">RTMPSAndHTTPS</a>.
-			</p>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Port settings</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Default Configuration">
+			<ul>
+				<li>Port 5080: HTTP (For example for file upload and download) </li>
+				<li>Port 1935: RTMP (Flash Stream and Remoting/RPC) </li>
+			</ul>
+			<p>Additionally red5 uses some ports internally. However those ports
+				are not in use by OpenMeetings by default.
+			</p>
+		</section>
+
+		<section name="Configure alternative ports">
+			<p>You need to change two files: </p>
+			<ul>
+				<li>Server-Side configuration: $RED5_HOME/conf/red5.properties, you
+					need to restart the red5-service so that changes are online.
+				</li>
+				<li>Client-Side configuration:
+					$RED5_HOME/webapps/openmeetings/public/config.xml, you need to clear your
+					browser cache after changing the file.
+				</li>
+				<li>
+					<tt>Every server side configuration has a client side representative</tt>
+				</li>
+			</ul>
+			<p></p>
+			<table>
+				<tr>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Config-Name </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Default-value </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in red5.properties </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in public/config.xml </th>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> HTTP </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 5080 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http.port </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> red5httpport </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> RTMP </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1935 </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmp.port </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmpport </td>
+				</tr>
+			</table>
+		</section>
+
+		<section name="Preventing Firewall issues">
+			<p>A common way of bypassing the firewall is to change HTTP port to 80</p>
+			<p>A short description about the connection mechanism: The
+				application first tries connecting to rtmp 3 times, because rtmp is
+				the protocol that is less performance hungry. If that fails the
+				application will fallback to rtmpT.
+			</p>
+		</section>
+
+		<section name="OpenMeetings over SSL">
+			<p>
+				You can run OpenMeetings completely over SSL. See <a href="RTMPSAndHTTPS.html">RTMPSAndHTTPS</a>.
+			</p>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/PostgresConfig.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/PostgresConfig.xml b/openmeetings-server/src/site/xdoc/PostgresConfig.xml
index 1bbdfe2..9f6b33d 100644
--- a/openmeetings-server/src/site/xdoc/PostgresConfig.xml
+++ b/openmeetings-server/src/site/xdoc/PostgresConfig.xml
@@ -1,72 +1,72 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>PostgreSQL Configuration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="PostgreSQL Configuration">
-
-			<subsection name="Before you start">
-				<ul>
-					<li>Make sure that you have set utf8 as default/server-character-set 
-					</li>
-					<li>
-						make sure PostgreSQL is listening on TCP/IP connections!
-						<br />
-						To verify if PostgreSQL connection is working: OpenMeetings will
-						automatically create all tables in the database and all tables
-						should have utf8 as encoding/collation!
-					</li>
-					<li>If you encounter issues, you can drop the db and then run
-						the web based installer again
-					</li>
-					<li><span style="font-size: larger; color: blue;">IMPORTANT</span> According to
-						<a href="http://markmail.org/message/opymlab2e6wygb7p">this</a> thread you need to ensure:<br/>
-						<tt>standard_conforming_strings</tt> is set to <tt><b>on</b></tt> and <br/>
-						<tt>escape_string_warning</tt> is set to <tt><b>off</b></tt>
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="Steps todo">
-				<ul>
-					<li>
-						Run red5-service and goto the web-based installer:
-						http://localhost:5080/openmeetings/install
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="PostgreSQL Sample Configuration">
-				<p>
-					There is a sample configuration for PostgreSQL that ships with
-					every
-					release in:
-					<br />
-					/webapps/openmeetings/WEB-INF/classes/META-INF/postgresql_persistence.xml
-				</p>
-			</subsection>
-
-
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>PostgreSQL Configuration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="PostgreSQL Configuration">
+
+			<subsection name="Before you start">
+				<ul>
+					<li>Make sure that you have set utf8 as default/server-character-set 
+					</li>
+					<li>
+						make sure PostgreSQL is listening on TCP/IP connections!
+						<br />
+						To verify if PostgreSQL connection is working: OpenMeetings will
+						automatically create all tables in the database and all tables
+						should have utf8 as encoding/collation!
+					</li>
+					<li>If you encounter issues, you can drop the db and then run
+						the web based installer again
+					</li>
+					<li><span style="font-size: larger; color: blue;">IMPORTANT</span> According to
+						<a href="http://markmail.org/message/opymlab2e6wygb7p">this</a> thread you need to ensure:<br/>
+						<tt>standard_conforming_strings</tt> is set to <tt><b>on</b></tt> and <br/>
+						<tt>escape_string_warning</tt> is set to <tt><b>off</b></tt>
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="PostgreSQL Sample Configuration">
+				<p>
+					There is a sample configuration for PostgreSQL that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/postgresql_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml b/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
index ffeec0b..0b2f534 100644
--- a/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
+++ b/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
@@ -1,217 +1,217 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Using OpenMeetings with RTMPS and HTTPS</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Using OpenMeetings with RTMPS and HTTPS">
-			<p>There are 3 ways the client communicates with the server: </p>
-			<ul>
-				<li>The flash-client uses RTMP protocol to transfer Audio/Video and
-					to send and receive the user data (login et cetera) to the server
-					and back
-				</li>
-				<li>The browser uses HTTP protocol to load the SWF and to upload and
-					download the files (documents, pdfs, images) to the server and
-					back.
-				</li>
-				<li>The screensharing client uses RTMP protocol to transfer screen
-					data and remote control to the server and back
-				</li>
-			</ul>
-		</section>
-		<section name="Prerequisites">
-			<ul>
-				<li>You need OpenMeetings 1.9.x or later for this, OpenMeetings 1.8.x does not have those options.</li>
-				<li>Install OpenMeetings according to the install instructions and check that it runs without problems</li>
-				<li>Rename the existing keystore file <tt>red5/conf/keystore.jmx</tt> to <tt>red5/conf/keystore.bak</tt></li>
-				<li>Rename the existing truststore file <tt>red5/conf/truststore.jmx</tt> to <tt>red5/conf/truststore.bak</tt></li>
-			</ul>
-		</section>
-		<section name="Create Keystore from the scratch (*)">
-			<ol>
-				<li>
-					Create a new keystore and key, use the same password for both:<br/>
-					<br/><source><![CDATA[
-keytool -keysize 2048 -genkey -alias red5 -keyalg RSA -keystore red5/conf/keystore
-Enter keystore password:
-Re-enter new password:
-What is your first and last name?
-[Unknown]:  <your hostname, e.g demo.openmeetings.de>
-What is the name of your organizational unit?
-[Unknown]:  Dev
-What is the name of your organization?
-[Unknown]:  OpenMeetings
-What is the name of your City or Locality?
-[Unknown]:  Henderson
-What is the name of your State or Province?
-[Unknown]:  Nevada
-What is the two-letter country code for this unit?
-[Unknown]:  US
-Is CN=demo.openmeetings.de, OU=Dev, O=OpenMeetings, L=Henderson, ST=Nevada, C=US correct?
-[no]:  yes
-Enter key password for <red5>
-]]></source>
-				</li>
-				<li>Generate a CSR: <source><![CDATA[keytool -certreq -keyalg RSA -alias red5 -file red5.csr -keystore red5/conf/keystore]]></source>
-				</li>
-				<li>Submit CSR to your CA of choice and receive a signed certificate
-				</li>
-				<li>Import your chosen CA's root certificate into the keystore (may
-					need to download it from their site - make sure to get the root CA and
-					not the intermediate one): 
-					<source><![CDATA[keytool -import -alias root -keystore red5/conf/keystore -trustcacerts -file root.crt]]></source>
-					(note: you may receive a warning that the certificate already exists in the system wide keystore - import
-					anyway)
-				</li>
-				<li>Import the intermediate certificate(s) you normally receive with
-					the certificate:
-					<source><![CDATA[keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts -file intermediate.crt]]></source>
-				</li>
-				<li>Import the certificate you received:
-					<source><![CDATA[keytool -import -alias red5 -keystore red5/conf/keystore -trustcacerts -file demo.openmeetings.de.crt]]></source>
-				</li>
-				<li>Please NOTE according to this <a href="http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html">http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html</a>
-					guide you can split keystore and truststore (OPTIONAL you might just copy keystore to truststore)
-				</li>
-				<li>Create additional certificate as described above.
-					Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>. (This step is required to be able to use
-					screen-sharing web application, you can copy "main" keystore while testing)
-				</li>
-			</ol>
-		</section>
-		<section name="Create Keystore using existing key-pair (**)">
-			<p>Prerequicites:</p>
-			<ul>
-				<li>Server key: red5.key</li>
-				<li>Signed CSR: red5.crt</li>
-				<li>CA's root certificate: root.crt</li>
-				<li>** Intermediate certificate(s): intermedXX.crt</li>
-			</ul>
-			<ol>
-				<li>
-					Export existing keys into PKCS12 format:<br/>
-					<br/><source><![CDATA[
-openssl pkcs12 -export -in red5.crt -inkey red5.key -out red5.p12 -name red5 -certfile root.crt -certfile intermedXX.crt
-
-Enter Export Password: password
-Verifying - Enter Export Password: password
-]]></source>
-				</li>
-				<li>Import resulting red5.p12 into keystore: <source><![CDATA[
-keytool -importkeystore -srcstorepass password -srckeystore red5.p12 -srcstoretype PKCS12 -deststorepass password -destkeystore red5/conf/keystore -alias red5
-]]></source>
-				</li>
-				<li>Import your chosen CA's root certificate into the keystore (may
-					need to download it from their site - make sure to get the root CA and
-					not the intermediate one): 
-					<source><![CDATA[keytool -import -alias root -keystore red5/conf/keystore -trustcacerts -file root.crt]]></source>
-					(note: you may receive a warning that the certificate already exists in the system wide keystore - import
-					anyway)
-				</li>
-				<li>Import the intermediate certificate(s) you normally receive with
-					the certificate:
-					<source><![CDATA[keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts -file intermedXX.crt]]></source>
-				</li>
-				<li>Please NOTE according to this <a href="http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html">http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html</a>
-					guide you can split keystore and truststore (OPTIONAL you might just copy keystore to truststore)
-				</li>
-				<li>Create additional certificate as described above.
-					Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>. (This step is required to be able to use
-					screen-sharing web application, you can copy "main" keystore while testing)
-				</li>
-			</ol>
-		</section>
-		<section name="SSL for the web interface">
-			<p>Please perform following steps if you want to use SSL for the web interface.
-				This is mainly to secure the server against MITM attacks, additionally some other features
-				like file uploads also use a plain HTTP connection if this is not
-				done. The following instructions assume that you have already set up
-				RTMPS successfully. </p>
-			<ol>
-				<li>
-					Edit <tt>red5/conf/jee-container.xml</tt> file:<br/>
-					Comment <tt>Tomcat without SSL enabled</tt> section<br/>
-					UNComment <tt>Tomcat with SSL enabled</tt> section
-				</li>
-				<li>
-					Edit <tt>red5/webapps/openmeetings/public/config.xml</tt> and set
-					<br/><source><![CDATA[
-	<protocol>https</protocol>
-	<red5httpport>5443</red5httpport>
-]]></source>
-				</li>
-				<li>
-					Restart red5 and try to connect to
-					<u>https://your.server:5443</u> - you should be redirected to the OpenMeetings
-					app and all access should be via HTTPS and/or RTMPS (close port 5080 to be sure).
-				</li>
-			</ol>
-		</section>
-		<section name="Set up RTMPS">
-			<h3>Tunneling RTMPS</h3>
-			<ol>
-				<li>HTTPS need to be enabled otherwise tunneling will not work (it can be set up using frontend nginx/apache as well)</li>
-				<li>
-					Edit <tt>red5/webapps/openmeetings/public/config.xml</tt> and set<br/>
-					<br/><source><![CDATA[
-	<rtmpsslport>5443</rtmpsslport>
-	<useSSL>yes</useSSL>
-	<proxyType>none</proxyType>
-]]></source>
-				</li>
-				<li>Please NOTE <tt>rtmpsslport</tt> port set in <tt>red5/webapps/openmeetings/public/config.xml</tt> should match 
-					<tt>https</tt> port set in <tt>red5/conf/red5.properties</tt>
-				</li>
-				<li>Restart red5 and try to connect - your connection should now be made via RTMPS (close port 1935 to be sure)
-				</li>   
-			</ol>
-			<h3>Native RTMPS</h3>
-			<ol>
-				<li> Default RTMPS port is 8443, you can change it by editing <tt>red5/conf/red5.properties</tt> and change the port here: <tt>rtmps.port=8443</tt><br/>
-					Please set <tt>rtmps.keystorepass=password</tt> and <tt>rtmps.truststorepass=password</tt>
-					(password = password you set on your new keystore(s))<br/>
-					Additionally you need to set <tt>rtmps.screen.keystorepass=screenpassword</tt> (screenpassword = password you set on your keystore for screen-sharing application)
-				</li>
-				<li>
-					Edit <tt>red5/conf/red5-core.xml</tt> file:<br/>
-					UNComment <tt>RTMPS</tt> section
-				</li>
-				<li>
-					Edit <tt>red5/webapps/openmeetings/public/config.xml</tt> and set<br/>
-					<br/><source><![CDATA[
-	<rtmpsslport>8443</rtmpsslport>
-	<useSSL>yes</useSSL>
-	<proxyType>best</proxyType>
-]]></source>
-				</li>
-				<li>Please NOTE <tt>rtmps</tt> port set in <tt>red5/conf/red5.properties</tt> should be in sync with the <tt>rtmpsslport</tt> set in 
-					<tt>red5/webapps/openmeetings/public/config.xml</tt>
-				</li>
-				<li>Restart red5 and try to connect - your connection should now be made via RTMPS (close port 1935 to be sure)
-				</li>   
-			</ol>
-		</section>
-		<section name="Credits">
-			<p>Credits goto: Nexus and Holger Rabbach for their help and
-				contribution and configuration documention! </p>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Using OpenMeetings with RTMPS and HTTPS</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Using OpenMeetings with RTMPS and HTTPS">
+			<p>There are 3 ways the client communicates with the server: </p>
+			<ul>
+				<li>The flash-client uses RTMP protocol to transfer Audio/Video and
+					to send and receive the user data (login et cetera) to the server
+					and back
+				</li>
+				<li>The browser uses HTTP protocol to load the SWF and to upload and
+					download the files (documents, pdfs, images) to the server and
+					back.
+				</li>
+				<li>The screensharing client uses RTMP protocol to transfer screen
+					data and remote control to the server and back
+				</li>
+			</ul>
+		</section>
+		<section name="Prerequisites">
+			<ul>
+				<li>You need OpenMeetings 1.9.x or later for this, OpenMeetings 1.8.x does not have those options.</li>
+				<li>Install OpenMeetings according to the install instructions and check that it runs without problems</li>
+				<li>Rename the existing keystore file <tt>red5/conf/keystore.jmx</tt> to <tt>red5/conf/keystore.bak</tt></li>
+				<li>Rename the existing truststore file <tt>red5/conf/truststore.jmx</tt> to <tt>red5/conf/truststore.bak</tt></li>
+			</ul>
+		</section>
+		<section name="Create Keystore from the scratch (*)">
+			<ol>
+				<li>
+					Create a new keystore and key, use the same password for both:<br/>
+					<br/><source><![CDATA[
+keytool -keysize 2048 -genkey -alias red5 -keyalg RSA -keystore red5/conf/keystore
+Enter keystore password:
+Re-enter new password:
+What is your first and last name?
+[Unknown]:  <your hostname, e.g demo.openmeetings.de>
+What is the name of your organizational unit?
+[Unknown]:  Dev
+What is the name of your organization?
+[Unknown]:  OpenMeetings
+What is the name of your City or Locality?
+[Unknown]:  Henderson
+What is the name of your State or Province?
+[Unknown]:  Nevada
+What is the two-letter country code for this unit?
+[Unknown]:  US
+Is CN=demo.openmeetings.de, OU=Dev, O=OpenMeetings, L=Henderson, ST=Nevada, C=US correct?
+[no]:  yes
+Enter key password for <red5>
+]]></source>
+				</li>
+				<li>Generate a CSR: <source><![CDATA[keytool -certreq -keyalg RSA -alias red5 -file red5.csr -keystore red5/conf/keystore]]></source>
+				</li>
+				<li>Submit CSR to your CA of choice and receive a signed certificate
+				</li>
+				<li>Import your chosen CA's root certificate into the keystore (may
+					need to download it from their site - make sure to get the root CA and
+					not the intermediate one): 
+					<source><![CDATA[keytool -import -alias root -keystore red5/conf/keystore -trustcacerts -file root.crt]]></source>
+					(note: you may receive a warning that the certificate already exists in the system wide keystore - import
+					anyway)
+				</li>
+				<li>Import the intermediate certificate(s) you normally receive with
+					the certificate:
+					<source><![CDATA[keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts -file intermediate.crt]]></source>
+				</li>
+				<li>Import the certificate you received:
+					<source><![CDATA[keytool -import -alias red5 -keystore red5/conf/keystore -trustcacerts -file demo.openmeetings.de.crt]]></source>
+				</li>
+				<li>Please NOTE according to this <a href="http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html">http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html</a>
+					guide you can split keystore and truststore (OPTIONAL you might just copy keystore to truststore)
+				</li>
+				<li>Create additional certificate as described above.
+					Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>. (This step is required to be able to use
+					screen-sharing web application, you can copy "main" keystore while testing)
+				</li>
+			</ol>
+		</section>
+		<section name="Create Keystore using existing key-pair (**)">
+			<p>Prerequicites:</p>
+			<ul>
+				<li>Server key: red5.key</li>
+				<li>Signed CSR: red5.crt</li>
+				<li>CA's root certificate: root.crt</li>
+				<li>** Intermediate certificate(s): intermedXX.crt</li>
+			</ul>
+			<ol>
+				<li>
+					Export existing keys into PKCS12 format:<br/>
+					<br/><source><![CDATA[
+openssl pkcs12 -export -in red5.crt -inkey red5.key -out red5.p12 -name red5 -certfile root.crt -certfile intermedXX.crt
+
+Enter Export Password: password
+Verifying - Enter Export Password: password
+]]></source>
+				</li>
+				<li>Import resulting red5.p12 into keystore: <source><![CDATA[
+keytool -importkeystore -srcstorepass password -srckeystore red5.p12 -srcstoretype PKCS12 -deststorepass password -destkeystore red5/conf/keystore -alias red5
+]]></source>
+				</li>
+				<li>Import your chosen CA's root certificate into the keystore (may
+					need to download it from their site - make sure to get the root CA and
+					not the intermediate one): 
+					<source><![CDATA[keytool -import -alias root -keystore red5/conf/keystore -trustcacerts -file root.crt]]></source>
+					(note: you may receive a warning that the certificate already exists in the system wide keystore - import
+					anyway)
+				</li>
+				<li>Import the intermediate certificate(s) you normally receive with
+					the certificate:
+					<source><![CDATA[keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts -file intermedXX.crt]]></source>
+				</li>
+				<li>Please NOTE according to this <a href="http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html">http://javarevisited.blogspot.com/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html</a>
+					guide you can split keystore and truststore (OPTIONAL you might just copy keystore to truststore)
+				</li>
+				<li>Create additional certificate as described above.
+					Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>. (This step is required to be able to use
+					screen-sharing web application, you can copy "main" keystore while testing)
+				</li>
+			</ol>
+		</section>
+		<section name="SSL for the web interface">
+			<p>Please perform following steps if you want to use SSL for the web interface.
+				This is mainly to secure the server against MITM attacks, additionally some other features
+				like file uploads also use a plain HTTP connection if this is not
+				done. The following instructions assume that you have already set up
+				RTMPS successfully. </p>
+			<ol>
+				<li>
+					Edit <tt>red5/conf/jee-container.xml</tt> file:<br/>
+					Comment <tt>Tomcat without SSL enabled</tt> section<br/>
+					UNComment <tt>Tomcat with SSL enabled</tt> section
+				</li>
+				<li>
+					Edit <tt>red5/webapps/openmeetings/public/config.xml</tt> and set
+					<br/><source><![CDATA[
+	<protocol>https</protocol>
+	<red5httpport>5443</red5httpport>
+]]></source>
+				</li>
+				<li>
+					Restart red5 and try to connect to
+					<u>https://your.server:5443</u> - you should be redirected to the OpenMeetings
+					app and all access should be via HTTPS and/or RTMPS (close port 5080 to be sure).
+				</li>
+			</ol>
+		</section>
+		<section name="Set up RTMPS">
+			<h3>Tunneling RTMPS</h3>
+			<ol>
+				<li>HTTPS need to be enabled otherwise tunneling will not work (it can be set up using frontend nginx/apache as well)</li>
+				<li>
+					Edit <tt>red5/webapps/openmeetings/public/config.xml</tt> and set<br/>
+					<br/><source><![CDATA[
+	<rtmpsslport>5443</rtmpsslport>
+	<useSSL>yes</useSSL>
+	<proxyType>none</proxyType>
+]]></source>
+				</li>
+				<li>Please NOTE <tt>rtmpsslport</tt> port set in <tt>red5/webapps/openmeetings/public/config.xml</tt> should match 
+					<tt>https</tt> port set in <tt>red5/conf/red5.properties</tt>
+				</li>
+				<li>Restart red5 and try to connect - your connection should now be made via RTMPS (close port 1935 to be sure)
+				</li>   
+			</ol>
+			<h3>Native RTMPS</h3>
+			<ol>
+				<li> Default RTMPS port is 8443, you can change it by editing <tt>red5/conf/red5.properties</tt> and change the port here: <tt>rtmps.port=8443</tt><br/>
+					Please set <tt>rtmps.keystorepass=password</tt> and <tt>rtmps.truststorepass=password</tt>
+					(password = password you set on your new keystore(s))<br/>
+					Additionally you need to set <tt>rtmps.screen.keystorepass=screenpassword</tt> (screenpassword = password you set on your keystore for screen-sharing application)
+				</li>
+				<li>
+					Edit <tt>red5/conf/red5-core.xml</tt> file:<br/>
+					UNComment <tt>RTMPS</tt> section
+				</li>
+				<li>
+					Edit <tt>red5/webapps/openmeetings/public/config.xml</tt> and set<br/>
+					<br/><source><![CDATA[
+	<rtmpsslport>8443</rtmpsslport>
+	<useSSL>yes</useSSL>
+	<proxyType>best</proxyType>
+]]></source>
+				</li>
+				<li>Please NOTE <tt>rtmps</tt> port set in <tt>red5/conf/red5.properties</tt> should be in sync with the <tt>rtmpsslport</tt> set in 
+					<tt>red5/webapps/openmeetings/public/config.xml</tt>
+				</li>
+				<li>Restart red5 and try to connect - your connection should now be made via RTMPS (close port 1935 to be sure)
+				</li>   
+			</ol>
+		</section>
+		<section name="Credits">
+			<p>Credits goto: Nexus and Holger Rabbach for their help and
+				contribution and configuration documention! </p>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/RecommendedHardwareList.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/RecommendedHardwareList.xml b/openmeetings-server/src/site/xdoc/RecommendedHardwareList.xml
index 7e66cc5..daddf3b 100644
--- a/openmeetings-server/src/site/xdoc/RecommendedHardwareList.xml
+++ b/openmeetings-server/src/site/xdoc/RecommendedHardwareList.xml
@@ -1,59 +1,59 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Hardware</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Cameras">
-			We recommend the following cameras:
-			<ul>
-				<li>Logitech QuickCam Sphere AF</li>
-				<li>Logitech QuickCam E3500</li>
-				<li>Samsung Pleomax PWC-7100</li>
-				<li>Genius Look320S</li>
-				<li>Integrated Lenovo 3000 n100</li>
-				<li>Skypemate WC-103M</li>
-			</ul>
-		</section>
-		<section name="Headsets">
-			The recommended headset model (i.e. headphones with microphone) is:
-			<ul>
-				<li>Logitech Clear Chat Style</li>
-			</ul>
-			Also the following headsets showed good results:
-			<ul>
-				<li>ClearChat PC Wireless (helps to suppress echo)</li>
-				<li>Logitech USB Desktop Microphone - Mikrophon (good sound, but bad echo cancellation)</li>
-			</ul>
-			<b>Note for Mac OS X users:</b> The build-in microphone normally has quite good quality and echo cancellation, so Mac OS X users often do not even require a headset.
-		</section>
-		<section name="Speakerphones">
-			When several people participate from the same location, we recommend using the following speakerphone models:
-			<ul>
-				<li>Phoenix Audio Quattro2 USB Speakerphone MT301 (a single microphone + speakers can be used even with 20-30 people sitting in a room)</li>
-				<li>Phoenix DUET Executive</li>
-				<li>Jabra SPEAK410</li>
-				<li>Plantronics MCD 100M</li>
-				<li>Integrated Lenovo 3000 n100</li>
-				<li>Konftel 300</li>
-			</ul>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Hardware</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Cameras">
+			We recommend the following cameras:
+			<ul>
+				<li>Logitech QuickCam Sphere AF</li>
+				<li>Logitech QuickCam E3500</li>
+				<li>Samsung Pleomax PWC-7100</li>
+				<li>Genius Look320S</li>
+				<li>Integrated Lenovo 3000 n100</li>
+				<li>Skypemate WC-103M</li>
+			</ul>
+		</section>
+		<section name="Headsets">
+			The recommended headset model (i.e. headphones with microphone) is:
+			<ul>
+				<li>Logitech Clear Chat Style</li>
+			</ul>
+			Also the following headsets showed good results:
+			<ul>
+				<li>ClearChat PC Wireless (helps to suppress echo)</li>
+				<li>Logitech USB Desktop Microphone - Mikrophon (good sound, but bad echo cancellation)</li>
+			</ul>
+			<b>Note for Mac OS X users:</b> The build-in microphone normally has quite good quality and echo cancellation, so Mac OS X users often do not even require a headset.
+		</section>
+		<section name="Speakerphones">
+			When several people participate from the same location, we recommend using the following speakerphone models:
+			<ul>
+				<li>Phoenix Audio Quattro2 USB Speakerphone MT301 (a single microphone + speakers can be used even with 20-30 people sitting in a room)</li>
+				<li>Phoenix DUET Executive</li>
+				<li>Jabra SPEAK410</li>
+				<li>Plantronics MCD 100M</li>
+				<li>Integrated Lenovo 3000 n100</li>
+				<li>Konftel 300</li>
+			</ul>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/RedminePlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/RedminePlugin.xml b/openmeetings-server/src/site/xdoc/RedminePlugin.xml
index 9c6aed2..c302720 100644
--- a/openmeetings-server/src/site/xdoc/RedminePlugin.xml
+++ b/openmeetings-server/src/site/xdoc/RedminePlugin.xml
@@ -1,34 +1,34 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Redmine Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="OpenMeetings Plugin for Redmine">
-			<p>
-				Current Development Snapshots for testing can be created from the sources:
-				<a href="https://github.com/openmeetings/openmeetings-redmine-plugin">here</a>.<br/>
-				The page at redmine site is <a href="http://www.redmine.org/plugins/redmine-openmeetings">here</a>
-			</p>			
-		</section>
-		<section name="Features">
-			<p>TBD</p>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Redmine Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="OpenMeetings Plugin for Redmine">
+			<p>
+				Current Development Snapshots for testing can be created from the sources:
+				<a href="https://github.com/openmeetings/openmeetings-redmine-plugin">here</a>.<br/>
+				The page at redmine site is <a href="http://www.redmine.org/plugins/redmine-openmeetings">here</a>
+			</p>			
+		</section>
+		<section name="Features">
+			<p>TBD</p>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/ReleaseGuide.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/ReleaseGuide.xml b/openmeetings-server/src/site/xdoc/ReleaseGuide.xml
index 8271385..db7ab1b 100644
--- a/openmeetings-server/src/site/xdoc/ReleaseGuide.xml
+++ b/openmeetings-server/src/site/xdoc/ReleaseGuide.xml
@@ -1,314 +1,314 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Release Guide</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="How to Build a Release of OpenMeetings">
-			<subsection name="Required tools">
-				<div>
-					<p>To build a binary release of OpenMeetings you need: </p>
-					<ul>
-						<li>Sun JDK8</li>
-						<li>Apache Maven 3.3.9</li>
-						<li>
-							SVN Command line client (Subversion 1.7 required!)
-							<a href="http://subversion.apache.org/packages.html" target="_blank" rel="nofollow">http://subversion.apache.org/packages.html</a>
-						</li>
-						<li>A text editor</li>
-						<li>You need to be online! The build process actively downloads needed libraries and dependencies.</li>
-						<li>Valid certficate to be able to enter <a href="https://securesigning.websecurity.symantec.com/csportal/">https://securesigning.websecurity.symantec.com/csportal/</a>
-							Please ask INFRA in case you need one.
-						</li>
-					</ul>
-				</div>
-			</subsection>
-			<subsection name="Prepare your Apache ID">
-				<div>
-					<ul>
-						<li><b>Every release package must be signed with a PGP/GPG key.</b><br />
-							So if you want to release a package your Apache Id must be
-							connected with a PGP key!
-							<br />
-							<br />
-							You might follow:
-							<br />
-							<a
-								href="http://www.apache.org/dev/new-committers-guide.html#security-and-pgp"
-								target="_blank">http://www.apache.org/dev/new-committers-guide.html#security-and-pgp
-							</a>
-							<br />
-							<br />
-							In short:
-							<ul>
-								<li>Create PGP key pairs (private + public) (and I recommend creating a Revoke Cert)</li>
-								<li>Upload the public key (either bei using the PGP Tool that you use
-									to create the key) or by using the web form to:
-									<a href="http://pgp.mit.edu/" target="_blank" rel="nofollow">http://pgp.mit.edu/</a>
-								</li>
-								<li>Add the fingerprint string (something like "BF13 CF11 F9C9 0CBE
-									4413 09AB 0055 16BF 93A3 0395") to your profile at
-									<a href="https://id.apache.org/" target="_blank" rel="nofollow">https://id.apache.org/</a>
-								</li>
-								<li>
-									Wait for 6-8 hours, the server will search for a public key based
-									on your fingerprint, if success it will create a file with your
-									name at:
-									<br />
-									<a href="https://people.apache.org/keys/committer/">https://people.apache.org/keys/committer/</a>
-								</li>
-								<li>
-									If that is "success" then add your key to:
-									<br />
-									<a href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD">https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD</a>
-									<br />
-									<br />
-									and follow the instructions in the file.
-								</li>
-							</ul>
-						</li>
-						<li><b>Maven</b><br/>
-							<ul>
-								<li>Ensure you able to login to <a href="https://repository.apache.org/">https://repository.apache.org</a></li>
-								<li>
-									Set up development environment as described here: <a href="http://www.apache.org/dev/publishing-maven-artifacts.html#dev-env">Setup development environment</a><br/>
-									Don't forget to secure passwords as described here: <a href="http://maven.apache.org/guides/mini/guide-encryption.html#How_to_create_a_master_password">Password Encryption</a>
-								</li>
-								
-							</ul>
-						</li>
-					</ul>
-				</div>
-			</subsection>
-			<subsection name="Step1 - Prepare files">
-				<ul>
-					<li>Switch to the necessary branch:
-						<source>
-git checkout BRANCH
-						</source>
-					</li>
-					<li>
-						Check that all files:<br />
-						LICENSE, NOTICE, DISCLAIMER, CHANGELOG, README<br />
-						are up to date and refer to the right version.
-					</li>
-					<li>
-						Update following files in OM documentation:<br/>
-						<tt>openmeetings-server/src/site/xdoc/index.xml</tt><br/>
-						<tt>openmeetings-server/src/site/xdoc/NewsArchive.xml</tt><br/>
-						<tt>openmeetings-server/src/site/xdoc/downloads.xml</tt><br/>
-					</li>
-					<li>
-						Create a TAG of the Git tree that you would like to release<br/>
-						Example:
-
-						<source>
-git tag 4.0.0RC1
-git push origin 4.0.0RC1
-						</source>
-					</li>
-					<li>
-						<p>Get the source from your TAG: </p>
-						<source>git checkout $BRANCHORTAG</source>
-						<p>$BRANCHORTAG should be replaced with your new TAG</p>
-					</li>
-					<li>
-						<p>Update versions of all modules</p>
-						<source>mvn versions:set -DgenerateBackupPoms=false -DnewVersion=3.1.0</source>
-					</li>
-					<li>Deploy release artifacts to Maven
-						<ul>
-							<li>
-							<source>
-mvn clean
-mvn deploy -Pdeploy,rc
-							</source>
-							</li>
-						</ul>
-					</li>
-					<li>
-						<p>Run the command: </p>
-						<source>mvn clean install -P allModules,rc</source>
-					</li>
-					<li>
-						<p>Test building the source on windows and OSx or Linux</p>
-						<p>Test running the binary's</p>
-					</li>
-					<li>
-						<p>
-							Commit artifacts you have created with KEYS file to the
-							<tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt>
-							Proposed file structure for "Release Candidate 1" of 3.1.0 will be:
-						</p>
-						<source>
-3.1.0
-3.1.0/rc1
-3.1.0/rc1/src
-3.1.0/rc1/src/apache-openmeetings-3.1.0-src.zip
-3.1.0/rc1/src/apache-openmeetings-3.1.0-src.tar.gz
-3.1.0/rc1/src/apache-openmeetings-3.1.0-src.zip.sha
-3.1.0/rc1/src/apache-openmeetings-3.1.0-src.zip.asc
-3.1.0/rc1/src/apache-openmeetings-3.1.0-src.tar.gz.sha
-3.1.0/rc1/src/apache-openmeetings-3.1.0-src.tar.gz.asc
-3.1.0/rc1/bin
-3.1.0/rc1/bin/apache-openmeetings-3.1.0.zip
-3.1.0/rc1/bin/apache-openmeetings-3.1.0.tar.gz
-3.1.0/rc1/bin/apache-openmeetings-3.1.0.zip.sha
-3.1.0/rc1/bin/apache-openmeetings-3.1.0.zip.asc
-3.1.0/rc1/bin/apache-openmeetings-3.1.0.tar.gz.sha
-3.1.0/rc1/bin/apache-openmeetings-3.1.0.tar.gz.asc
-3.1.0/rc1/CHANGELOG
-3.1.0/rc1/KEYS
-						</source>
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="Step2 - VOTE and RESULT emails">
-				<p>
-					Send a "VOTE" to the developer mailing list including links to release artifacts.<br />
-					A VOTE always contains two parts:<br />
-					Send an email to the developer mailing list with the subject line:<br />
-					[VOTE] Apache OpenMeetings x.xx release<br />
-					An example for such an email:
-					<a href="http://mail-archives.apache.org/mod_mbox/openmeetings-dev/201701.mbox/%3CCAJmbs8jZ7EiXoeBbG4ynvg30FPx2nAOJMypE2Qp-v-c63ayO9A%40mail.gmail.com%3E">example Vote email</a>
-					<a href="http://s.apache.org/vote-2.0.0RC4">example Vote email (Incubator)</a>
-					<br />
-					After the vote is over, send a "RESULT" email to the list with the subject line:<br />
-					[RESULT][VOTE] Apache OpenMeetings x.xx release<br />
-					An example for such an email:
-					<a
-						href="http://mail-archives.apache.org/mod_mbox/openmeetings-dev/201701.mbox/%3CCAJmbs8gyvHuarzdVma%2BF6ap7RHBhhVciZp5Oi5JogQdLR6o0NA%40mail.gmail.com%3E">example Result email</a>
-					<br />
-					Votes on whether a package is ready to be released use majority approval -- i.e., at 
-					least three PMC members must vote affirmatively for release, and there must be more 
-					positive than negative votes. Releases may not be vetoed. Before voting +1 PMC members
-					are required to download the signed source code package, compile it as provided, and 
-					test the resulting executable on their own platform, along with also verifying that 
-					the package meets the requirements of the ASF policy on releases.
-				</p>
-			</subsection>
-
-			<subsection name="Step3 - Sign web start application">
-				<p>If VOTEs positive: Sign screen sharing web application and re-pack the release</p>
-				<ul>
-					<li>Go to the folder you check out your $BRANCHORTAG</li>
-					<li>
-						<p>Run the command: </p>
-						<source>
-cd openmeetings-screenshare
-mvn clean install -Prc,release
-						</source>
-					</li>
-					<li>Go to <a href="https://securesigning.websecurity.symantec.com/csportal/">https://securesigning.websecurity.symantec.com/csportal/</a></li>
-					<li>Select "Signing Sets"</li>
-					<li>Select "Add signing set"</li>
-					<li>Enter "Signing set name" (must include "Apache OpenMeetings" and version) for ex. "Apache OpenMeetings 3.1.0-RELEASE"</li>
-					<li>Enter "Version" for ex. "3.1.0-RELEASE"</li>
-					<li>Select "Java Signing Sha256" as "Signing service"</li>
-					<li>Select "Upload files" and add all <b>jar</b> files from <tt>target/jnlp</tt></li>
-					<li>Select "Sign now"</li>
-					<li>Select "Type of signing" -> "Production"</li>
-					<li>Select "Sign"</li>
-					<li>Select "Download set"</li>
-					<li>Open binary artifacts of OM created on previous step (both <b>tar.gz</b> and <b>zip</b>)</li>
-					<li>Replace jar files inside artifacts <tt>webapps/openmeetings/screenshare</tt> with the signed ones</li>
-					<li>
-						Re-create artifact signatures
-						<p>Create sha256sum checksums</p>
-						<source>
-#On OSX you might use this command to make a SHA checksum and store it to a file
-shasum -a 256 -r apache-openmeetings-XXX-src.zip >apache-openmeetings-XXX-src.zip.sha256
-						</source>
-						<source>
-<![CDATA[
-#To create SHA hashes On Ubuntu:
-for f in `ls -1 *.tar.gz *.zip`; do sha256sum $f > $f.sha256; done
-
-#To check SHA hashes On Ubuntu:
-for f in `ls -1 *.tar.gz *.zip`; do sha256sum -c $f.sha256; done
-]]>
-						</source>
-						<p>
-							Create signatures with the your KEY for every file, the KEY must be available at:<br />
-							<a href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD">
-								https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD
-							</a>
-						</p>
-						<source>
-<![CDATA[
-#To create signatures On Ubuntu:
-for f in `ls -1 *.tar.gz *.zip`; do gpg --armor --output $f.asc --detach-sig $f; done
-
-#To check signatures On Ubuntu:
-for f in `ls -1 *.tar.gz *.zip`; do gpg --verify $f.asc; done
-]]>
-						</source>
-					</li>
-				</ul>
-				<p>NOTE: "Type of signing" can be selected as "Test" to check everything works as expected</p>
-				
-			</subsection>
-			
-			<subsection name="Step4 - Distribute and announce">
-				<p>If VOTEs positive: Upload the release </p>
-				<ul>
-					<li>Upload Artifacts with signatures created on the previous steps to 
-						https://dist.apache.org/repos/dist/release/openmeetings/CURRENT_VERSION
-					</li>
-					<li>Close staging repo:
-						<ul>
-							<li>Go to: <a href="https://repository.apache.org/#stagingRepositories">Staging Repositories</a></li>
-							<li>Select openmeetings staging repo and Close it with valid message:<br/>
-								for ex. "The VOTE about 3.1.2 release was successful"
-							</li>
-							<li>Select openmeetings staging repo and Release it with valid message:<br/>
-								for ex. "The VOTE about 3.1.2 release was successful"
-							</li>
-						</ul>
-					</li>
-					<li>
-						Wait 24 hours (until all Apache mirrors have synced the packages)
-						and send an announcement to the mailing list + blog and any other
-						channel.
-					</li>
-					<li>
-						Email announcements should have the subject line:<br />
-						[ANNOUNCE] Apache OpenMeetings x.xx released
-					</li>
-					<li>
-						Update release section of DOAP file <tt>openmeetings-site/doap.rdf (https://git-wip-us.apache.org/repos/asf?p=openmeetings-site.git;a=blob;f=doap.rdf;hb=HEAD)</tt>
-					</li>
-					<li>
-						Add a section to <a href="downloads.html">downloads</a> website.<br />
-						Make sure that the binary packages are linked using the mirror URL as base path (
-						<b>not</b> http://www.apache.org/dist):<br />
-						Mirror URL: 
-						<a href="http://www.apache.org/dyn/closer.lua/openmeetings/">http://www.apache.org/dyn/closer.lua/openmeetings/</a>
-					</li>
-					<li>
-						Release candidates should be deleted from <tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt><br/>
-						Old releases should be deleted from <tt>https://dist.apache.org/repos/dist/release/openmeetings/</tt>
-					</li>
-				</ul>
-			</subsection>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Release Guide</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="How to Build a Release of OpenMeetings">
+			<subsection name="Required tools">
+				<div>
+					<p>To build a binary release of OpenMeetings you need: </p>
+					<ul>
+						<li>Sun JDK8</li>
+						<li>Apache Maven 3.3.9</li>
+						<li>
+							SVN Command line client (Subversion 1.7 required!)
+							<a href="http://subversion.apache.org/packages.html" target="_blank" rel="nofollow">http://subversion.apache.org/packages.html</a>
+						</li>
+						<li>A text editor</li>
+						<li>You need to be online! The build process actively downloads needed libraries and dependencies.</li>
+						<li>Valid certficate to be able to enter <a href="https://securesigning.websecurity.symantec.com/csportal/">https://securesigning.websecurity.symantec.com/csportal/</a>
+							Please ask INFRA in case you need one.
+						</li>
+					</ul>
+				</div>
+			</subsection>
+			<subsection name="Prepare your Apache ID">
+				<div>
+					<ul>
+						<li><b>Every release package must be signed with a PGP/GPG key.</b><br />
+							So if you want to release a package your Apache Id must be
+							connected with a PGP key!
+							<br />
+							<br />
+							You might follow:
+							<br />
+							<a
+								href="http://www.apache.org/dev/new-committers-guide.html#security-and-pgp"
+								target="_blank">http://www.apache.org/dev/new-committers-guide.html#security-and-pgp
+							</a>
+							<br />
+							<br />
+							In short:
+							<ul>
+								<li>Create PGP key pairs (private + public) (and I recommend creating a Revoke Cert)</li>
+								<li>Upload the public key (either bei using the PGP Tool that you use
+									to create the key) or by using the web form to:
+									<a href="http://pgp.mit.edu/" target="_blank" rel="nofollow">http://pgp.mit.edu/</a>
+								</li>
+								<li>Add the fingerprint string (something like "BF13 CF11 F9C9 0CBE
+									4413 09AB 0055 16BF 93A3 0395") to your profile at
+									<a href="https://id.apache.org/" target="_blank" rel="nofollow">https://id.apache.org/</a>
+								</li>
+								<li>
+									Wait for 6-8 hours, the server will search for a public key based
+									on your fingerprint, if success it will create a file with your
+									name at:
+									<br />
+									<a href="https://people.apache.org/keys/committer/">https://people.apache.org/keys/committer/</a>
+								</li>
+								<li>
+									If that is "success" then add your key to:
+									<br />
+									<a href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD">https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD</a>
+									<br />
+									<br />
+									and follow the instructions in the file.
+								</li>
+							</ul>
+						</li>
+						<li><b>Maven</b><br/>
+							<ul>
+								<li>Ensure you able to login to <a href="https://repository.apache.org/">https://repository.apache.org</a></li>
+								<li>
+									Set up development environment as described here: <a href="http://www.apache.org/dev/publishing-maven-artifacts.html#dev-env">Setup development environment</a><br/>
+									Don't forget to secure passwords as described here: <a href="http://maven.apache.org/guides/mini/guide-encryption.html#How_to_create_a_master_password">Password Encryption</a>
+								</li>
+								
+							</ul>
+						</li>
+					</ul>
+				</div>
+			</subsection>
+			<subsection name="Step1 - Prepare files">
+				<ul>
+					<li>Switch to the necessary branch:
+						<source>
+git checkout BRANCH
+						</source>
+					</li>
+					<li>
+						Check that all files:<br />
+						LICENSE, NOTICE, DISCLAIMER, CHANGELOG, README<br />
+						are up to date and refer to the right version.
+					</li>
+					<li>
+						Update following files in OM documentation:<br/>
+						<tt>openmeetings-server/src/site/xdoc/index.xml</tt><br/>
+						<tt>openmeetings-server/src/site/xdoc/NewsArchive.xml</tt><br/>
+						<tt>openmeetings-server/src/site/xdoc/downloads.xml</tt><br/>
+					</li>
+					<li>
+						Create a TAG of the Git tree that you would like to release<br/>
+						Example:
+
+						<source>
+git tag 4.0.0RC1
+git push origin 4.0.0RC1
+						</source>
+					</li>
+					<li>
+						<p>Get the source from your TAG: </p>
+						<source>git checkout $BRANCHORTAG</source>
+						<p>$BRANCHORTAG should be replaced with your new TAG</p>
+					</li>
+					<li>
+						<p>Update versions of all modules</p>
+						<source>mvn versions:set -DgenerateBackupPoms=false -DnewVersion=3.1.0</source>
+					</li>
+					<li>Deploy release artifacts to Maven
+						<ul>
+							<li>
+							<source>
+mvn clean
+mvn deploy -Pdeploy,rc
+							</source>
+							</li>
+						</ul>
+					</li>
+					<li>
+						<p>Run the command: </p>
+						<source>mvn clean install -P allModules,rc</source>
+					</li>
+					<li>
+						<p>Test building the source on windows and OSx or Linux</p>
+						<p>Test running the binary's</p>
+					</li>
+					<li>
+						<p>
+							Commit artifacts you have created with KEYS file to the
+							<tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt>
+							Proposed file structure for "Release Candidate 1" of 3.1.0 will be:
+						</p>
+						<source>
+3.1.0
+3.1.0/rc1
+3.1.0/rc1/src
+3.1.0/rc1/src/apache-openmeetings-3.1.0-src.zip
+3.1.0/rc1/src/apache-openmeetings-3.1.0-src.tar.gz
+3.1.0/rc1/src/apache-openmeetings-3.1.0-src.zip.sha
+3.1.0/rc1/src/apache-openmeetings-3.1.0-src.zip.asc
+3.1.0/rc1/src/apache-openmeetings-3.1.0-src.tar.gz.sha
+3.1.0/rc1/src/apache-openmeetings-3.1.0-src.tar.gz.asc
+3.1.0/rc1/bin
+3.1.0/rc1/bin/apache-openmeetings-3.1.0.zip
+3.1.0/rc1/bin/apache-openmeetings-3.1.0.tar.gz
+3.1.0/rc1/bin/apache-openmeetings-3.1.0.zip.sha
+3.1.0/rc1/bin/apache-openmeetings-3.1.0.zip.asc
+3.1.0/rc1/bin/apache-openmeetings-3.1.0.tar.gz.sha
+3.1.0/rc1/bin/apache-openmeetings-3.1.0.tar.gz.asc
+3.1.0/rc1/CHANGELOG
+3.1.0/rc1/KEYS
+						</source>
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="Step2 - VOTE and RESULT emails">
+				<p>
+					Send a "VOTE" to the developer mailing list including links to release artifacts.<br />
+					A VOTE always contains two parts:<br />
+					Send an email to the developer mailing list with the subject line:<br />
+					[VOTE] Apache OpenMeetings x.xx release<br />
+					An example for such an email:
+					<a href="http://mail-archives.apache.org/mod_mbox/openmeetings-dev/201701.mbox/%3CCAJmbs8jZ7EiXoeBbG4ynvg30FPx2nAOJMypE2Qp-v-c63ayO9A%40mail.gmail.com%3E">example Vote email</a>
+					<a href="http://s.apache.org/vote-2.0.0RC4">example Vote email (Incubator)</a>
+					<br />
+					After the vote is over, send a "RESULT" email to the list with the subject line:<br />
+					[RESULT][VOTE] Apache OpenMeetings x.xx release<br />
+					An example for such an email:
+					<a
+						href="http://mail-archives.apache.org/mod_mbox/openmeetings-dev/201701.mbox/%3CCAJmbs8gyvHuarzdVma%2BF6ap7RHBhhVciZp5Oi5JogQdLR6o0NA%40mail.gmail.com%3E">example Result email</a>
+					<br />
+					Votes on whether a package is ready to be released use majority approval -- i.e., at 
+					least three PMC members must vote affirmatively for release, and there must be more 
+					positive than negative votes. Releases may not be vetoed. Before voting +1 PMC members
+					are required to download the signed source code package, compile it as provided, and 
+					test the resulting executable on their own platform, along with also verifying that 
+					the package meets the requirements of the ASF policy on releases.
+				</p>
+			</subsection>
+
+			<subsection name="Step3 - Sign web start application">
+				<p>If VOTEs positive: Sign screen sharing web application and re-pack the release</p>
+				<ul>
+					<li>Go to the folder you check out your $BRANCHORTAG</li>
+					<li>
+						<p>Run the command: </p>
+						<source>
+cd openmeetings-screenshare
+mvn clean install -Prc,release
+						</source>
+					</li>
+					<li>Go to <a href="https://securesigning.websecurity.symantec.com/csportal/">https://securesigning.websecurity.symantec.com/csportal/</a></li>
+					<li>Select "Signing Sets"</li>
+					<li>Select "Add signing set"</li>
+					<li>Enter "Signing set name" (must include "Apache OpenMeetings" and version) for ex. "Apache OpenMeetings 3.1.0-RELEASE"</li>
+					<li>Enter "Version" for ex. "3.1.0-RELEASE"</li>
+					<li>Select "Java Signing Sha256" as "Signing service"</li>
+					<li>Select "Upload files" and add all <b>jar</b> files from <tt>target/jnlp</tt></li>
+					<li>Select "Sign now"</li>
+					<li>Select "Type of signing" -> "Production"</li>
+					<li>Select "Sign"</li>
+					<li>Select "Download set"</li>
+					<li>Open binary artifacts of OM created on previous step (both <b>tar.gz</b> and <b>zip</b>)</li>
+					<li>Replace jar files inside artifacts <tt>webapps/openmeetings/screenshare</tt> with the signed ones</li>
+					<li>
+						Re-create artifact signatures
+						<p>Create sha256sum checksums</p>
+						<source>
+#On OSX you might use this command to make a SHA checksum and store it to a file
+shasum -a 256 -r apache-openmeetings-XXX-src.zip >apache-openmeetings-XXX-src.zip.sha256
+						</source>
+						<source>
+<![CDATA[
+#To create SHA hashes On Ubuntu:
+for f in `ls -1 *.tar.gz *.zip`; do sha256sum $f > $f.sha256; done
+
+#To check SHA hashes On Ubuntu:
+for f in `ls -1 *.tar.gz *.zip`; do sha256sum -c $f.sha256; done
+]]>
+						</source>
+						<p>
+							Create signatures with the your KEY for every file, the KEY must be available at:<br />
+							<a href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD">
+								https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=blob;f=KEYS;hb=HEAD
+							</a>
+						</p>
+						<source>
+<![CDATA[
+#To create signatures On Ubuntu:
+for f in `ls -1 *.tar.gz *.zip`; do gpg --armor --output $f.asc --detach-sig $f; done
+
+#To check signatures On Ubuntu:
+for f in `ls -1 *.tar.gz *.zip`; do gpg --verify $f.asc; done
+]]>
+						</source>
+					</li>
+				</ul>
+				<p>NOTE: "Type of signing" can be selected as "Test" to check everything works as expected</p>
+				
+			</subsection>
+			
+			<subsection name="Step4 - Distribute and announce">
+				<p>If VOTEs positive: Upload the release </p>
+				<ul>
+					<li>Upload Artifacts with signatures created on the previous steps to 
+						https://dist.apache.org/repos/dist/release/openmeetings/CURRENT_VERSION
+					</li>
+					<li>Close staging repo:
+						<ul>
+							<li>Go to: <a href="https://repository.apache.org/#stagingRepositories">Staging Repositories</a></li>
+							<li>Select openmeetings staging repo and Close it with valid message:<br/>
+								for ex. "The VOTE about 3.1.2 release was successful"
+							</li>
+							<li>Select openmeetings staging repo and Release it with valid message:<br/>
+								for ex. "The VOTE about 3.1.2 release was successful"
+							</li>
+						</ul>
+					</li>
+					<li>
+						Wait 24 hours (until all Apache mirrors have synced the packages)
+						and send an announcement to the mailing list + blog and any other
+						channel.
+					</li>
+					<li>
+						Email announcements should have the subject line:<br />
+						[ANNOUNCE] Apache OpenMeetings x.xx released
+					</li>
+					<li>
+						Update release section of DOAP file <tt>openmeetings-site/doap.rdf (https://git-wip-us.apache.org/repos/asf?p=openmeetings-site.git;a=blob;f=doap.rdf;hb=HEAD)</tt>
+					</li>
+					<li>
+						Add a section to <a href="downloads.html">downloads</a> website.<br />
+						Make sure that the binary packages are linked using the mirror URL as base path (
+						<b>not</b> http://www.apache.org/dist):<br />
+						Mirror URL: 
+						<a href="http://www.apache.org/dyn/closer.lua/openmeetings/">http://www.apache.org/dyn/closer.lua/openmeetings/</a>
+					</li>
+					<li>
+						Release candidates should be deleted from <tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt><br/>
+						Old releases should be deleted from <tt>https://dist.apache.org/repos/dist/release/openmeetings/</tt>
+					</li>
+				</ul>
+			</subsection>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/RestAPISample.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/RestAPISample.xml b/openmeetings-server/src/site/xdoc/RestAPISample.xml
index 89710c8..30de9db 100644
--- a/openmeetings-server/src/site/xdoc/RestAPISample.xml
+++ b/openmeetings-server/src/site/xdoc/RestAPISample.xml
@@ -1,139 +1,139 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>REST API sample</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="Introduction">
-			<p> For a detailed instruction which services, methods and params are available see the list in the <a href="/openmeetings-webservice/apidocs/index.html" target="_blank">SOAP/REST API</a> .
-				ALL methods that are implemented for the SOAP API are also available via REST. 
-			</p>
-			<div>
-				you can query methods of each service using following suffixes
-				
-				<ul>
-					<li>SOAP: <tt>?wsdl</tt> suffix, for example <tt>http://localhost:5080/openmeetings/services/UserService?wsdl</tt></li>
-					<li>REST: as xml <tt>?_wadl</tt> for example <tt>http://localhost:5080/openmeetings/services/user?_wadl</tt></li>
-					<li>REST: as json <tt>?_wadl&amp;type=json</tt> for example <tt>http://localhost:5080/openmeetings/services/user?_wadl&amp;type=json</tt></li>
-				</ul>
-				<div class="bs-callout bs-callout-info">
-					The full list of services with All WSDLs/WADLs is available at following URL: <tt>http://localhost:5080/openmeetings/services/services</tt>
-				</div>
-			</div> 
-		</section>
-		<section name="How to get room hash via REST">
-			<ul>
-				<li>
-					First of all you need to perform login and get authorized SID to perform authorized operations
-					<table>
-						<tr>
-							<td>Request</td>
-							<td>Error response</td>
-							<td>Successful response</td>
-						</tr>
-						<tr>
-							<td>
-<source>
-$.ajax({
-  method: "GET",
-  url: "services/user/login",
-  data: {user: 'admin', pass: '12345'},
-  dataType: "json"
-});
-</source>
-							</td>
-							<td>
-<source>
-{
-  "serviceResult": {
-    "code": -11,
-    "type": "ERROR"
-  }
-}
-</source>
-							</td>
-							<td>
-<source>
-{
-  "serviceResult": {
-    "code": 1,
-    "message": "78189aff-d68d-458a-8840-5b18d15a50b0",
-    "type": "SUCCESS"
-  }
-}
-</source>
-							</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					In case of error you can get detailed error message in your language as result of following query 
-					<tt>http://localhost:5080/openmeetings/services/error/<b>ERROR_ID</b>/<b>LANGUAGE_ID</b></tt>
-					(for ex. http://localhost:5080/openmeetings/services/error/<b>-11</b>/<b>9</b>)
-				</li>
-				<li>If your request was successful you will get your SID as <b>message</b> (78189aff-d68d-458a-8840-5b18d15a50b0)</li>
-				<li>Then you can use SID to generate room hash
-					<table>
-						<tr>
-							<td>Request</td>
-							<td>Successful response</td>
-						</tr>
-						<tr>
-							<td>
-<source>
-$.ajax({
-  method: "POST",
-  url: "services/user/hash?sid=78189aff-d68d-458a-8840-5b18d15a50b0",
-  data: {user: JSON.stringify({
-      firstname: 'John',
-      lastname: 'Doe',
-      externalId: 'uid1',
-      externalType: 'myCMS',
-      login: 'superjohn'
-      }),
-    options: JSON.stringify({
-      roomId: 5,
-      moderator: true,
-      showAudioVideoTest: true
-      })
-    },
-  dataType: "json"
-})
-</source>
-							</td>
-							<td>
-<source>
-{
-  "serviceResult": {
-    "code": 0,
-    "message": "fa1f9381-bd03-42ae-9fd9-332b5f775a1b",
-    "type": "SUCCESS"
-  }
-}
-</source>
-							</td>
-						</tr>
-					</table>
-				</li>
-				<li>If your request was successful you will get your hash as <b>message</b> (fa1f9381-bd03-42ae-9fd9-332b5f775a1b)</li>
-				<li>Now you can use following URL to enter the room: <tt>http://localhost:5080/openmeetings/hash?secure=fa1f9381-bd03-42ae-9fd9-332b5f775a1b&amp;language=1</tt></li>
-			</ul>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>REST API sample</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="Introduction">
+			<p> For a detailed instruction which services, methods and params are available see the list in the <a href="/openmeetings-webservice/apidocs/index.html" target="_blank">SOAP/REST API</a> .
+				ALL methods that are implemented for the SOAP API are also available via REST. 
+			</p>
+			<div>
+				you can query methods of each service using following suffixes
+				
+				<ul>
+					<li>SOAP: <tt>?wsdl</tt> suffix, for example <tt>http://localhost:5080/openmeetings/services/UserService?wsdl</tt></li>
+					<li>REST: as xml <tt>?_wadl</tt> for example <tt>http://localhost:5080/openmeetings/services/user?_wadl</tt></li>
+					<li>REST: as json <tt>?_wadl&amp;type=json</tt> for example <tt>http://localhost:5080/openmeetings/services/user?_wadl&amp;type=json</tt></li>
+				</ul>
+				<div class="bs-callout bs-callout-info">
+					The full list of services with All WSDLs/WADLs is available at following URL: <tt>http://localhost:5080/openmeetings/services/services</tt>
+				</div>
+			</div> 
+		</section>
+		<section name="How to get room hash via REST">
+			<ul>
+				<li>
+					First of all you need to perform login and get authorized SID to perform authorized operations
+					<table>
+						<tr>
+							<td>Request</td>
+							<td>Error response</td>
+							<td>Successful response</td>
+						</tr>
+						<tr>
+							<td>
+<source>
+$.ajax({
+  method: "GET",
+  url: "services/user/login",
+  data: {user: 'admin', pass: '12345'},
+  dataType: "json"
+});
+</source>
+							</td>
+							<td>
+<source>
+{
+  "serviceResult": {
+    "code": -11,
+    "type": "ERROR"
+  }
+}
+</source>
+							</td>
+							<td>
+<source>
+{
+  "serviceResult": {
+    "code": 1,
+    "message": "78189aff-d68d-458a-8840-5b18d15a50b0",
+    "type": "SUCCESS"
+  }
+}
+</source>
+							</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					In case of error you can get detailed error message in your language as result of following query 
+					<tt>http://localhost:5080/openmeetings/services/error/<b>ERROR_ID</b>/<b>LANGUAGE_ID</b></tt>
+					(for ex. http://localhost:5080/openmeetings/services/error/<b>-11</b>/<b>9</b>)
+				</li>
+				<li>If your request was successful you will get your SID as <b>message</b> (78189aff-d68d-458a-8840-5b18d15a50b0)</li>
+				<li>Then you can use SID to generate room hash
+					<table>
+						<tr>
+							<td>Request</td>
+							<td>Successful response</td>
+						</tr>
+						<tr>
+							<td>
+<source>
+$.ajax({
+  method: "POST",
+  url: "services/user/hash?sid=78189aff-d68d-458a-8840-5b18d15a50b0",
+  data: {user: JSON.stringify({
+      firstname: 'John',
+      lastname: 'Doe',
+      externalId: 'uid1',
+      externalType: 'myCMS',
+      login: 'superjohn'
+      }),
+    options: JSON.stringify({
+      roomId: 5,
+      moderator: true,
+      showAudioVideoTest: true
+      })
+    },
+  dataType: "json"
+})
+</source>
+							</td>
+							<td>
+<source>
+{
+  "serviceResult": {
+    "code": 0,
+    "message": "fa1f9381-bd03-42ae-9fd9-332b5f775a1b",
+    "type": "SUCCESS"
+  }
+}
+</source>
+							</td>
+						</tr>
+					</table>
+				</li>
+				<li>If your request was successful you will get your hash as <b>message</b> (fa1f9381-bd03-42ae-9fd9-332b5f775a1b)</li>
+				<li>Now you can use following URL to enter the room: <tt>http://localhost:5080/openmeetings/hash?secure=fa1f9381-bd03-42ae-9fd9-332b5f775a1b&amp;language=1</tt></li>
+			</ul>
+		</section>
+	</body>
+</document>


[18/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
index 0f2edba..696bd8c 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java
@@ -1,55 +1,55 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.backup;
-
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.simpleframework.xml.stream.InputNode;
-import org.simpleframework.xml.stream.OutputNode;
-
-public class UserConverter extends OmConverter<User> {
-	private UserDao userDao;
-	private Map<Long, Long> idMap;
-	
-	public UserConverter() {
-		//default constructor is for export
-	}
-	
-	public UserConverter(UserDao userDao, Map<Long, Long> idMap) {
-		this.userDao = userDao;
-		this.idMap = idMap;
-	}
-	
-	@Override
-	public User read(InputNode node) throws Exception {
-		long oldId = getLong(node);
-		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
-		
-		User u = userDao.get(newId);
-		return u == null ? new User() : u;
-	}
-
-	@Override
-	public void write(OutputNode node, User value) throws Exception {
-		node.setData(true);
-		node.setValue(value == null ? "0" : "" + value.getId());
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.OutputNode;
+
+public class UserConverter extends OmConverter<User> {
+	private UserDao userDao;
+	private Map<Long, Long> idMap;
+	
+	public UserConverter() {
+		//default constructor is for export
+	}
+	
+	public UserConverter(UserDao userDao, Map<Long, Long> idMap) {
+		this.userDao = userDao;
+		this.idMap = idMap;
+	}
+	
+	@Override
+	public User read(InputNode node) throws Exception {
+		long oldId = getLong(node);
+		Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;
+		
+		User u = userDao.get(newId);
+		return u == null ? new User() : u;
+	}
+
+	@Override
+	public void write(OutputNode node, User value) throws Exception {
+		node.setData(true);
+		node.setValue(value == null ? "0" : "" + value.getId());
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
index d91011b..a5b562c 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
@@ -1,189 +1,189 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.cli;
-
-import java.io.File;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathFactory;
-
-import org.apache.commons.lang3.StringEscapeUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.openmeetings.util.ConnectionProperties.DbType;
-import org.apache.openmeetings.util.ConnectionProperties;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-public abstract class ConnectionPropertiesPatcher {
-	protected static final String URL_PREFIX = "Url";
-	protected static final String DRIVER_PREFIX = "DriverClassName";
-	protected static final String USER_PREFIX = "Username";
-	protected static final String PASS_PREFIX = "Password";
-	protected ConnectionProperties props;
-	
-	public static ConnectionPropertiesPatcher getPatcher(ConnectionProperties props) {
-		ConnectionPropertiesPatcher patcher = null;
-		switch (props.getDbType()) {
-			case db2:
-				patcher = new Db2Patcher();
-				break;
-			case mssql:
-				patcher = new MssqlPatcher();
-				break;
-			case mysql:
-				patcher = new MysqlPatcher();
-				break;
-			case oracle:
-				patcher = new OraclePatcher();
-				break;
-			case postgresql:
-				patcher = new PostgresPatcher();
-				break;
-			case derby:
-			default:
-				patcher = new DerbyPatcher();
-				break;
-		}
-		patcher.props = props;
-		return patcher;
-	}
-	
-	public static ConnectionProperties getConnectionProperties(File conf) throws Exception {
-		ConnectionProperties props = new ConnectionProperties();
-		Document doc = getDocument(conf);
-		Attr attr = getConnectionProperties(doc);
-		String[] tokens = attr.getValue().split(",");
-		loadProperties(tokens, props);
-		
-		return props;
-	}
-	
-	private static Document getDocument(File xml) throws Exception {
-		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
-		//dbFactory.setNamespaceAware(true);
-		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
-		return dBuilder.parse(xml);
-	}
-	
-	private static Attr getConnectionProperties(Document doc) throws Exception {
-		XPath xPath = XPathFactory.newInstance().newXPath();
-		XPathExpression expr = xPath.compile("/persistence/persistence-unit/properties/property[@name='openjpa.ConnectionProperties']");
-
-		Element element = (Element)expr.evaluate(doc, XPathConstants.NODE);
-		return element.getAttributeNode("value");
-	}
-	
-	public static void patch(ConnectionProperties props) throws Exception {
-		ConnectionPropertiesPatcher patcher = getPatcher(props);
-		Document doc = getDocument(OmFileHelper.getPersistence(props.getDbType()));
-		Attr attr = getConnectionProperties(doc);
-		String[] tokens = attr.getValue().split(",");
-		patcher.patchAttribute(tokens);
-		attr.setValue(StringUtils.join(tokens, ","));
-		
-		TransformerFactory transformerFactory = TransformerFactory.newInstance();
-		Transformer transformer = transformerFactory.newTransformer();
-		DOMSource source = new DOMSource(doc);
-		transformer.transform(source, new StreamResult(OmFileHelper.getPersistence().getCanonicalPath())); //this constructor is used to avoid transforming path to URI
-	}
-	
-	public static ConnectionProperties patch(String dbType, String host, String port, String db, String user, String pass) throws Exception {
-		ConnectionProperties props = getConnectionProperties(OmFileHelper.getPersistence(dbType));
-		props.setLogin(user);
-		props.setPassword(pass);
-		ConnectionPropertiesPatcher patcher = getPatcher(props);
-		props.setURL(patcher.getUrl(props.getURL(), host, port, db));
-		patch(props);
-		return props;
-	}
-	
-	public static void updateUrl(ConnectionProperties props, String host, String port, String db) {
-		ConnectionPropertiesPatcher patcher = getPatcher(props);
-		props.setURL(patcher.getUrl(props.getURL(), host, port, db));
-	}
-	
-	protected void patchAttribute(String[] tokens) {
-		for (int i = 0; i < tokens.length; ++i) {
-			patchProp(tokens, i, USER_PREFIX, props.getLogin());
-			patchProp(tokens, i, PASS_PREFIX, props.getPassword() == null ? "" : props.getPassword());
-			patchProp(tokens, i, URL_PREFIX, props.getURL());
-		}
-	}
-
-	protected static void patchProp(String[] tokens, int idx, String name, String value) {
-		String prop = tokens[idx].trim();
-		if (prop.startsWith(name)) {
-			prop = name + "=" + StringEscapeUtils.escapeXml10(value);
-			tokens[idx] = prop;
-		}
-	}
-	
-	private static void loadProperties(String[] tokens, ConnectionProperties connectionProperties) {
-		String prop;
-		for (int i = 0; i < tokens.length; ++i) {
-			prop = getPropFromPersistence(tokens, i, DRIVER_PREFIX);
-			if (prop != null) {
-				connectionProperties.setDriver(prop);
-			}
-			
-			prop = getPropFromPersistence(tokens, i, USER_PREFIX);
-			if (prop != null) {
-				connectionProperties.setLogin(prop);
-			}
-			
-			prop = getPropFromPersistence(tokens, i, PASS_PREFIX);
-			if (prop != null) {
-				connectionProperties.setPassword(prop);
-			}
-
-			prop = getPropFromPersistence(tokens, i, URL_PREFIX);
-			if (prop != null) {
-				try {
-					//will try to "guess" dbType
-					String[] parts = prop.split(":");
-					connectionProperties.setDbType("sqlserver".equals(parts[1]) ? DbType.mssql : DbType.valueOf(parts[1]));
-				} catch (Exception e) {
-					//ignore
-				}
-				connectionProperties.setURL(prop);
-			}
-		}
-	}
-	
-	protected static String getPropFromPersistence(String[] tokens, int idx, String name){
-		String prop = tokens[idx].trim();
-		if (prop.startsWith(name)) {
-			//From "Username=root" getting only "root"
-			return prop.substring(prop.indexOf("=") + 1);
-		}
-		return null;
-	}
-	
-	protected abstract String getUrl(String url, String host, String port, String db);
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.io.File;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.util.ConnectionProperties.DbType;
+import org.apache.openmeetings.util.ConnectionProperties;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public abstract class ConnectionPropertiesPatcher {
+	protected static final String URL_PREFIX = "Url";
+	protected static final String DRIVER_PREFIX = "DriverClassName";
+	protected static final String USER_PREFIX = "Username";
+	protected static final String PASS_PREFIX = "Password";
+	protected ConnectionProperties props;
+	
+	public static ConnectionPropertiesPatcher getPatcher(ConnectionProperties props) {
+		ConnectionPropertiesPatcher patcher = null;
+		switch (props.getDbType()) {
+			case db2:
+				patcher = new Db2Patcher();
+				break;
+			case mssql:
+				patcher = new MssqlPatcher();
+				break;
+			case mysql:
+				patcher = new MysqlPatcher();
+				break;
+			case oracle:
+				patcher = new OraclePatcher();
+				break;
+			case postgresql:
+				patcher = new PostgresPatcher();
+				break;
+			case derby:
+			default:
+				patcher = new DerbyPatcher();
+				break;
+		}
+		patcher.props = props;
+		return patcher;
+	}
+	
+	public static ConnectionProperties getConnectionProperties(File conf) throws Exception {
+		ConnectionProperties props = new ConnectionProperties();
+		Document doc = getDocument(conf);
+		Attr attr = getConnectionProperties(doc);
+		String[] tokens = attr.getValue().split(",");
+		loadProperties(tokens, props);
+		
+		return props;
+	}
+	
+	private static Document getDocument(File xml) throws Exception {
+		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+		//dbFactory.setNamespaceAware(true);
+		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+		return dBuilder.parse(xml);
+	}
+	
+	private static Attr getConnectionProperties(Document doc) throws Exception {
+		XPath xPath = XPathFactory.newInstance().newXPath();
+		XPathExpression expr = xPath.compile("/persistence/persistence-unit/properties/property[@name='openjpa.ConnectionProperties']");
+
+		Element element = (Element)expr.evaluate(doc, XPathConstants.NODE);
+		return element.getAttributeNode("value");
+	}
+	
+	public static void patch(ConnectionProperties props) throws Exception {
+		ConnectionPropertiesPatcher patcher = getPatcher(props);
+		Document doc = getDocument(OmFileHelper.getPersistence(props.getDbType()));
+		Attr attr = getConnectionProperties(doc);
+		String[] tokens = attr.getValue().split(",");
+		patcher.patchAttribute(tokens);
+		attr.setValue(StringUtils.join(tokens, ","));
+		
+		TransformerFactory transformerFactory = TransformerFactory.newInstance();
+		Transformer transformer = transformerFactory.newTransformer();
+		DOMSource source = new DOMSource(doc);
+		transformer.transform(source, new StreamResult(OmFileHelper.getPersistence().getCanonicalPath())); //this constructor is used to avoid transforming path to URI
+	}
+	
+	public static ConnectionProperties patch(String dbType, String host, String port, String db, String user, String pass) throws Exception {
+		ConnectionProperties props = getConnectionProperties(OmFileHelper.getPersistence(dbType));
+		props.setLogin(user);
+		props.setPassword(pass);
+		ConnectionPropertiesPatcher patcher = getPatcher(props);
+		props.setURL(patcher.getUrl(props.getURL(), host, port, db));
+		patch(props);
+		return props;
+	}
+	
+	public static void updateUrl(ConnectionProperties props, String host, String port, String db) {
+		ConnectionPropertiesPatcher patcher = getPatcher(props);
+		props.setURL(patcher.getUrl(props.getURL(), host, port, db));
+	}
+	
+	protected void patchAttribute(String[] tokens) {
+		for (int i = 0; i < tokens.length; ++i) {
+			patchProp(tokens, i, USER_PREFIX, props.getLogin());
+			patchProp(tokens, i, PASS_PREFIX, props.getPassword() == null ? "" : props.getPassword());
+			patchProp(tokens, i, URL_PREFIX, props.getURL());
+		}
+	}
+
+	protected static void patchProp(String[] tokens, int idx, String name, String value) {
+		String prop = tokens[idx].trim();
+		if (prop.startsWith(name)) {
+			prop = name + "=" + StringEscapeUtils.escapeXml10(value);
+			tokens[idx] = prop;
+		}
+	}
+	
+	private static void loadProperties(String[] tokens, ConnectionProperties connectionProperties) {
+		String prop;
+		for (int i = 0; i < tokens.length; ++i) {
+			prop = getPropFromPersistence(tokens, i, DRIVER_PREFIX);
+			if (prop != null) {
+				connectionProperties.setDriver(prop);
+			}
+			
+			prop = getPropFromPersistence(tokens, i, USER_PREFIX);
+			if (prop != null) {
+				connectionProperties.setLogin(prop);
+			}
+			
+			prop = getPropFromPersistence(tokens, i, PASS_PREFIX);
+			if (prop != null) {
+				connectionProperties.setPassword(prop);
+			}
+
+			prop = getPropFromPersistence(tokens, i, URL_PREFIX);
+			if (prop != null) {
+				try {
+					//will try to "guess" dbType
+					String[] parts = prop.split(":");
+					connectionProperties.setDbType("sqlserver".equals(parts[1]) ? DbType.mssql : DbType.valueOf(parts[1]));
+				} catch (Exception e) {
+					//ignore
+				}
+				connectionProperties.setURL(prop);
+			}
+		}
+	}
+	
+	protected static String getPropFromPersistence(String[] tokens, int idx, String name){
+		String prop = tokens[idx].trim();
+		if (prop.startsWith(name)) {
+			//From "Username=root" getting only "root"
+			return prop.substring(prop.indexOf("=") + 1);
+		}
+		return null;
+	}
+	
+	protected abstract String getUrl(String url, String host, String port, String db);
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java
index b681979..2103db1 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java
@@ -1,28 +1,28 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.cli;
-
-public class Db2Patcher extends ConnectionPropertiesPatcher {
-	@Override
-	protected String getUrl(String _url, String host, String _port, String _db) {
-		String port = (_port == null) ? "50000" : _port;
-		String db = (_db == null) ? "openmeet" : _db;
-		return "jdbc:db2://" + host + ":" + port + "/" + db; 
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class Db2Patcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "50000" : _port;
+		String db = (_db == null) ? "openmeet" : _db;
+		return "jdbc:db2://" + host + ":" + port + "/" + db; 
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java
index ff5498e..ea55963 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java
@@ -1,33 +1,33 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.cli;
-
-public class DerbyPatcher extends ConnectionPropertiesPatcher {
-	@Override
-	protected String getUrl(String _url, String host, String _port, String _db) {
-		String db = (_db == null) ? "openmeetings" : _db;
-		String suffix = _url.substring(_url.indexOf(';'));
-		
-		if (host != null && _port != null) {
-			//return "jdbc:derby" + "://" + host + ":" + _port + "/" + db + suffix;
-		}
-		
-		return "jdbc:derby" + ":" + db + suffix; 
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class DerbyPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String db = (_db == null) ? "openmeetings" : _db;
+		String suffix = _url.substring(_url.indexOf(';'));
+		
+		if (host != null && _port != null) {
+			//return "jdbc:derby" + "://" + host + ":" + _port + "/" + db + suffix;
+		}
+		
+		return "jdbc:derby" + ":" + db + suffix; 
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java
index 681331d..2bd04a8 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java
@@ -1,28 +1,28 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.cli;
-
-public class MssqlPatcher extends ConnectionPropertiesPatcher {
-	@Override
-	protected String getUrl(String _url, String host, String _port, String _db) {
-		String port = (_port == null) ? "1433" : _port;
-		String db = (_db == null) ? "openmeetings" : _db;
-		return "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + db;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class MssqlPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "1433" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		return "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + db;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java
index 163e710..2a3c7d4 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java
@@ -1,29 +1,29 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.cli;
-
-public class MysqlPatcher extends ConnectionPropertiesPatcher {
-	@Override
-	protected String getUrl(String _url, String host, String _port, String _db) {
-		String port = (_port == null) ? "3306" : _port;
-		String db = (_db == null) ? "openmeetings" : _db;
-		String suffix = _url.substring(_url.indexOf('?'));
-		return "jdbc:mysql://" + host + ":" + port + "/" + db + suffix;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class MysqlPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "3306" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		String suffix = _url.substring(_url.indexOf('?'));
+		return "jdbc:mysql://" + host + ":" + port + "/" + db + suffix;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java
index c9a04a9..bb2db07 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java
@@ -1,32 +1,32 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.cli;
-
-public class OraclePatcher extends ConnectionPropertiesPatcher {
-	@Override
-	protected String getUrl(String _url, String host, String _port, String _db) {
-		String port = (_port == null) ? "1521" : _port;
-		String db = (_db == null) ? "openmeetings" : _db;
-		String delim = ":";
-		if (db.startsWith("/")) {
-			delim = "";
-		}
-		return String.format("jdbc:oracle:thin:@%s:%s%s%s", host, port, delim, db); 
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class OraclePatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "1521" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		String delim = ":";
+		if (db.startsWith("/")) {
+			delim = "";
+		}
+		return String.format("jdbc:oracle:thin:@%s:%s%s%s", host, port, delim, db); 
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java
index e1b885c..975f6dc 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java
@@ -1,28 +1,28 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.cli;
-
-public class PostgresPatcher extends ConnectionPropertiesPatcher {
-	@Override
-	protected String getUrl(String _url, String host, String _port, String _db) {
-		String port = (_port == null) ? "5432" : _port;
-		String db = (_db == null) ? "openmeetings" : _db;
-		return "jdbc:postgresql://" + host + ":" + port + "/" + db; 
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+public class PostgresPatcher extends ConnectionPropertiesPatcher {
+	@Override
+	protected String getUrl(String _url, String host, String _port, String _db) {
+		String port = (_port == null) ? "5432" : _port;
+		String db = (_db == null) ? "openmeetings" : _db;
+		return "jdbc:postgresql://" + host + ":" + port + "/" + db; 
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java
index 5e1f297..7fbf8ac 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java
@@ -1,100 +1,100 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.installation;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
-
-import java.io.Serializable;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.util.crypt.SHA256Implementation;
-
-public class InstallationConfig implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	public String appName = ConfigurationDao.DEFAULT_APP_NAME;
-	public String username;
-	private String password;
-	public String email;
-	public String group;
-	public String allowFrontendRegister = "1";
-	public String createDefaultRooms = "1";
-	public String ical_timeZone = "Europe/Berlin";
-
-	public String cryptClassName = SHA256Implementation.class.getCanonicalName();
-	//email
-	public Integer smtpPort = 25;
-	public String smtpServer = "localhost";
-	public String mailAuthName = "";
-	public String mailAuthPass = "";
-	public String mailReferer = "noreply@openmeetings.apache.org";
-	public String mailUseTls = "0";
-	//paths
-	public Integer swfZoom = 100;
-	public Integer swfJpegQuality = 85;
-	public String swfPath = "";
-	public String imageMagicPath = "";
-	public String ffmpegPath = "";
-	public String soxPath = "";
-	public String officePath = "";
-
-	public String defaultLangId = "1";
-	public String sendEmailAtRegister = "0";
-	public String urlFeed = "http://mail-archives.apache.org/mod_mbox/openmeetings-user/?format=atom";
-	public String urlFeed2 = "http://mail-archives.apache.org/mod_mbox/openmeetings-dev/?format=atom";
-	public String sendEmailWithVerficationCode = "0";
-	public String defaultExportFont = "TimesNewRoman";
-	public String red5SipEnable = "no";
-	public String red5SipRoomPrefix = "400";
-	public String red5SipExtenContext = "rooms";
-	public String replyToOrganizer = "1";
-	public String baseUrl = DEFAULT_BASE_URL;
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	@Override
-	public String toString() {
-		return "InstallationConfig [allowFrontendRegister="
-				+ allowFrontendRegister + ", createDefaultRooms="
-				+ createDefaultRooms + ", cryptClassName=" + cryptClassName
-				+ ", smtpPort=" + smtpPort + ", smtpServer=" + smtpServer
-				+ ", mailAuthName=" + mailAuthName + ", mailAuthPass="
-				+ mailAuthPass + ", mailReferer=" + mailReferer
-				+ ", mailUseTls=" + mailUseTls + ", swfZoom=" + swfZoom
-				+ ", swfJpegQuality=" + swfJpegQuality  + ", swfPath=" + swfPath
-				+ ", imageMagicPath=" + imageMagicPath + ", ffmpegPath="
-				+ ffmpegPath + ", soxPath=" + soxPath
-				+ ", defaultLangId=" + defaultLangId + ", sendEmailAtRegister="
-				+ sendEmailAtRegister + ", urlFeed=" + urlFeed + ", urlFeed2="
-				+ urlFeed2 + ", sendEmailWithVerficationCode="
-				+ sendEmailWithVerficationCode + ", defaultExportFont="
-				+ defaultExportFont + ", red5SipEnable="
-				+ red5SipEnable + ", red5SipRoomPrefix=" + red5SipRoomPrefix
-				+ ", red5SipExtenContext=" + red5SipExtenContext
-				+ ", replyToOrganizer=" + replyToOrganizer
-				+ ", ical_timeZone=" + ical_timeZone 
-				+ "]";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.installation;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
+
+import java.io.Serializable;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.crypt.SHA256Implementation;
+
+public class InstallationConfig implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	public String appName = ConfigurationDao.DEFAULT_APP_NAME;
+	public String username;
+	private String password;
+	public String email;
+	public String group;
+	public String allowFrontendRegister = "1";
+	public String createDefaultRooms = "1";
+	public String ical_timeZone = "Europe/Berlin";
+
+	public String cryptClassName = SHA256Implementation.class.getCanonicalName();
+	//email
+	public Integer smtpPort = 25;
+	public String smtpServer = "localhost";
+	public String mailAuthName = "";
+	public String mailAuthPass = "";
+	public String mailReferer = "noreply@openmeetings.apache.org";
+	public String mailUseTls = "0";
+	//paths
+	public Integer swfZoom = 100;
+	public Integer swfJpegQuality = 85;
+	public String swfPath = "";
+	public String imageMagicPath = "";
+	public String ffmpegPath = "";
+	public String soxPath = "";
+	public String officePath = "";
+
+	public String defaultLangId = "1";
+	public String sendEmailAtRegister = "0";
+	public String urlFeed = "http://mail-archives.apache.org/mod_mbox/openmeetings-user/?format=atom";
+	public String urlFeed2 = "http://mail-archives.apache.org/mod_mbox/openmeetings-dev/?format=atom";
+	public String sendEmailWithVerficationCode = "0";
+	public String defaultExportFont = "TimesNewRoman";
+	public String red5SipEnable = "no";
+	public String red5SipRoomPrefix = "400";
+	public String red5SipExtenContext = "rooms";
+	public String replyToOrganizer = "1";
+	public String baseUrl = DEFAULT_BASE_URL;
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	@Override
+	public String toString() {
+		return "InstallationConfig [allowFrontendRegister="
+				+ allowFrontendRegister + ", createDefaultRooms="
+				+ createDefaultRooms + ", cryptClassName=" + cryptClassName
+				+ ", smtpPort=" + smtpPort + ", smtpServer=" + smtpServer
+				+ ", mailAuthName=" + mailAuthName + ", mailAuthPass="
+				+ mailAuthPass + ", mailReferer=" + mailReferer
+				+ ", mailUseTls=" + mailUseTls + ", swfZoom=" + swfZoom
+				+ ", swfJpegQuality=" + swfJpegQuality  + ", swfPath=" + swfPath
+				+ ", imageMagicPath=" + imageMagicPath + ", ffmpegPath="
+				+ ffmpegPath + ", soxPath=" + soxPath
+				+ ", defaultLangId=" + defaultLangId + ", sendEmailAtRegister="
+				+ sendEmailAtRegister + ", urlFeed=" + urlFeed + ", urlFeed2="
+				+ urlFeed2 + ", sendEmailWithVerficationCode="
+				+ sendEmailWithVerficationCode + ", defaultExportFont="
+				+ defaultExportFont + ", red5SipEnable="
+				+ red5SipEnable + ", red5SipRoomPrefix=" + red5SipRoomPrefix
+				+ ", red5SipExtenContext=" + red5SipExtenContext
+				+ ", replyToOrganizer=" + replyToOrganizer
+				+ ", ical_timeZone=" + ical_timeZone 
+				+ "]";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-install/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/site/site.xml b/openmeetings-install/src/site/site.xml
index b7a0eae..dd3dc53 100644
--- a/openmeetings-install/src/site/site.xml
+++ b/openmeetings-install/src/site/site.xml
@@ -1,39 +1,39 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
index d17d56b..0ce3502 100644
--- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
+++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java
@@ -1,237 +1,237 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.screenshare;
-
-import static org.apache.openmeetings.screenshare.Core.QUARTZ_GROUP_NAME;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.FPS;
-import static org.apache.openmeetings.screenshare.util.Util.getQurtzProps;
-import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Queue;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.openmeetings.screenshare.job.CursorJob;
-import org.apache.openmeetings.screenshare.job.EncodeJob;
-import org.apache.openmeetings.screenshare.job.SendJob;
-import org.quartz.JobBuilder;
-import org.quartz.JobDetail;
-import org.quartz.JobKey;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.SchedulerFactory;
-import org.quartz.Trigger;
-import org.quartz.TriggerBuilder;
-import org.quartz.impl.StdSchedulerFactory;
-import org.red5.server.api.Red5;
-import org.red5.server.net.rtmp.event.VideoData;
-import org.red5.server.stream.message.RTMPMessage;
-import org.slf4j.Logger;
-
-public class CaptureScreen extends Thread {
-	private static final Logger log = getLogger(CaptureScreen.class);
-	private final static String QUARTZ_CURSOR_TRIGGER_NAME = "CursorTrigger";
-	private final static String QUARTZ_CURSOR_JOB_NAME = "CursorJob";
-	private Core core;
-	private int timestampDelta;
-	private volatile AtomicInteger timestamp = new AtomicInteger(0);
-	private volatile AtomicBoolean sendFrameGuard = new AtomicBoolean(false);
-	private long startTime = 0;
-	private volatile boolean active = true;
-	private IScreenEncoder se;
-	private IScreenShare client;
-	private Queue<VideoData> frames = new ArrayBlockingQueue<>(2);
-	private String host = null;
-	private String app = null;
-	private int port = -1;
-	private Number streamId;
-	private boolean startPublish = false;
-	private Scheduler _scheduler;
-
-	public CaptureScreen(Core coreScreenShare, IScreenShare client, String host, String app, int port) {
-		core = coreScreenShare;
-		this.client = client;
-		this.host = host;
-		this.app = app;
-		this.port = port;
-	}
-
-	private Scheduler getScheduler() {
-		if (_scheduler == null) {
-			try {
-				SchedulerFactory schdlrFactory = new StdSchedulerFactory(getQurtzProps("CaptureScreen"));
-				_scheduler = schdlrFactory.getScheduler();
-			} catch (SchedulerException e) {
-				log.error("Unexpected error while creating scheduler", e);
-			}
-		}
-		return _scheduler;
-	}
-
-	public void release() {
-		try {
-			if (_scheduler != null) {
-				_scheduler.shutdown(true);
-				_scheduler = null;
-			}
-		} catch (Exception e) {
-			log.error("Unexpected error while shutting down scheduler", e);
-		}
-		active = false;
-		timestamp = new AtomicInteger(0);
-		startTime = 0;
-	}
-
-	@Override
-	public void run() {
-		try {
-			while (active && !core.isReadyToRecord()) {
-				Thread.sleep(60);
-			}
-
-			timestampDelta = 1000 / FPS;
-			se = new ScreenV1Encoder(3 * FPS); //send keyframe every 3 seconds
-			startTime = System.currentTimeMillis();
-
-			JobDetail encodeJob = JobBuilder.newJob(EncodeJob.class).withIdentity("EncodeJob", QUARTZ_GROUP_NAME).build();
-			encodeJob.getJobDataMap().put(EncodeJob.CAPTURE_KEY, this);
-			Trigger encodeTrigger = TriggerBuilder.newTrigger()
-					.withIdentity("EncodeTrigger", QUARTZ_GROUP_NAME)
-					.withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever())
-					.build();
-			JobDetail sendJob = JobBuilder.newJob(SendJob.class).withIdentity("SendJob", QUARTZ_GROUP_NAME).build();
-			Trigger sendTrigger = TriggerBuilder.newTrigger()
-					.withIdentity("SendTrigger", QUARTZ_GROUP_NAME)
-					.withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever())
-					.build();
-			sendJob.getJobDataMap().put(SendJob.CAPTURE_KEY, this);
-
-			Scheduler s = getScheduler();
-			s.scheduleJob(encodeJob, encodeTrigger);
-			s.scheduleJob(sendJob, sendTrigger);
-			s.start();
-		} catch (Exception e) {
-			log.error("Error while running: ", e);
-		}
-	}
-
-	/*
-	private void pushAudio(byte[] audio, long ts) {
-		if (startPublish) {
-			buffer.put((byte) 6);
-			buffer.put(audio);
-			buffer.flip();
-
-			// I can stream audio
-			//packets successfully using linear PCM at 11025Hz. For those packets I
-			//push one byte (0x06) which specifies the format of audio data in a
-			//ByteBuffer, and then real audio data:
-			RTMPMessage rtmpMsg = RTMPMessage.build(new AudioData(buffer), (int) ts);
-			client.publishStreamData(streamId, rtmpMsg);
-		}
-	}
-	*/
-
-	public void pushVideo(VideoData data, int ts) {
-		if (startPublish) {
-			if (Red5.getConnectionLocal() == null) {
-				Red5.setConnectionLocal(client.getConnection());
-			}
-			RTMPMessage rtmpMsg = RTMPMessage.build(data, ts);
-			client.publishStreamData(streamId, rtmpMsg);
-		}
-	}
-
-	public String getHost() {
-		return host;
-	}
-
-	public String getApp() {
-		return app;
-	}
-
-	public int getPort() {
-		return port;
-	}
-
-	public Number getStreamId() {
-		return streamId;
-	}
-
-	public void setStreamId(Number streamId) {
-		this.streamId = streamId;
-	}
-
-	public void setStartPublish(boolean startPublish) {
-		this.startPublish = startPublish;
-	}
-
-	public IScreenEncoder getEncoder() {
-		return se;
-	}
-
-	public Queue<VideoData> getFrames() {
-		return frames;
-	}
-
-	public void setSendFrameGuard(boolean b) {
-		sendFrameGuard.set(b);
-	}
-
-	public boolean getSendFrameGuard() {
-		return sendFrameGuard.get();
-	}
-
-	public AtomicInteger getTimestamp() {
-		return timestamp;
-	}
-
-	public long getStartTime() {
-		return startTime;
-	}
-
-	public int getTimestampDelta() {
-		return timestampDelta;
-	}
-
-	public void sendCursorStatus() {
-		core.sendCursorStatus();
-	}
-
-	public void setSendCursor(boolean sendCursor) {
-		try {
-			Scheduler s = getScheduler();
-			if (sendCursor) {
-				JobDetail cursorJob = JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME).build();
-				Trigger cursorTrigger = TriggerBuilder.newTrigger()
-						.withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, QUARTZ_GROUP_NAME)
-						.withSchedule(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, FPS)).repeatForever())
-						.build();
-				cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this);
-				s.scheduleJob(cursorJob, cursorTrigger);
-			} else {
-				s.deleteJob(JobKey.jobKey(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME));
-			}
-		} catch (SchedulerException e) {
-			log.error("Unexpected Error schedule/unschedule cursor job", e);
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screenshare;
+
+import static org.apache.openmeetings.screenshare.Core.QUARTZ_GROUP_NAME;
+import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.FPS;
+import static org.apache.openmeetings.screenshare.util.Util.getQurtzProps;
+import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.util.Queue;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.openmeetings.screenshare.job.CursorJob;
+import org.apache.openmeetings.screenshare.job.EncodeJob;
+import org.apache.openmeetings.screenshare.job.SendJob;
+import org.quartz.JobBuilder;
+import org.quartz.JobDetail;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.SchedulerFactory;
+import org.quartz.Trigger;
+import org.quartz.TriggerBuilder;
+import org.quartz.impl.StdSchedulerFactory;
+import org.red5.server.api.Red5;
+import org.red5.server.net.rtmp.event.VideoData;
+import org.red5.server.stream.message.RTMPMessage;
+import org.slf4j.Logger;
+
+public class CaptureScreen extends Thread {
+	private static final Logger log = getLogger(CaptureScreen.class);
+	private final static String QUARTZ_CURSOR_TRIGGER_NAME = "CursorTrigger";
+	private final static String QUARTZ_CURSOR_JOB_NAME = "CursorJob";
+	private Core core;
+	private int timestampDelta;
+	private volatile AtomicInteger timestamp = new AtomicInteger(0);
+	private volatile AtomicBoolean sendFrameGuard = new AtomicBoolean(false);
+	private long startTime = 0;
+	private volatile boolean active = true;
+	private IScreenEncoder se;
+	private IScreenShare client;
+	private Queue<VideoData> frames = new ArrayBlockingQueue<>(2);
+	private String host = null;
+	private String app = null;
+	private int port = -1;
+	private Number streamId;
+	private boolean startPublish = false;
+	private Scheduler _scheduler;
+
+	public CaptureScreen(Core coreScreenShare, IScreenShare client, String host, String app, int port) {
+		core = coreScreenShare;
+		this.client = client;
+		this.host = host;
+		this.app = app;
+		this.port = port;
+	}
+
+	private Scheduler getScheduler() {
+		if (_scheduler == null) {
+			try {
+				SchedulerFactory schdlrFactory = new StdSchedulerFactory(getQurtzProps("CaptureScreen"));
+				_scheduler = schdlrFactory.getScheduler();
+			} catch (SchedulerException e) {
+				log.error("Unexpected error while creating scheduler", e);
+			}
+		}
+		return _scheduler;
+	}
+
+	public void release() {
+		try {
+			if (_scheduler != null) {
+				_scheduler.shutdown(true);
+				_scheduler = null;
+			}
+		} catch (Exception e) {
+			log.error("Unexpected error while shutting down scheduler", e);
+		}
+		active = false;
+		timestamp = new AtomicInteger(0);
+		startTime = 0;
+	}
+
+	@Override
+	public void run() {
+		try {
+			while (active && !core.isReadyToRecord()) {
+				Thread.sleep(60);
+			}
+
+			timestampDelta = 1000 / FPS;
+			se = new ScreenV1Encoder(3 * FPS); //send keyframe every 3 seconds
+			startTime = System.currentTimeMillis();
+
+			JobDetail encodeJob = JobBuilder.newJob(EncodeJob.class).withIdentity("EncodeJob", QUARTZ_GROUP_NAME).build();
+			encodeJob.getJobDataMap().put(EncodeJob.CAPTURE_KEY, this);
+			Trigger encodeTrigger = TriggerBuilder.newTrigger()
+					.withIdentity("EncodeTrigger", QUARTZ_GROUP_NAME)
+					.withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever())
+					.build();
+			JobDetail sendJob = JobBuilder.newJob(SendJob.class).withIdentity("SendJob", QUARTZ_GROUP_NAME).build();
+			Trigger sendTrigger = TriggerBuilder.newTrigger()
+					.withIdentity("SendTrigger", QUARTZ_GROUP_NAME)
+					.withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever())
+					.build();
+			sendJob.getJobDataMap().put(SendJob.CAPTURE_KEY, this);
+
+			Scheduler s = getScheduler();
+			s.scheduleJob(encodeJob, encodeTrigger);
+			s.scheduleJob(sendJob, sendTrigger);
+			s.start();
+		} catch (Exception e) {
+			log.error("Error while running: ", e);
+		}
+	}
+
+	/*
+	private void pushAudio(byte[] audio, long ts) {
+		if (startPublish) {
+			buffer.put((byte) 6);
+			buffer.put(audio);
+			buffer.flip();
+
+			// I can stream audio
+			//packets successfully using linear PCM at 11025Hz. For those packets I
+			//push one byte (0x06) which specifies the format of audio data in a
+			//ByteBuffer, and then real audio data:
+			RTMPMessage rtmpMsg = RTMPMessage.build(new AudioData(buffer), (int) ts);
+			client.publishStreamData(streamId, rtmpMsg);
+		}
+	}
+	*/
+
+	public void pushVideo(VideoData data, int ts) {
+		if (startPublish) {
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(client.getConnection());
+			}
+			RTMPMessage rtmpMsg = RTMPMessage.build(data, ts);
+			client.publishStreamData(streamId, rtmpMsg);
+		}
+	}
+
+	public String getHost() {
+		return host;
+	}
+
+	public String getApp() {
+		return app;
+	}
+
+	public int getPort() {
+		return port;
+	}
+
+	public Number getStreamId() {
+		return streamId;
+	}
+
+	public void setStreamId(Number streamId) {
+		this.streamId = streamId;
+	}
+
+	public void setStartPublish(boolean startPublish) {
+		this.startPublish = startPublish;
+	}
+
+	public IScreenEncoder getEncoder() {
+		return se;
+	}
+
+	public Queue<VideoData> getFrames() {
+		return frames;
+	}
+
+	public void setSendFrameGuard(boolean b) {
+		sendFrameGuard.set(b);
+	}
+
+	public boolean getSendFrameGuard() {
+		return sendFrameGuard.get();
+	}
+
+	public AtomicInteger getTimestamp() {
+		return timestamp;
+	}
+
+	public long getStartTime() {
+		return startTime;
+	}
+
+	public int getTimestampDelta() {
+		return timestampDelta;
+	}
+
+	public void sendCursorStatus() {
+		core.sendCursorStatus();
+	}
+
+	public void setSendCursor(boolean sendCursor) {
+		try {
+			Scheduler s = getScheduler();
+			if (sendCursor) {
+				JobDetail cursorJob = JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME).build();
+				Trigger cursorTrigger = TriggerBuilder.newTrigger()
+						.withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, QUARTZ_GROUP_NAME)
+						.withSchedule(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, FPS)).repeatForever())
+						.build();
+				cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this);
+				s.scheduleJob(cursorJob, cursorTrigger);
+			} else {
+				s.deleteJob(JobKey.jobKey(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME));
+			}
+		} catch (SchedulerException e) {
+			log.error("Unexpected Error schedule/unschedule cursor job", e);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/IScreenEncoder.java
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/IScreenEncoder.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/IScreenEncoder.java
index 3c31281..26dcb4b 100644
--- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/IScreenEncoder.java
+++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/IScreenEncoder.java
@@ -1,33 +1,33 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.screenshare;
-
-import java.io.IOException;
-
-import org.red5.server.net.rtmp.event.VideoData;
-
-public interface IScreenEncoder {
-	void createUnalteredFrame() throws IOException;
-	
-	VideoData getUnalteredFrame();
-
-	VideoData encode(int[][] img) throws IOException;
-	
-	void reset();
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screenshare;
+
+import java.io.IOException;
+
+import org.red5.server.net.rtmp.event.VideoData;
+
+public interface IScreenEncoder {
+	void createUnalteredFrame() throws IOException;
+	
+	VideoData getUnalteredFrame();
+
+	VideoData encode(int[][] img) throws IOException;
+	
+	void reset();
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/RTMPClientPublish.java
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/RTMPClientPublish.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/RTMPClientPublish.java
index 598f9fd2..7e44ba3 100644
--- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/RTMPClientPublish.java
+++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/RTMPClientPublish.java
@@ -1,103 +1,103 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.screenshare;
-
-import org.red5.client.net.rtmp.INetStreamEventHandler;
-import org.red5.client.net.rtmp.RTMPClient;
-import org.red5.server.api.service.IPendingServiceCall;
-import org.red5.server.api.service.IPendingServiceCallback;
-import org.red5.server.net.ICommand;
-import org.red5.server.net.rtmp.Channel;
-import org.red5.server.net.rtmp.RTMPConnection;
-import org.red5.server.net.rtmp.event.Notify;
-import org.red5.server.net.rtmp.message.Header;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-class RTMPClientPublish extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, IScreenShare {
-	private static final Logger logger = LoggerFactory.getLogger(RTMPClientPublish.class);
-	private final CaptureScreen publishScreen;
-	private String id;
-	private Core core;
-	
-	public void setCore(Core core) {
-		this.core = core;
-	}
-	
-	RTMPClientPublish(Core core, String host, String app, String id) {
-		this.id = id;
-		this.core = core;
-		publishScreen = new CaptureScreen(core, this, host, app, 1935);
-	}
-
-	public void connect() {
-		super.connect(publishScreen.getHost(), 1935, publishScreen.getApp(), this);
-	}
-	
-	@Override
-	public void handleException(Throwable throwable) {
-		logger.error("ERROR", throwable);
-	}
-
-	@Override
-	public void connectionOpened(RTMPConnection conn) {
-		super.connectionOpened(conn);
-		createStream(this);
-	}
-	
-	@Override
-	public void connectionClosed(RTMPConnection conn) {
-		super.connectionClosed(conn);
-		connectionClosed();
-	}
-	
-	private void connectionClosed() {
-		publishScreen.setStartPublish(false);
-		publishScreen.release();
-		core.publishingStop();
-	}
-	
-	@Override
-	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
-		super.onCommand(conn, channel, source, command);
-	}
-	
-	@Override
-	public void resultReceived(IPendingServiceCall call) {
-		String method = call == null ? null : call.getServiceMethodName();
-		logger.trace("call ### get Method Name " + method);
-		if ("connect".equals(method)) {
-			//setConnectionAsSharingClient(); //FIXME
-		} else if ("createStream".equals(method)) {
-			if (call.getResult() != null) {
-				publishScreen.setStreamId((Integer)call.getResult());
-				publish(publishScreen.getStreamId(), id, "live", this);
-				publishScreen.setStartPublish(true);
-				publishScreen.start();
-			} else {
-				connectionClosed();
-			}
-		}
-	}
-
-	@Override
-	public void onStreamEvent(Notify notify) {
-		//no-op
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screenshare;
+
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.client.net.rtmp.RTMPClient;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.event.Notify;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class RTMPClientPublish extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPClientPublish.class);
+	private final CaptureScreen publishScreen;
+	private String id;
+	private Core core;
+	
+	public void setCore(Core core) {
+		this.core = core;
+	}
+	
+	RTMPClientPublish(Core core, String host, String app, String id) {
+		this.id = id;
+		this.core = core;
+		publishScreen = new CaptureScreen(core, this, host, app, 1935);
+	}
+
+	public void connect() {
+		super.connect(publishScreen.getHost(), 1935, publishScreen.getApp(), this);
+	}
+	
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("ERROR", throwable);
+	}
+
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		super.connectionOpened(conn);
+		createStream(this);
+	}
+	
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		super.connectionClosed(conn);
+		connectionClosed();
+	}
+	
+	private void connectionClosed() {
+		publishScreen.setStartPublish(false);
+		publishScreen.release();
+		core.publishingStop();
+	}
+	
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+	}
+	
+	@Override
+	public void resultReceived(IPendingServiceCall call) {
+		String method = call == null ? null : call.getServiceMethodName();
+		logger.trace("call ### get Method Name " + method);
+		if ("connect".equals(method)) {
+			//setConnectionAsSharingClient(); //FIXME
+		} else if ("createStream".equals(method)) {
+			if (call.getResult() != null) {
+				publishScreen.setStreamId((Integer)call.getResult());
+				publish(publishScreen.getStreamId(), id, "live", this);
+				publishScreen.setStartPublish(true);
+				publishScreen.start();
+			} else {
+				connectionClosed();
+			}
+		}
+	}
+
+	@Override
+	public void onStreamEvent(Notify notify) {
+		//no-op
+	}
 }
\ No newline at end of file


[10/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
index 0e467be..ebb0a54 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
@@ -1,116 +1,116 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.util.process;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-public class ProcessHelper {
-	public static final Logger log = Red5LoggerFactory.getLogger(ProcessHelper.class, OpenmeetingsVariables.webAppRootKey);
-
-	public static ConverterProcessResult executeScriptWindows(String process, String[] argv) {
-		try {
-			String[] cmd = new String[argv.length + 2];
-			cmd[0] = "cmd.exe";
-			cmd[1] = "/C";
-			System.arraycopy(argv, 0, cmd, 2, argv.length);
-			Map<String, String> env = new HashMap<>();
-			return executeScript(process, cmd, env);
-		} catch (Exception t) {
-			log.error("executeScriptWindows", t);
-			return new ConverterProcessResult(process, t.getMessage(), t);
-		}
-	}
-
-	private static String getCommand(String[] argv) {
-		StringBuffer tString = new StringBuffer();
-		for (int i = 0; i < argv.length; i++) {
-			tString.append(argv[i]).append(" ");
-		}
-		return tString.toString();
-	}
-
-	private static void debugCommandStart(String desc, String[] argv) {
-		if (log.isDebugEnabled()) {
-			log.debug("START " + desc + " ################# ");
-			log.debug(getCommand(argv));
-		}
-	}
-
-	private static void debugCommandEnd(String desc) {
-		if (log.isDebugEnabled()) {
-			log.debug("END " + desc + " ################# ");
-		}
-	}
-
-	public static ConverterProcessResult executeScript(String process, String[] argv) {
-		Map<String, String> env = new HashMap<>();
-		return executeScript(process, argv, env);
-	}
-
-	public static ConverterProcessResult executeScript(String process, String[] argv, Map<? extends String, ? extends String> env) {
-		ConverterProcessResult res = new ConverterProcessResult();
-		res.setProcess(process);
-		debugCommandStart(process, argv);
-
-		Process proc = null;
-		try {
-			res.setCommand(getCommand(argv));
-			res.setOut("");
-
-			// By using the process Builder we have access to modify the
-			// environment variables
-			// that is handy to set variables to run it inside eclipse
-			ProcessBuilder pb = new ProcessBuilder(argv);
-			pb.environment().putAll(env);
-
-			proc = pb.start();
-
-			// 20-minute timeout for command execution
-			// FFMPEG conversion of Recordings may take a real long time until
-			// its finished
-			proc.waitFor(20, TimeUnit.MINUTES);
-
-			res.setExitCode(proc.exitValue());
-			res.setOut(IOUtils.toString(proc.getInputStream(), UTF_8));
-			res.setError(IOUtils.toString(proc.getErrorStream(), UTF_8));
-		} catch (Throwable t) {
-			log.error("executeScript", t);
-			res.setError(t.getMessage());
-			res.setException(t.toString());
-			res.setExitCode(-1);
-		} finally {
-			if (proc != null) {
-				proc.destroy();
-			}
-		}
-
-		debugCommandEnd(process);
-		return res;
-	}
-}
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ProcessHelper {
+	public static final Logger log = Red5LoggerFactory.getLogger(ProcessHelper.class, OpenmeetingsVariables.webAppRootKey);
+
+	public static ConverterProcessResult executeScriptWindows(String process, String[] argv) {
+		try {
+			String[] cmd = new String[argv.length + 2];
+			cmd[0] = "cmd.exe";
+			cmd[1] = "/C";
+			System.arraycopy(argv, 0, cmd, 2, argv.length);
+			Map<String, String> env = new HashMap<>();
+			return executeScript(process, cmd, env);
+		} catch (Exception t) {
+			log.error("executeScriptWindows", t);
+			return new ConverterProcessResult(process, t.getMessage(), t);
+		}
+	}
+
+	private static String getCommand(String[] argv) {
+		StringBuffer tString = new StringBuffer();
+		for (int i = 0; i < argv.length; i++) {
+			tString.append(argv[i]).append(" ");
+		}
+		return tString.toString();
+	}
+
+	private static void debugCommandStart(String desc, String[] argv) {
+		if (log.isDebugEnabled()) {
+			log.debug("START " + desc + " ################# ");
+			log.debug(getCommand(argv));
+		}
+	}
+
+	private static void debugCommandEnd(String desc) {
+		if (log.isDebugEnabled()) {
+			log.debug("END " + desc + " ################# ");
+		}
+	}
+
+	public static ConverterProcessResult executeScript(String process, String[] argv) {
+		Map<String, String> env = new HashMap<>();
+		return executeScript(process, argv, env);
+	}
+
+	public static ConverterProcessResult executeScript(String process, String[] argv, Map<? extends String, ? extends String> env) {
+		ConverterProcessResult res = new ConverterProcessResult();
+		res.setProcess(process);
+		debugCommandStart(process, argv);
+
+		Process proc = null;
+		try {
+			res.setCommand(getCommand(argv));
+			res.setOut("");
+
+			// By using the process Builder we have access to modify the
+			// environment variables
+			// that is handy to set variables to run it inside eclipse
+			ProcessBuilder pb = new ProcessBuilder(argv);
+			pb.environment().putAll(env);
+
+			proc = pb.start();
+
+			// 20-minute timeout for command execution
+			// FFMPEG conversion of Recordings may take a real long time until
+			// its finished
+			proc.waitFor(20, TimeUnit.MINUTES);
+
+			res.setExitCode(proc.exitValue());
+			res.setOut(IOUtils.toString(proc.getInputStream(), UTF_8));
+			res.setError(IOUtils.toString(proc.getErrorStream(), UTF_8));
+		} catch (Throwable t) {
+			log.error("executeScript", t);
+			res.setError(t.getMessage());
+			res.setException(t.toString());
+			res.setExitCode(-1);
+		} finally {
+			if (proc != null) {
+				proc.destroy();
+			}
+		}
+
+		debugCommandEnd(process);
+		return res;
+	}
+}
+

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-util/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/site/site.xml b/openmeetings-util/src/site/site.xml
index c26954e..0d9f35c 100644
--- a/openmeetings-util/src/site/site.xml
+++ b/openmeetings-util/src/site/site.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminBaseForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
index 7405178..2f100ed 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
@@ -1,181 +1,181 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.IModel;
-
-/**
- * provides basic functionality to insert, update, remove, refresh record in
- * admin section
- * 
- * @author swagner
- * 
- * @param <T>
- */
-public abstract class AdminBaseForm<T> extends Form<T> {
-	private static final long serialVersionUID = 1L;
-	private AdminSavePanel<T> savePanel;
-
-	public AdminBaseForm(String id, IModel<T> object) {
-		super(id, object);
-		
-		savePanel = new AdminSavePanel<T>("buttons", this) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onSaveSubmit(target, form);
-			}
-
-			@Override
-			protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onSaveError(target, form);
-			}
-
-			@Override
-			protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onNewSubmit(target, form);
-			}
-
-			@Override
-			protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onNewError(target, form);
-			}
-
-			@Override
-			protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onRefreshSubmit(target, form);
-			}
-
-			@Override
-			protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onRefreshError(target, form);
-			}
-
-			@Override
-			protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onDeleteSubmit(target, form);
-			}
-
-			@Override
-			protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-				AdminBaseForm.this.onDeleteError(target, form);
-			}
-
-			@Override
-			protected boolean isNewBtnVisible() {
-				return AdminBaseForm.this.isNewBtnVisible();
-			}
-
-			@Override
-			protected boolean isDelBtnVisible() {
-				return AdminBaseForm.this.isDelBtnVisible();
-			}
-		};
-		add(savePanel);
-	}
-
-	/**
-	 * @see AdminBaseForm#hideNewRecord()
-	 */
-	public void hideNewRecord() {
-		savePanel.hideNewRecord();
-	}
-
-	/**
-	 * @see AdminBaseForm#showNewRecord()
-	 */
-	public void showNewRecord() {
-		savePanel.showNewRecord();
-	}
-
-	protected boolean isNewBtnVisible() {
-		return true;
-	}
-
-	protected boolean isDelBtnVisible() {
-		return true;
-	}
-	/**
-	 * invoked when user press save button
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onSaveSubmit(AjaxRequestTarget target, Form<?> form);
-	
-	/**
-	 * invoked when save has error
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onSaveError(AjaxRequestTarget target, Form<?> form);
-	
-	/**
-	 * invoked when new button is pressed
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onNewSubmit(AjaxRequestTarget target, Form<?> form);
-	
-	/**
-	 * invoked if new has error
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onNewError(AjaxRequestTarget target, Form<?> form);
-	
-	/**
-	 * invoked when refresh button is pressed
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onRefreshSubmit(AjaxRequestTarget target, Form<?> form);
-	
-	/**
-	 * invoked when refresh has error
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onRefreshError(AjaxRequestTarget target, Form<?> form);
-	
-	/**
-	 * invoked when delete button is pressed
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onDeleteSubmit(AjaxRequestTarget target, Form<?> form);
-	
-	/**
-	 * invoked when delete has error
-	 * 
-	 * @param target
-	 * @param form
-	 */
-	protected abstract void onDeleteError(AjaxRequestTarget target, Form<?> form);
-	
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+
+/**
+ * provides basic functionality to insert, update, remove, refresh record in
+ * admin section
+ * 
+ * @author swagner
+ * 
+ * @param <T>
+ */
+public abstract class AdminBaseForm<T> extends Form<T> {
+	private static final long serialVersionUID = 1L;
+	private AdminSavePanel<T> savePanel;
+
+	public AdminBaseForm(String id, IModel<T> object) {
+		super(id, object);
+		
+		savePanel = new AdminSavePanel<T>("buttons", this) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onSaveSubmit(target, form);
+			}
+
+			@Override
+			protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onSaveError(target, form);
+			}
+
+			@Override
+			protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onNewSubmit(target, form);
+			}
+
+			@Override
+			protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onNewError(target, form);
+			}
+
+			@Override
+			protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onRefreshSubmit(target, form);
+			}
+
+			@Override
+			protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onRefreshError(target, form);
+			}
+
+			@Override
+			protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onDeleteSubmit(target, form);
+			}
+
+			@Override
+			protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+				AdminBaseForm.this.onDeleteError(target, form);
+			}
+
+			@Override
+			protected boolean isNewBtnVisible() {
+				return AdminBaseForm.this.isNewBtnVisible();
+			}
+
+			@Override
+			protected boolean isDelBtnVisible() {
+				return AdminBaseForm.this.isDelBtnVisible();
+			}
+		};
+		add(savePanel);
+	}
+
+	/**
+	 * @see AdminBaseForm#hideNewRecord()
+	 */
+	public void hideNewRecord() {
+		savePanel.hideNewRecord();
+	}
+
+	/**
+	 * @see AdminBaseForm#showNewRecord()
+	 */
+	public void showNewRecord() {
+		savePanel.showNewRecord();
+	}
+
+	protected boolean isNewBtnVisible() {
+		return true;
+	}
+
+	protected boolean isDelBtnVisible() {
+		return true;
+	}
+	/**
+	 * invoked when user press save button
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onSaveSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when save has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onSaveError(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when new button is pressed
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onNewSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked if new has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onNewError(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when refresh button is pressed
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onRefreshSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when refresh has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onRefreshError(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when delete button is pressed
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onDeleteSubmit(AjaxRequestTarget target, Form<?> form);
+	
+	/**
+	 * invoked when delete has error
+	 * 
+	 * @param target
+	 * @param form
+	 */
+	protected abstract void onDeleteError(AjaxRequestTarget target, Form<?> form);
+	
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/SearchableDataView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/SearchableDataView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/SearchableDataView.java
index 8bc5450..ee12b8a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/SearchableDataView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/SearchableDataView.java
@@ -1,45 +1,45 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin;
-
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.markup.repeater.data.DataView;
-
-/**
- * Provides {@link SearchableDataProvider}
- * 
- * @author swagner
- * 
- * @param <T>
- */
-public abstract class SearchableDataView<T extends IDataProviderEntity> extends DataView<T> {
-	private static final long serialVersionUID = 1L;
-	private SearchableDataProvider<T> dp;
-	
-	public SearchableDataView(String id, SearchableDataProvider<T> dp) {
-		super(id, dp);
-		this.dp = dp;
-	}
-	
-	@Override
-	public SearchableDataProvider<T> getDataProvider() {
-		return dp;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.markup.repeater.data.DataView;
+
+/**
+ * Provides {@link SearchableDataProvider}
+ * 
+ * @author swagner
+ * 
+ * @param <T>
+ */
+public abstract class SearchableDataView<T extends IDataProviderEntity> extends DataView<T> {
+	private static final long serialVersionUID = 1L;
+	private SearchableDataProvider<T> dp;
+	
+	public SearchableDataView(String id, SearchableDataProvider<T> dp) {
+		super(id, dp);
+		this.dp = dp;
+	}
+	
+	@Override
+	public SearchableDataProvider<T> getDataProvider() {
+		return dp;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
index f804ba6..758890f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
@@ -1,242 +1,242 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.backup;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import java.io.File;
-import java.text.DecimalFormat;
-import java.util.Date;
-
-import org.apache.openmeetings.backup.BackupExport;
-import org.apache.openmeetings.backup.BackupImport;
-import org.apache.openmeetings.backup.ProgressHolder;
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.util.CalendarPatterns;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.web.admin.AdminPanel;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.util.AjaxDownload;
-import org.apache.openmeetings.web.util.upload.BootstrapFileUploadBehavior;
-import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
-import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.upload.FileUpload;
-import org.apache.wicket.markup.html.form.upload.FileUploadField;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.lang.Bytes;
-import org.apache.wicket.util.resource.FileResourceStream;
-import org.apache.wicket.util.time.Duration;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
-import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
-/**
- * Panel component to manage Backup Import/Export
- *
- * @author swagner
- *
- */
-public class BackupPanel extends AdminPanel {
-	private static final Logger log = Red5LoggerFactory.getLogger(BackupPanel.class, webAppRootKey);
-
-	private static final long serialVersionUID = -1L;
-
-	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
-
-	/**
-	 * Form to handle upload files
-	 *
-	 * @author swagner
-	 *
-	 */
-	private class BackupForm extends Form<Void> {
-		private static final long serialVersionUID = 1L;
-		private final FileUploadField fileUploadField;
-		private final Model<Boolean> includeFilesInBackup = Model.of(true);
-		private final AbstractAjaxTimerBehavior timer;
-		private final ProgressBar progressBar;
-		private File backupFile;
-		private Throwable th = null;
-		private boolean started = false;
-		private ProgressHolder progressHolder;
-
-		public BackupForm(String id) {
-			super(id);
-
-			// set this form to multipart mode (allways needed for uploads!)
-			setMultiPart(true);
-
-			// set max upload size in form as info text
-			Long maxBytes = getBean(ConfigurationDao.class).getMaxUploadSize();
-			double megaBytes = maxBytes.doubleValue() / 1024 / 1024;
-			DecimalFormat formatter = new DecimalFormat("#,###.00");
-			add(new Label("MaxUploadSize", formatter.format(megaBytes)));
-
-			// Add one file input field
-			fileUploadField = new FileUploadField("fileInput");
-
-			add(new CheckBox("includeFilesInBackup", includeFilesInBackup));
-
-			// Set maximum size controlled by configuration
-			setMaxSize(Bytes.bytes(maxBytes));
-
-			// Add a component to download a file without page refresh
-			final AjaxDownload download = new AjaxDownload();
-			add(download);
-			// add an download button
-			add(new AjaxButton("download", this) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onSubmit(AjaxRequestTarget target) {
-					String dateString = "backup_" + CalendarPatterns.getTimeForStreamId(new Date());
-					backupFile = new File(OmFileHelper.getUploadBackupDir(), dateString + ".zip");
-					th = null;
-					started = true;
-					progressHolder = new ProgressHolder();
-
-					timer.restart(target);
-					new Thread(new BackupProcess(getBean(BackupExport.class), includeFilesInBackup.getObject())
-						, "Openmeetings - " + dateString).start();
-
-					// repaint the feedback panel so that it is hidden
-					target.add(feedback, progressBar.setVisible(true));
-				}
-
-				@Override
-				protected void onError(AjaxRequestTarget target) {
-					// repaint the feedback panel so errors are shown
-					target.add(feedback);
-				}
-			});
-			add(timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onTimer(AjaxRequestTarget target) {
-					if (!started) {
-						timer.stop(target);
-						return;
-					}
-					if (th != null) {
-						timer.stop(target);
-						//TODO change text, localize
-						progressBar.setVisible(false);
-						feedback.error(th.getMessage());
-						target.add(feedback);
-					} else {
-						progressBar.setModelObject(progressHolder.getProgress());
-						progressBar.refresh(target);
-						//TODO add current step result as info
-					}
-				}
-			});
-			add((progressBar = new ProgressBar("dprogress", new Model<>(0)) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onComplete(AjaxRequestTarget target) {
-					timer.stop(target);
-					target.add(progressBar.setVisible(false));
-
-					download.setFileName(backupFile.getName());
-					download.setResourceStream(new FileResourceStream(backupFile));
-					download.initiate(target);
-				}
-			}).setVisible(false).setOutputMarkupPlaceholderTag(true));
-			add(fileUploadField.add(new AjaxFormSubmitBehavior(this, "change") {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onSubmit(AjaxRequestTarget target) {
-					FileUpload upload = fileUploadField.getFileUpload();
-					try {
-						if (upload == null || upload.getInputStream() == null) {
-							feedback.error("File is empty");
-							target.add(feedback);
-							return;
-						}
-						getBean(BackupImport.class).performImport(upload.getInputStream());
-					} catch (Exception e) {
-						log.error("Exception on panel backup upload ", e);
-						feedback.error(e);
-					}
-					// repaint the feedback panel so that it is hidden
-					target.add(feedback);
-				}
-
-				@Override
-				protected void onError(AjaxRequestTarget target) {
-					// repaint the feedback panel so errors are shown
-					target.add(feedback);
-				}
-			}));
-			add(new Label("cmdLineDesc", Application.getString(1505)).setEscapeModelStrings(false));
-		}
-
-		@Override
-		protected void onDetach() {
-			includeFilesInBackup.detach();
-			super.onDetach();
-		}
-
-		private class BackupProcess implements Runnable {
-			private BackupExport backup;
-			private boolean includeFiles;
-
-			public BackupProcess(BackupExport backup, boolean includeFiles) {
-				this.backup = backup;
-				this.includeFiles = includeFiles;
-				th = null;
-			}
-
-			@Override
-			public void run() {
-				try {
-					backup.performExport(backupFile, includeFiles, progressHolder);
-				} catch (Exception e) {
-					log.error("Exception on panel backup download ", e);
-					th = e;
-				}
-			}
-		}
-	}
-
-	public BackupPanel(String id) {
-		super(id);
-
-		add(feedback);
-
-		BackupForm backupForm = new BackupForm("backupUpload");
-
-		backupForm.add(new UploadProgressBar("progress", backupForm, backupForm.fileUploadField));
-
-		add(backupForm);
-		add(BootstrapFileUploadBehavior.INSTANCE);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.backup;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.util.Date;
+
+import org.apache.openmeetings.backup.BackupExport;
+import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.openmeetings.web.util.upload.BootstrapFileUploadBehavior;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
+import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.resource.FileResourceStream;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+/**
+ * Panel component to manage Backup Import/Export
+ *
+ * @author swagner
+ *
+ */
+public class BackupPanel extends AdminPanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(BackupPanel.class, webAppRootKey);
+
+	private static final long serialVersionUID = -1L;
+
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+
+	/**
+	 * Form to handle upload files
+	 *
+	 * @author swagner
+	 *
+	 */
+	private class BackupForm extends Form<Void> {
+		private static final long serialVersionUID = 1L;
+		private final FileUploadField fileUploadField;
+		private final Model<Boolean> includeFilesInBackup = Model.of(true);
+		private final AbstractAjaxTimerBehavior timer;
+		private final ProgressBar progressBar;
+		private File backupFile;
+		private Throwable th = null;
+		private boolean started = false;
+		private ProgressHolder progressHolder;
+
+		public BackupForm(String id) {
+			super(id);
+
+			// set this form to multipart mode (allways needed for uploads!)
+			setMultiPart(true);
+
+			// set max upload size in form as info text
+			Long maxBytes = getBean(ConfigurationDao.class).getMaxUploadSize();
+			double megaBytes = maxBytes.doubleValue() / 1024 / 1024;
+			DecimalFormat formatter = new DecimalFormat("#,###.00");
+			add(new Label("MaxUploadSize", formatter.format(megaBytes)));
+
+			// Add one file input field
+			fileUploadField = new FileUploadField("fileInput");
+
+			add(new CheckBox("includeFilesInBackup", includeFilesInBackup));
+
+			// Set maximum size controlled by configuration
+			setMaxSize(Bytes.bytes(maxBytes));
+
+			// Add a component to download a file without page refresh
+			final AjaxDownload download = new AjaxDownload();
+			add(download);
+			// add an download button
+			add(new AjaxButton("download", this) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target) {
+					String dateString = "backup_" + CalendarPatterns.getTimeForStreamId(new Date());
+					backupFile = new File(OmFileHelper.getUploadBackupDir(), dateString + ".zip");
+					th = null;
+					started = true;
+					progressHolder = new ProgressHolder();
+
+					timer.restart(target);
+					new Thread(new BackupProcess(getBean(BackupExport.class), includeFilesInBackup.getObject())
+						, "Openmeetings - " + dateString).start();
+
+					// repaint the feedback panel so that it is hidden
+					target.add(feedback, progressBar.setVisible(true));
+				}
+
+				@Override
+				protected void onError(AjaxRequestTarget target) {
+					// repaint the feedback panel so errors are shown
+					target.add(feedback);
+				}
+			});
+			add(timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onTimer(AjaxRequestTarget target) {
+					if (!started) {
+						timer.stop(target);
+						return;
+					}
+					if (th != null) {
+						timer.stop(target);
+						//TODO change text, localize
+						progressBar.setVisible(false);
+						feedback.error(th.getMessage());
+						target.add(feedback);
+					} else {
+						progressBar.setModelObject(progressHolder.getProgress());
+						progressBar.refresh(target);
+						//TODO add current step result as info
+					}
+				}
+			});
+			add((progressBar = new ProgressBar("dprogress", new Model<>(0)) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onComplete(AjaxRequestTarget target) {
+					timer.stop(target);
+					target.add(progressBar.setVisible(false));
+
+					download.setFileName(backupFile.getName());
+					download.setResourceStream(new FileResourceStream(backupFile));
+					download.initiate(target);
+				}
+			}).setVisible(false).setOutputMarkupPlaceholderTag(true));
+			add(fileUploadField.add(new AjaxFormSubmitBehavior(this, "change") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target) {
+					FileUpload upload = fileUploadField.getFileUpload();
+					try {
+						if (upload == null || upload.getInputStream() == null) {
+							feedback.error("File is empty");
+							target.add(feedback);
+							return;
+						}
+						getBean(BackupImport.class).performImport(upload.getInputStream());
+					} catch (Exception e) {
+						log.error("Exception on panel backup upload ", e);
+						feedback.error(e);
+					}
+					// repaint the feedback panel so that it is hidden
+					target.add(feedback);
+				}
+
+				@Override
+				protected void onError(AjaxRequestTarget target) {
+					// repaint the feedback panel so errors are shown
+					target.add(feedback);
+				}
+			}));
+			add(new Label("cmdLineDesc", Application.getString(1505)).setEscapeModelStrings(false));
+		}
+
+		@Override
+		protected void onDetach() {
+			includeFilesInBackup.detach();
+			super.onDetach();
+		}
+
+		private class BackupProcess implements Runnable {
+			private BackupExport backup;
+			private boolean includeFiles;
+
+			public BackupProcess(BackupExport backup, boolean includeFiles) {
+				this.backup = backup;
+				this.includeFiles = includeFiles;
+				th = null;
+			}
+
+			@Override
+			public void run() {
+				try {
+					backup.performExport(backupFile, includeFiles, progressHolder);
+				} catch (Exception e) {
+					log.error("Exception on panel backup download ", e);
+					th = e;
+				}
+			}
+		}
+	}
+
+	public BackupPanel(String id) {
+		super(id);
+
+		add(feedback);
+
+		BackupForm backupForm = new BackupForm("backupUpload");
+
+		backupForm.add(new UploadProgressBar("progress", backupForm, backupForm.fileUploadField));
+
+		add(backupForm);
+		add(BootstrapFileUploadBehavior.INSTANCE);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
index 5a8393e..6f11e2b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
@@ -1,143 +1,143 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.configurations;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.entity.basic.Configuration;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
-import org.apache.wicket.validation.IValidatable;
-import org.apache.wicket.validation.IValidator;
-import org.apache.wicket.validation.ValidationError;
-
-/**
- * Handle {@link Configuration} items as list and form
- *
- * @author swagner
- *
- */
-public class ConfigForm extends AdminBaseForm<Configuration> {
-	private static final long serialVersionUID = 1L;
-	private final WebMarkupContainer listContainer;
-
-	private void refresh(AjaxRequestTarget target) {
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	public ConfigForm(String id, WebMarkupContainer listContainer, Configuration configuration) {
-		super(id, new CompoundPropertyModel<>(configuration));
-		setOutputMarkupId(true);
-		this.listContainer = listContainer;
-		add(new RequiredTextField<String>("key").setLabel(Model.of(Application.getString(267))).add(new IValidator<String>(){
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void validate(IValidatable<String> validatable) {
-				Configuration c = getBean(ConfigurationDao.class).forceGet(validatable.getValue());
-				if (c != null && !c.isDeleted() && !c.getId().equals(ConfigForm.this.getModelObject().getId())) {
-					validatable.error(new ValidationError(Application.getString(1544L)));
-				}
-			}
-		}));
-		add(new TextField<String>("value").setLabel(Model.of(Application.getString(271))));
-		add(forDatePattern("updated", WEB_DATE_PATTERN));
-		add(new Label("user.login"));
-		add(new TextArea<String>("comment"));
-
-		// attach an ajax validation behavior to all form component's keydown
-		// event and throttle it down to once per second
-		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
-	}
-
-	@Override
-	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-		Configuration c = cfgDao.forceGet(getModelObject().getKey());
-		if (c != null && c.isDeleted() && !c.getId().equals(getModelObject().getId())) {
-			getModelObject().setId(c.getId());
-		}
-		setModelObject(getBean(ConfigurationDao.class).update(getModelObject(), WebSession.getUserId()));
-		hideNewRecord();
-		target.add(listContainer);
-		refresh(target);
-	}
-
-	@Override
-	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
-		this.setModelObject(new Configuration());
-		refresh(target);
-	}
-
-	@Override
-	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-		Configuration conf = getModelObject();
-		if (conf.getId() != null) {
-			conf = getBean(ConfigurationDao.class).get(conf.getId());
-		} else {
-			conf = new Configuration();
-		}
-		setModelObject(conf);
-		refresh(target);
-	}
-
-	@Override
-	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-		getBean(ConfigurationDao.class).delete(getModelObject(), WebSession.getUserId());
-		setModelObject(new Configuration());
-		target.add(listContainer);
-		refresh(target);
-	}
-
-	@Override
-	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.configurations;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidationError;
+
+/**
+ * Handle {@link Configuration} items as list and form
+ *
+ * @author swagner
+ *
+ */
+public class ConfigForm extends AdminBaseForm<Configuration> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer listContainer;
+
+	private void refresh(AjaxRequestTarget target) {
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	public ConfigForm(String id, WebMarkupContainer listContainer, Configuration configuration) {
+		super(id, new CompoundPropertyModel<>(configuration));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+		add(new RequiredTextField<String>("key").setLabel(Model.of(Application.getString(267))).add(new IValidator<String>(){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void validate(IValidatable<String> validatable) {
+				Configuration c = getBean(ConfigurationDao.class).forceGet(validatable.getValue());
+				if (c != null && !c.isDeleted() && !c.getId().equals(ConfigForm.this.getModelObject().getId())) {
+					validatable.error(new ValidationError(Application.getString(1544L)));
+				}
+			}
+		}));
+		add(new TextField<String>("value").setLabel(Model.of(Application.getString(271))));
+		add(forDatePattern("updated", WEB_DATE_PATTERN));
+		add(new Label("user.login"));
+		add(new TextArea<String>("comment"));
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		Configuration c = cfgDao.forceGet(getModelObject().getKey());
+		if (c != null && c.isDeleted() && !c.getId().equals(getModelObject().getId())) {
+			getModelObject().setId(c.getId());
+		}
+		setModelObject(getBean(ConfigurationDao.class).update(getModelObject(), WebSession.getUserId()));
+		hideNewRecord();
+		target.add(listContainer);
+		refresh(target);
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new Configuration());
+		refresh(target);
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Configuration conf = getModelObject();
+		if (conf.getId() != null) {
+			conf = getBean(ConfigurationDao.class).get(conf.getId());
+		} else {
+			conf = new Configuration();
+		}
+		setModelObject(conf);
+		refresh(target);
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		getBean(ConfigurationDao.class).delete(getModelObject(), WebSession.getUserId());
+		setModelObject(new Configuration());
+		target.add(listContainer);
+		refresh(target);
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
index c0c91d0..99de0e2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
@@ -1,94 +1,94 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.configurations;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.entity.basic.Configuration;
-import org.apache.openmeetings.web.admin.AdminPanel;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.openmeetings.web.data.DataViewContainer;
-import org.apache.openmeetings.web.data.OmOrderByBorder;
-import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-
-/**
- * add/update/delete {@link Configuration}
- *
- * @author swagner
- *
- */
-public class ConfigsPanel extends AdminPanel {
-	private static final long serialVersionUID = 1L;
-	private ConfigForm form;
-	private final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
-
-	public ConfigsPanel(String id) {
-		super(id);
-
-		SearchableDataView<Configuration> dataView = new SearchableDataView<Configuration>("configList"
-			, new SearchableDataProvider<>(ConfigurationDao.class)) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(final Item<Configuration> item) {
-				final Configuration c = item.getModelObject();
-				item.add(new Label("id"));
-				item.add(new Label("key"));
-				item.add(new Label("value"));
-				item.add(new AjaxEventBehavior("click") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
-						form.hideNewRecord();
-						form.setModelObject(c);
-						target.add(form, listContainer);
-						target.appendJavaScript("adminPanelInit();");
-					}
-				});
-				item.add(AttributeModifier.replace("class", getRowClass(c.getId(), form.getModelObject().getId())));
-			}
-		};
-		add(listContainer.add(dataView).setOutputMarkupId(true));
-		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				target.add(listContainer);
-			}
-		};
-		DataViewContainer<Configuration> container = new DataViewContainer<>(listContainer, dataView, navigator);
-		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
-			.addLink(new OmOrderByBorder<>("orderByKey", "key", container))
-			.addLink(new OmOrderByBorder<>("orderByValue", "value", container));
-		add(container.getLinks());
-		add(navigator);
-
-		form = new ConfigForm("form", listContainer, new Configuration());
-		form.showNewRecord();
-		add(form);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.configurations;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * add/update/delete {@link Configuration}
+ *
+ * @author swagner
+ *
+ */
+public class ConfigsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	private ConfigForm form;
+	private final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+
+	public ConfigsPanel(String id) {
+		super(id);
+
+		SearchableDataView<Configuration> dataView = new SearchableDataView<Configuration>("configList"
+			, new SearchableDataProvider<>(ConfigurationDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Configuration> item) {
+				final Configuration c = item.getModelObject();
+				item.add(new Label("id"));
+				item.add(new Label("key"));
+				item.add(new Label("value"));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						form.hideNewRecord();
+						form.setModelObject(c);
+						target.add(form, listContainer);
+						target.appendJavaScript("adminPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", getRowClass(c.getId(), form.getModelObject().getId())));
+			}
+		};
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Configuration> container = new DataViewContainer<>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
+			.addLink(new OmOrderByBorder<>("orderByKey", "key", container))
+			.addLink(new OmOrderByBorder<>("orderByValue", "value", container));
+		add(container.getLinks());
+		add(navigator);
+
+		form = new ConfigForm("form", listContainer, new Configuration());
+		form.showNewRecord();
+		add(form);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
index cddb3da..e07780d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
@@ -1,250 +1,250 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.groups;
-
-import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
-import static org.apache.openmeetings.util.OmFileHelper.getGroupLogo;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getRights;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.util.GroupLogoResourceReference.getUrl;
-
-import java.io.File;
-
-import org.apache.openmeetings.core.converter.ImageConverter;
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.GroupUserDao;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.util.StoredFile;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
-import org.apache.openmeetings.web.common.UploadableImagePanel;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.NumberTextField;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
-import org.wicketstuff.select2.Select2Choice;
-
-public class GroupForm extends AdminBaseForm<Group> {
-	private static final long serialVersionUID = 1L;
-	private GroupUsersPanel usersPanel;
-	private final WebMarkupContainer groupList;
-	private final Select2Choice<User> userToadd;
-	private final NumberTextField<Integer> maxFilesSize = new NumberTextField<>("maxFilesSize");
-	private final NumberTextField<Integer> maxRecordingsSize = new NumberTextField<>("maxRecordingsSize");
-	private final NumberTextField<Integer> maxRooms = new NumberTextField<>("maxRooms");
-	private final NumberTextField<Integer> recordingTtl = new NumberTextField<>("recordingTtl");
-	private final NumberTextField<Integer> reminderDays = new NumberTextField<>("reminderDays");
-	private final UploadableImagePanel logo = new UploadableImagePanel("logo") {
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		protected String getImageUrl() {
-			return getUrl(getRequestCycle(), GroupForm.this.getModelObject().getId());
-		}
-
-		@Override
-		protected void processImage(StoredFile sf, File f) throws Exception {
-			getBean(ImageConverter.class).resize(f, getGroupLogo(GroupForm.this.getModelObject().getId(), false), null, 28);
-		}
-
-		@Override
-		protected String getTitle() {
-			return getString("admin.group.form.logo");
-		}
-	};
-
-	static String formatUser(User choice) {
-		return String.format("%s [%s %s]", choice.getLogin(), choice.getFirstname(), choice.getLastname());
-	}
-
-	public GroupForm(String id, WebMarkupContainer groupList, Group group) {
-		super(id, new CompoundPropertyModel<>(group));
-		this.groupList = groupList;
-		setOutputMarkupId(true);
-
-		usersPanel = new GroupUsersPanel("users", getGroupId());
-		add(usersPanel);
-
-		add(userToadd = new Select2Choice<>("user2add", Model.of((User)null), new AdminUserChoiceProvider() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public String getDisplayValue(User choice) {
-				return formatUser(choice);
-			}
-		}));
-		userToadd.add(new AjaxFormComponentUpdatingBehavior("change") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onUpdate(AjaxRequestTarget target) {
-				Group o = GroupForm.this.getModelObject();
-				User u = userToadd.getModelObject();
-				boolean found = false;
-				if (o.getId() != null) {
-					found = null != getBean(GroupUserDao.class).getByGroupAndUser(o.getId(), u.getId());
-				}
-				if (!found && u != null) {
-					for (GroupUser ou : usersPanel.getUsers2add()) {
-						if (ou.getUser().getId().equals(u.getId())) {
-							found = true;
-							break;
-						}
-					}
-					if (!found) {
-						GroupUser ou = new GroupUser(o, u);
-						usersPanel.getUsers2add().add(ou);
-
-						userToadd.setModelObject(null);
-						target.add(usersPanel, userToadd);
-					}
-				}
-			}
-		});
-		// attach an ajax validation behavior to all form component's keydown
-		// event and throttle it down to once per second
-		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
-	}
-
-	@Override
-	protected boolean isNewBtnVisible() {
-		return !hasGroupAdminLevel(getRights());
-	}
-
-	@Override
-	protected boolean isDelBtnVisible() {
-		return !hasGroupAdminLevel(getRights());
-	}
-
-	@Override
-	protected void onInitialize() {
-		super.onInitialize();
-		final boolean isGroupAdmin = hasGroupAdminLevel(getRights());
-		userToadd.setEnabled(!isGroupAdmin);
-		add(new RequiredTextField<String>("name").setLabel(Model.of(getString("165"))));
-		add(logo);
-		add(new TextField<String>("tag").setLabel(Model.of(getString("admin.group.form.tag"))));
-		add(new CheckBox("restricted").setLabel(Model.of(getString("restricted.group.files"))));
-		add(new AjaxCheckBox("limited") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onUpdate(AjaxRequestTarget target) {
-				target.add(
-					maxFilesSize.setEnabled(getModelObject())
-					, maxRecordingsSize.setEnabled(getModelObject())
-					, maxRooms.setEnabled(getModelObject())
-					, recordingTtl.setEnabled(getModelObject())
-					, reminderDays.setEnabled(getModelObject())
-				);
-			}
-		}.setLabel(Model.of(getString("admin.group.form.limited"))));
-		add(maxFilesSize.setLabel(Model.of(getString("admin.group.form.maxFilesSize"))).setEnabled(false).setOutputMarkupId(true));
-		add(maxRecordingsSize.setLabel(Model.of(getString("admin.group.form.maxRecordingsSize"))).setEnabled(false).setOutputMarkupId(true));
-		add(maxRooms.setLabel(Model.of(getString("admin.group.form.maxRooms"))).setEnabled(false).setOutputMarkupId(true));
-		add(recordingTtl.setLabel(Model.of(getString("admin.group.form.recordingTtl"))).setEnabled(false).setOutputMarkupId(true));
-		add(reminderDays.setLabel(Model.of(getString("admin.group.form.reminderDays"))).setEnabled(false).setOutputMarkupId(true));
-	}
-
-	public void updateView(AjaxRequestTarget target) {
-		userToadd.setModelObject(null);
-		usersPanel.update(getGroupId());
-		maxFilesSize.setEnabled(getModelObject().isLimited());
-		maxRecordingsSize.setEnabled(getModelObject().isLimited());
-		maxRooms.setEnabled(getModelObject().isLimited());
-		recordingTtl.setEnabled(getModelObject().isLimited());
-		reminderDays.setEnabled(getModelObject().isLimited());
-		logo.update();
-		target.add(this, groupList);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	private long getGroupId() {
-		return getModelObject().getId() != null ? getModelObject().getId() : 0;
-	}
-
-	@Override
-	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {
-		setModelObject(new Group());
-		updateView(target);
-	}
-
-	@Override
-	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-		Group org = getModelObject();
-		if (org.getId() != null) {
-			org = getBean(GroupDao.class).get(org.getId());
-		} else {
-			org = new Group();
-		}
-		setModelObject(org);
-		updateView(target);
-	}
-
-	@Override
-	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-		getBean(GroupDao.class).delete(getModelObject(), getUserId());
-		setModelObject(new Group());
-		updateView(target);
-	}
-
-	@Override
-	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-		Group o = getModelObject();
-		o = getBean(GroupDao.class).update(o, getUserId());
-		setModelObject(o);
-		for (GroupUser grpUser : usersPanel.getUsers2add()) {
-			GroupUsersPanel.update(grpUser);
-		}
-		hideNewRecord();
-		updateView(target);
-	}
-
-	@Override
-	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.groups;
+
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
+import static org.apache.openmeetings.util.OmFileHelper.getGroupLogo;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.GroupLogoResourceReference.getUrl;
+
+import java.io.File;
+
+import org.apache.openmeetings.core.converter.ImageConverter;
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.GroupUserDao;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
+import org.apache.openmeetings.web.common.UploadableImagePanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.NumberTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+import org.wicketstuff.select2.Select2Choice;
+
+public class GroupForm extends AdminBaseForm<Group> {
+	private static final long serialVersionUID = 1L;
+	private GroupUsersPanel usersPanel;
+	private final WebMarkupContainer groupList;
+	private final Select2Choice<User> userToadd;
+	private final NumberTextField<Integer> maxFilesSize = new NumberTextField<>("maxFilesSize");
+	private final NumberTextField<Integer> maxRecordingsSize = new NumberTextField<>("maxRecordingsSize");
+	private final NumberTextField<Integer> maxRooms = new NumberTextField<>("maxRooms");
+	private final NumberTextField<Integer> recordingTtl = new NumberTextField<>("recordingTtl");
+	private final NumberTextField<Integer> reminderDays = new NumberTextField<>("reminderDays");
+	private final UploadableImagePanel logo = new UploadableImagePanel("logo") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected String getImageUrl() {
+			return getUrl(getRequestCycle(), GroupForm.this.getModelObject().getId());
+		}
+
+		@Override
+		protected void processImage(StoredFile sf, File f) throws Exception {
+			getBean(ImageConverter.class).resize(f, getGroupLogo(GroupForm.this.getModelObject().getId(), false), null, 28);
+		}
+
+		@Override
+		protected String getTitle() {
+			return getString("admin.group.form.logo");
+		}
+	};
+
+	static String formatUser(User choice) {
+		return String.format("%s [%s %s]", choice.getLogin(), choice.getFirstname(), choice.getLastname());
+	}
+
+	public GroupForm(String id, WebMarkupContainer groupList, Group group) {
+		super(id, new CompoundPropertyModel<>(group));
+		this.groupList = groupList;
+		setOutputMarkupId(true);
+
+		usersPanel = new GroupUsersPanel("users", getGroupId());
+		add(usersPanel);
+
+		add(userToadd = new Select2Choice<>("user2add", Model.of((User)null), new AdminUserChoiceProvider() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public String getDisplayValue(User choice) {
+				return formatUser(choice);
+			}
+		}));
+		userToadd.add(new AjaxFormComponentUpdatingBehavior("change") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				Group o = GroupForm.this.getModelObject();
+				User u = userToadd.getModelObject();
+				boolean found = false;
+				if (o.getId() != null) {
+					found = null != getBean(GroupUserDao.class).getByGroupAndUser(o.getId(), u.getId());
+				}
+				if (!found && u != null) {
+					for (GroupUser ou : usersPanel.getUsers2add()) {
+						if (ou.getUser().getId().equals(u.getId())) {
+							found = true;
+							break;
+						}
+					}
+					if (!found) {
+						GroupUser ou = new GroupUser(o, u);
+						usersPanel.getUsers2add().add(ou);
+
+						userToadd.setModelObject(null);
+						target.add(usersPanel, userToadd);
+					}
+				}
+			}
+		});
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+
+	@Override
+	protected boolean isNewBtnVisible() {
+		return !hasGroupAdminLevel(getRights());
+	}
+
+	@Override
+	protected boolean isDelBtnVisible() {
+		return !hasGroupAdminLevel(getRights());
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		final boolean isGroupAdmin = hasGroupAdminLevel(getRights());
+		userToadd.setEnabled(!isGroupAdmin);
+		add(new RequiredTextField<String>("name").setLabel(Model.of(getString("165"))));
+		add(logo);
+		add(new TextField<String>("tag").setLabel(Model.of(getString("admin.group.form.tag"))));
+		add(new CheckBox("restricted").setLabel(Model.of(getString("restricted.group.files"))));
+		add(new AjaxCheckBox("limited") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				target.add(
+					maxFilesSize.setEnabled(getModelObject())
+					, maxRecordingsSize.setEnabled(getModelObject())
+					, maxRooms.setEnabled(getModelObject())
+					, recordingTtl.setEnabled(getModelObject())
+					, reminderDays.setEnabled(getModelObject())
+				);
+			}
+		}.setLabel(Model.of(getString("admin.group.form.limited"))));
+		add(maxFilesSize.setLabel(Model.of(getString("admin.group.form.maxFilesSize"))).setEnabled(false).setOutputMarkupId(true));
+		add(maxRecordingsSize.setLabel(Model.of(getString("admin.group.form.maxRecordingsSize"))).setEnabled(false).setOutputMarkupId(true));
+		add(maxRooms.setLabel(Model.of(getString("admin.group.form.maxRooms"))).setEnabled(false).setOutputMarkupId(true));
+		add(recordingTtl.setLabel(Model.of(getString("admin.group.form.recordingTtl"))).setEnabled(false).setOutputMarkupId(true));
+		add(reminderDays.setLabel(Model.of(getString("admin.group.form.reminderDays"))).setEnabled(false).setOutputMarkupId(true));
+	}
+
+	public void updateView(AjaxRequestTarget target) {
+		userToadd.setModelObject(null);
+		usersPanel.update(getGroupId());
+		maxFilesSize.setEnabled(getModelObject().isLimited());
+		maxRecordingsSize.setEnabled(getModelObject().isLimited());
+		maxRooms.setEnabled(getModelObject().isLimited());
+		recordingTtl.setEnabled(getModelObject().isLimited());
+		reminderDays.setEnabled(getModelObject().isLimited());
+		logo.update();
+		target.add(this, groupList);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	private long getGroupId() {
+		return getModelObject().getId() != null ? getModelObject().getId() : 0;
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {
+		setModelObject(new Group());
+		updateView(target);
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Group org = getModelObject();
+		if (org.getId() != null) {
+			org = getBean(GroupDao.class).get(org.getId());
+		} else {
+			org = new Group();
+		}
+		setModelObject(org);
+		updateView(target);
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		getBean(GroupDao.class).delete(getModelObject(), getUserId());
+		setModelObject(new Group());
+		updateView(target);
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		Group o = getModelObject();
+		o = getBean(GroupDao.class).update(o, getUserId());
+		setModelObject(o);
+		for (GroupUser grpUser : usersPanel.getUsers2add()) {
+			GroupUsersPanel.update(grpUser);
+		}
+		hideNewRecord();
+		updateView(target);
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
index 11bce13..3381830 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div class="usergroupspanel">
-			<span wicket:id="navigator">[dataview navigator]</span>
-			<table class="adminListTable" style="min-width: 440px; max-width: 440px" >
-				<tr>
-					<th class="ui-widget-header" style="width: 34px; max-width: 34px; overflow: hidden;" wicket:message="title:98"><wicket:message key="98" /></th>
-					<th class="ui-widget-header" style="width: 360px"><wicket:message key="177" /></th>
-					<th class="ui-widget-header" style="width: 34px"><wicket:message key="275" /></th>
-				</tr>
-			</table>
-			<div class="tableWrapper" style="width: 460px; height: 250px;">
-				<table class="adminListTable" style="min-width: 440px; max-width: 440px">
-					<tbody>
-						<tr wicket:id="userList" class="ui-widget-content">
-							<td style="width: 34px"><input type="checkbox" wicket:id="isModerator"/></td>
-							<td style="width: 360px"><div style="width: 360px"><span wicket:id="label"></span></div></td>
-							<td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"></div></div></td>
-						</tr>
-					</tbody>
-				</table>
-			</div>
-		</div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div class="usergroupspanel">
+			<span wicket:id="navigator">[dataview navigator]</span>
+			<table class="adminListTable" style="min-width: 440px; max-width: 440px" >
+				<tr>
+					<th class="ui-widget-header" style="width: 34px; max-width: 34px; overflow: hidden;" wicket:message="title:98"><wicket:message key="98" /></th>
+					<th class="ui-widget-header" style="width: 360px"><wicket:message key="177" /></th>
+					<th class="ui-widget-header" style="width: 34px"><wicket:message key="275" /></th>
+				</tr>
+			</table>
+			<div class="tableWrapper" style="width: 460px; height: 250px;">
+				<table class="adminListTable" style="min-width: 440px; max-width: 440px">
+					<tbody>
+						<tr wicket:id="userList" class="ui-widget-content">
+							<td style="width: 34px"><input type="checkbox" wicket:id="isModerator"/></td>
+							<td style="width: 360px"><div style="width: 360px"><span wicket:id="label"></span></div></td>
+							<td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"></div></div></td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</wicket:panel>
+</html>


[11/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/red5sip-integration_2.0.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/red5sip-integration_2.0.xml b/openmeetings-server/src/site/xdoc/red5sip-integration_2.0.xml
index 1e1d606..e3b0660 100644
--- a/openmeetings-server/src/site/xdoc/red5sip-integration_2.0.xml
+++ b/openmeetings-server/src/site/xdoc/red5sip-integration_2.0.xml
@@ -1,179 +1,179 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>SIP-Transport Integration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="SIP-Transport Integration">
-			<p>
-				You need minimum version 2.0 of Apache OpenMeetings to apply this guide!
-			</p>
-			<p>
-				Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 10.04.
-			</p>
-		</section>
-
-        <section name="Setup Asterisk">
-			<div>
-                Run the commands
-				<source>
-<![CDATA[
-sudo apt-get update
-sudo apt-get install asterisk asterisk-mysql
-]]>
-				</source>
-            </div>
-            <div>
-                Ubuntu 10.04 has broken asterisk-mysql version. For other distribution next commands not needed:
-				<source>
-<![CDATA[
-aptitude purge asterisk-mysql
-cd /tmp
-apt-get build-dep asterisk-mysql
-apt-get -b source asterisk-mysql
-dpkg -i asterisk-mysql_1.6.2.0-1_i386.deb
-]]>
-				</source>
-            </div>
-            <div>
-                Enable asterisk mysql realtime module:<br/><br/>
-                Add string
-				<source>
-<![CDATA[
-load => res_config_mysql.so
-]]>
-				</source>
-                to the /etc/asterisk/modules.conf into the "modules" section.
-            </div>
-            <div>
-                Configure mysql realtime module:<br/><br/>
-
-                Create file /etc/asterisk/res_mysql.conf and add lines:
-				<source>
-<![CDATA[
-[general]
-dbhost=127.0.0.1
-dbname=openmeetings
-dbuser=root
-dbpass=
-dbport=3306
-]]>
-				</source>
-            </div>
-            <div>
-                Add next lines into the /etc/asterisk/extconfig.conf:
-				<source>
-<![CDATA[
-[settings]
-sipusers => mysql,general,sipusers
-sippeers => mysql,general,sipusers
-extensions => mysql,general,extensions
-meetme => mysql,general,meetme
-]]>
-				</source>
-            </div>
-            <div>
-                Add next lines into the /etc/asterisk/extensions.conf:
-				<source>
-<![CDATA[
-[rooms]
-switch => Realtime/@
-]]>
-				</source>
-            </div>
-
-            <div>
-                Restart asterisk:
-				<source>
-<![CDATA[
-service asterisk restart
-]]>
-				</source>
-                Insert, for example, SIP user with name 'test':
-				<source>
-<![CDATA[
-INSERT INTO sipusers (allow, context, disallow, host, name, secret) VALUES ('ulaw' , 'rooms', NULL, 'dynamic' , 'test', '12345');
-]]>
-				</source>
-            </div>
-		</section>
-
-        <section name="Setup red5sip transport">
-            <div>
-                Download red5sip from<tt>http://red5phone.googlecode.com/svn/branches/red5sip</tt>
-            </div>
-            <p>
-                Build with Apache Ant
-            </p>
-            <div>
-                Install jsvc:
-				<source>
-<![CDATA[
-apt-get install jsvc
-]]>
-				</source>
-            </div>
-            <div>
-                Insert proper values to the /opt/red5sip/settings.properties
-
-				<source>
-<![CDATA[
-red5.host - red5 server address (127.0.0.1)
-sip.obproxy - asterisk adderss (127.0.0.1)
-sip.phone - sip phone number (test)
-sip.authid - sip auth id (test)
-sip.secret - sip password (12345)
-sip.realm - sip realm, "asterisk" by default
-sip.proxy -
-rooms - ids of openmeetings rooms, can be, for example, 2,3,5,6
-]]>
-				</source>
-            </div>
-            <div>
-                Add red5sip to autostart:
-				<source>
-<![CDATA[
-ln -s /opt/red5sip/red5sip.sh /etc/init.d/red5sip
-chmod a+x /etc/init.d/red5sip
-update-rc.d /etc/init.d/red5sip defaults
-]]>
-				</source>
-            </div>
-            <div>
-                Start openmeetings
-				<source>
-<![CDATA[
-service red5 start
-]]>
-				</source>
-            </div>
-            <div>
-                Start red5sip
-				<source>
-<![CDATA[
-service red5sip start
-]]>
-				</source>
-            </div>
-        </section>
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>SIP-Transport Integration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="SIP-Transport Integration">
+			<p>
+				You need minimum version 2.0 of Apache OpenMeetings to apply this guide!
+			</p>
+			<p>
+				Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 10.04.
+			</p>
+		</section>
+
+        <section name="Setup Asterisk">
+			<div>
+                Run the commands
+				<source>
+<![CDATA[
+sudo apt-get update
+sudo apt-get install asterisk asterisk-mysql
+]]>
+				</source>
+            </div>
+            <div>
+                Ubuntu 10.04 has broken asterisk-mysql version. For other distribution next commands not needed:
+				<source>
+<![CDATA[
+aptitude purge asterisk-mysql
+cd /tmp
+apt-get build-dep asterisk-mysql
+apt-get -b source asterisk-mysql
+dpkg -i asterisk-mysql_1.6.2.0-1_i386.deb
+]]>
+				</source>
+            </div>
+            <div>
+                Enable asterisk mysql realtime module:<br/><br/>
+                Add string
+				<source>
+<![CDATA[
+load => res_config_mysql.so
+]]>
+				</source>
+                to the /etc/asterisk/modules.conf into the "modules" section.
+            </div>
+            <div>
+                Configure mysql realtime module:<br/><br/>
+
+                Create file /etc/asterisk/res_mysql.conf and add lines:
+				<source>
+<![CDATA[
+[general]
+dbhost=127.0.0.1
+dbname=openmeetings
+dbuser=root
+dbpass=
+dbport=3306
+]]>
+				</source>
+            </div>
+            <div>
+                Add next lines into the /etc/asterisk/extconfig.conf:
+				<source>
+<![CDATA[
+[settings]
+sipusers => mysql,general,sipusers
+sippeers => mysql,general,sipusers
+extensions => mysql,general,extensions
+meetme => mysql,general,meetme
+]]>
+				</source>
+            </div>
+            <div>
+                Add next lines into the /etc/asterisk/extensions.conf:
+				<source>
+<![CDATA[
+[rooms]
+switch => Realtime/@
+]]>
+				</source>
+            </div>
+
+            <div>
+                Restart asterisk:
+				<source>
+<![CDATA[
+service asterisk restart
+]]>
+				</source>
+                Insert, for example, SIP user with name 'test':
+				<source>
+<![CDATA[
+INSERT INTO sipusers (allow, context, disallow, host, name, secret) VALUES ('ulaw' , 'rooms', NULL, 'dynamic' , 'test', '12345');
+]]>
+				</source>
+            </div>
+		</section>
+
+        <section name="Setup red5sip transport">
+            <div>
+                Download red5sip from<tt>http://red5phone.googlecode.com/svn/branches/red5sip</tt>
+            </div>
+            <p>
+                Build with Apache Ant
+            </p>
+            <div>
+                Install jsvc:
+				<source>
+<![CDATA[
+apt-get install jsvc
+]]>
+				</source>
+            </div>
+            <div>
+                Insert proper values to the /opt/red5sip/settings.properties
+
+				<source>
+<![CDATA[
+red5.host - red5 server address (127.0.0.1)
+sip.obproxy - asterisk adderss (127.0.0.1)
+sip.phone - sip phone number (test)
+sip.authid - sip auth id (test)
+sip.secret - sip password (12345)
+sip.realm - sip realm, "asterisk" by default
+sip.proxy -
+rooms - ids of openmeetings rooms, can be, for example, 2,3,5,6
+]]>
+				</source>
+            </div>
+            <div>
+                Add red5sip to autostart:
+				<source>
+<![CDATA[
+ln -s /opt/red5sip/red5sip.sh /etc/init.d/red5sip
+chmod a+x /etc/init.d/red5sip
+update-rc.d /etc/init.d/red5sip defaults
+]]>
+				</source>
+            </div>
+            <div>
+                Start openmeetings
+				<source>
+<![CDATA[
+service red5 start
+]]>
+				</source>
+            </div>
+            <div>
+                Start red5sip
+				<source>
+<![CDATA[
+service red5sip start
+]]>
+				</source>
+            </div>
+        </section>
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/themes-and-branding.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/themes-and-branding.xml b/openmeetings-server/src/site/xdoc/themes-and-branding.xml
index ac73b29..fb27844 100644
--- a/openmeetings-server/src/site/xdoc/themes-and-branding.xml
+++ b/openmeetings-server/src/site/xdoc/themes-and-branding.xml
@@ -1,61 +1,61 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Theme and color</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="Available since Apache OpenMeetings 2.0">
-			<p>
-				Themes are only available starting with Openmeetings 2.x.
-				<br />
-				There are also more general client side configuration like port
-				configuration. Those configs are stored in the public/config.xml
-			</p>
-		</section>
-		<section name="Editing the theme">
-			<p>To modify default theme used by OM</p>
-			<ul>
-				<li>please open following file in the Git:<br/>
-					<a
-						href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/css/theme_om/jquery-ui.css;hb=HEAD"
-						target="_blank" rel="nofollow">https://git-wip-us.apache.org/repos/asf/openmeetings.git/?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/css/theme_om/jquery-ui.css;hb=HEAD
-					</a><br/>
-					Or if you already installed OpenMeetings on your machine at:<br />
-					<tt>/webapps/openmeetings/css/theme_om/jquery-ui.css</tt>
-				</li>
-				<li>follow the link next to "To view and modify this theme, visit" text in css comments</li>
-			</ul>
-			<p>
-				The file contains border, background and font color definitions as
-				well as paths to icons that are loaded at runtime.
-				<br />
-				You can change the theme at runtime and just reload the browser
-				(eventually clear the browser cache) to see updates based on
-				modification in your theme.
-			</p>
-			<p>All other elements might be styled by modifying CSS files in <tt>/webapps/openmeetings/css</tt> folder</p>
-		</section>
-		<section name="Creating custom CSS file">
-			<ol>
-				<li>create <tt>webapps/openmeetings/css/custom.css</tt> file</li>
-				<li>open <tt>webapps/openmeetings/WEB-INF/classes/org/apache/openmeetings/web/pages/BasePage.html</tt> add link to your new CSS file (as last link)</li>
-			</ol>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Theme and color</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="Available since Apache OpenMeetings 2.0">
+			<p>
+				Themes are only available starting with Openmeetings 2.x.
+				<br />
+				There are also more general client side configuration like port
+				configuration. Those configs are stored in the public/config.xml
+			</p>
+		</section>
+		<section name="Editing the theme">
+			<p>To modify default theme used by OM</p>
+			<ul>
+				<li>please open following file in the Git:<br/>
+					<a
+						href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/css/theme_om/jquery-ui.css;hb=HEAD"
+						target="_blank" rel="nofollow">https://git-wip-us.apache.org/repos/asf/openmeetings.git/?p=openmeetings.git;a=blob;f=openmeetings-web/src/main/webapp/css/theme_om/jquery-ui.css;hb=HEAD
+					</a><br/>
+					Or if you already installed OpenMeetings on your machine at:<br />
+					<tt>/webapps/openmeetings/css/theme_om/jquery-ui.css</tt>
+				</li>
+				<li>follow the link next to "To view and modify this theme, visit" text in css comments</li>
+			</ul>
+			<p>
+				The file contains border, background and font color definitions as
+				well as paths to icons that are loaded at runtime.
+				<br />
+				You can change the theme at runtime and just reload the browser
+				(eventually clear the browser cache) to see updates based on
+				modification in your theme.
+			</p>
+			<p>All other elements might be styled by modifying CSS files in <tt>/webapps/openmeetings/css</tt> folder</p>
+		</section>
+		<section name="Creating custom CSS file">
+			<ol>
+				<li>create <tt>webapps/openmeetings/css/custom.css</tt> file</li>
+				<li>open <tt>webapps/openmeetings/WEB-INF/classes/org/apache/openmeetings/web/pages/BasePage.html</tt> add link to your new CSS file (as last link)</li>
+			</ol>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/voip-sip-integration.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/voip-sip-integration.xml b/openmeetings-server/src/site/xdoc/voip-sip-integration.xml
index 9369ee7..56361cb 100644
--- a/openmeetings-server/src/site/xdoc/voip-sip-integration.xml
+++ b/openmeetings-server/src/site/xdoc/voip-sip-integration.xml
@@ -1,69 +1,69 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>VoIP and SIP Integration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="VoIP and SIP Integration">
-
-			<p>
-				There are multiple ways to integrate with VoIP and or SIP.
-				OpenMeetings does not provide out of the box a ready to run VoIP
-				integration / integration to cell phone or usual land lane.
-				The
-				nature of such integrations is that it depends heavily on the
-				infrastructure that you are using and where you would like to
-				integrate OpenMeetings into.
-				<br />
-				<br />
-				It also depends on a number of factors of which OpenMeetings is
-				impossible to set up for you, for example setting up your VoIP
-				server or provide you with a range of telephone numbers reserved for
-				conference calls in your national phone network.
-				Such an integration
-				project is likely to become a consulting job for a
-				telecommunications consultant.
-				<br />
-				<br />
-				To get help on the integration you can contact the
-				<a href="mail-lists.html">mailing lists</a>
-				or for example somebody from the list of
-				<a href="commercial-support.html">commercial support</a>
-				.
-                <br/><br/>
-                <a href="red5sip-integration_2.0.html">
-                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.0
-                </a>.<br/>
-                <a href="red5sip-integration_2.1.html">
-                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.1
-                </a>.<br/>
-                <a href="red5sip-integration_3.0.html">
-                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 3.0
-                </a>.<br/>
-                <a href="red5sip-integration_3.1.html">
-                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 3.1+
-                </a>.<br/>
-			</p>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>VoIP and SIP Integration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="VoIP and SIP Integration">
+
+			<p>
+				There are multiple ways to integrate with VoIP and or SIP.
+				OpenMeetings does not provide out of the box a ready to run VoIP
+				integration / integration to cell phone or usual land lane.
+				The
+				nature of such integrations is that it depends heavily on the
+				infrastructure that you are using and where you would like to
+				integrate OpenMeetings into.
+				<br />
+				<br />
+				It also depends on a number of factors of which OpenMeetings is
+				impossible to set up for you, for example setting up your VoIP
+				server or provide you with a range of telephone numbers reserved for
+				conference calls in your national phone network.
+				Such an integration
+				project is likely to become a consulting job for a
+				telecommunications consultant.
+				<br />
+				<br />
+				To get help on the integration you can contact the
+				<a href="mail-lists.html">mailing lists</a>
+				or for example somebody from the list of
+				<a href="commercial-support.html">commercial support</a>
+				.
+                <br/><br/>
+                <a href="red5sip-integration_2.0.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.0
+                </a>.<br/>
+                <a href="red5sip-integration_2.1.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.1
+                </a>.<br/>
+                <a href="red5sip-integration_3.0.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 3.0
+                </a>.<br/>
+                <a href="red5sip-integration_3.1.html">
+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 3.1+
+                </a>.<br/>
+			</p>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
index 400cb83..5dbdd2b 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
@@ -1,179 +1,179 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.service.quartz.scheduler;
-
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
-import static org.apache.openmeetings.util.OmFileHelper.TEST_SETUP_PREFIX;
-import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.util.Map;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache;
-import org.apache.openmeetings.core.session.SessionManager;
-import org.apache.openmeetings.db.dao.server.SessiondataDao;
-import org.apache.openmeetings.db.dto.room.Whiteboard;
-import org.apache.openmeetings.db.dto.room.Whiteboards;
-import org.apache.openmeetings.util.InitializationContainer;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class CleanupJob extends AbstractJob {
-	private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
-	private long sessionTimeout = 30 * 60 * 1000L;
-	private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
-	private long roomFilesTtl = 60 * 60 * 1000L; // 1 hour
-
-	@Autowired
-	private SessiondataDao sessionDao;
-	@Autowired
-	private SessionManager sessionManager;
-	@Autowired
-	private WhiteboardCache wbManager;
-
-	public long getSessionTimeout() {
-		return sessionTimeout;
-	}
-
-	public void setSessionTimeout(long sessionTimeout) {
-		this.sessionTimeout = sessionTimeout;
-	}
-
-	public long getTestSetupTimeout() {
-		return testSetupTimeout;
-	}
-
-	public void setTestSetupTimeout(long testSetupTimeout) {
-		this.testSetupTimeout = testSetupTimeout;
-	}
-
-	public long getRoomFilesTtl() {
-		return roomFilesTtl;
-	}
-
-	public void setRoomFilesTtl(long roomFilesTtl) {
-		this.roomFilesTtl = roomFilesTtl;
-	}
-
-	public void cleanTestSetup() {
-		log.debug("CleanupJob.cleanTestSetup");
-		if (!InitializationContainer.initComplete) {
-			return;
-		}
-		try {
-			//FIXME need to move all these staff to helper
-			File[] folders = getStreamsDir().listFiles();
-			if (folders != null) {
-				for (File folder : folders) {
-					if (folder.isDirectory()) {
-						File[] files = folder.listFiles(new FileFilter() {
-							@Override
-							public boolean accept(File file) {
-								return file.getName().startsWith(TEST_SETUP_PREFIX);
-							}
-						});
-						if (files != null) {
-							for (File file : files) {
-								if (file.isFile() && file.lastModified() + testSetupTimeout < System.currentTimeMillis()) {
-									log.debug("expired TEST SETUP found: " + file.getCanonicalPath());
-									file.delete();
-								}
-							}
-						}
-					}
-				}
-			}
-		} catch (Exception e) {
-			log.error("Unexpected exception while processing tests setup videous.", e);
-		}
-	}
-
-	public void cleanRoomFiles() {
-		log.debug("CleanupJob.cleanRoomFiles");
-		if (!InitializationContainer.initComplete) {
-			return;
-		}
-		try {
-			//FIXME need to move all these staff to helper
-			File[] folders = getStreamsDir().listFiles();
-			if (folders != null) {
-				for (File folder : folders) {
-					Long roomId = null;
-					if (NumberUtils.isCreatable(folder.getName())) {
-						roomId = Long.valueOf(folder.getName());
-						Whiteboards wbList = wbManager.get(roomId);
-						for (Map.Entry<Long, Whiteboard> e : wbList.getWhiteboards().entrySet()) {
-							if (!e.getValue().getRoomItems().isEmpty()) {
-								roomId = null;
-								break;
-							}
-						}
-					}
-					if (folder.isDirectory() && roomId != null && sessionManager.getClientListByRoom(roomId).isEmpty()) {
-						File[] files = folder.listFiles();
-						//TODO need to rework this and remove hardcodings
-						if (files != null) {
-							for (File file : files) {
-								if (file.isFile() && file.lastModified() + roomFilesTtl < System.currentTimeMillis()) {
-									log.debug("Room files are too old and no users in the room: " + roomId);
-									FileUtils.deleteDirectory(folder);
-									break;
-								}
-							}
-						}
-					}
-				}
-			}
-		} catch (Exception e) {
-			log.error("Unexpected exception while processing tests setup videous.", e);
-		}
-	}
-
-	public void cleanSessions() {
-		log.trace("CleanupJob.cleanSessions");
-		if (!InitializationContainer.initComplete) {
-			return;
-		}
-		try {
-			// TODO Generate report
-			sessionDao.clearSessionTable(sessionTimeout);
-		} catch (Exception err){
-			log.error("execute",err);
-		}
-	}
-
-	public void cleanExpiredRecordings() {
-		log.debug("CleanupJob.cleanExpiredRecordings");
-		processExpiringRecordings(true, (rec, days) -> {
-			if (days < 0) {
-				log.debug("cleanExpiredRecordings:: following recording will be deleted {}", rec);
-				File f = rec.getFile(EXTENSION_MP4);
-				if (f != null && f.exists()) {
-					f.delete();
-				}
-				recordingDao.delete(rec);
-			}
-		});
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.service.quartz.scheduler;
+
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.TEST_SETUP_PREFIX;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache;
+import org.apache.openmeetings.core.session.SessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dto.room.Whiteboard;
+import org.apache.openmeetings.db.dto.room.Whiteboards;
+import org.apache.openmeetings.util.InitializationContainer;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class CleanupJob extends AbstractJob {
+	private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
+	private long sessionTimeout = 30 * 60 * 1000L;
+	private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
+	private long roomFilesTtl = 60 * 60 * 1000L; // 1 hour
+
+	@Autowired
+	private SessiondataDao sessionDao;
+	@Autowired
+	private SessionManager sessionManager;
+	@Autowired
+	private WhiteboardCache wbManager;
+
+	public long getSessionTimeout() {
+		return sessionTimeout;
+	}
+
+	public void setSessionTimeout(long sessionTimeout) {
+		this.sessionTimeout = sessionTimeout;
+	}
+
+	public long getTestSetupTimeout() {
+		return testSetupTimeout;
+	}
+
+	public void setTestSetupTimeout(long testSetupTimeout) {
+		this.testSetupTimeout = testSetupTimeout;
+	}
+
+	public long getRoomFilesTtl() {
+		return roomFilesTtl;
+	}
+
+	public void setRoomFilesTtl(long roomFilesTtl) {
+		this.roomFilesTtl = roomFilesTtl;
+	}
+
+	public void cleanTestSetup() {
+		log.debug("CleanupJob.cleanTestSetup");
+		if (!InitializationContainer.initComplete) {
+			return;
+		}
+		try {
+			//FIXME need to move all these staff to helper
+			File[] folders = getStreamsDir().listFiles();
+			if (folders != null) {
+				for (File folder : folders) {
+					if (folder.isDirectory()) {
+						File[] files = folder.listFiles(new FileFilter() {
+							@Override
+							public boolean accept(File file) {
+								return file.getName().startsWith(TEST_SETUP_PREFIX);
+							}
+						});
+						if (files != null) {
+							for (File file : files) {
+								if (file.isFile() && file.lastModified() + testSetupTimeout < System.currentTimeMillis()) {
+									log.debug("expired TEST SETUP found: " + file.getCanonicalPath());
+									file.delete();
+								}
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			log.error("Unexpected exception while processing tests setup videous.", e);
+		}
+	}
+
+	public void cleanRoomFiles() {
+		log.debug("CleanupJob.cleanRoomFiles");
+		if (!InitializationContainer.initComplete) {
+			return;
+		}
+		try {
+			//FIXME need to move all these staff to helper
+			File[] folders = getStreamsDir().listFiles();
+			if (folders != null) {
+				for (File folder : folders) {
+					Long roomId = null;
+					if (NumberUtils.isCreatable(folder.getName())) {
+						roomId = Long.valueOf(folder.getName());
+						Whiteboards wbList = wbManager.get(roomId);
+						for (Map.Entry<Long, Whiteboard> e : wbList.getWhiteboards().entrySet()) {
+							if (!e.getValue().getRoomItems().isEmpty()) {
+								roomId = null;
+								break;
+							}
+						}
+					}
+					if (folder.isDirectory() && roomId != null && sessionManager.getClientListByRoom(roomId).isEmpty()) {
+						File[] files = folder.listFiles();
+						//TODO need to rework this and remove hardcodings
+						if (files != null) {
+							for (File file : files) {
+								if (file.isFile() && file.lastModified() + roomFilesTtl < System.currentTimeMillis()) {
+									log.debug("Room files are too old and no users in the room: " + roomId);
+									FileUtils.deleteDirectory(folder);
+									break;
+								}
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			log.error("Unexpected exception while processing tests setup videous.", e);
+		}
+	}
+
+	public void cleanSessions() {
+		log.trace("CleanupJob.cleanSessions");
+		if (!InitializationContainer.initComplete) {
+			return;
+		}
+		try {
+			// TODO Generate report
+			sessionDao.clearSessionTable(sessionTimeout);
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+
+	public void cleanExpiredRecordings() {
+		log.debug("CleanupJob.cleanExpiredRecordings");
+		processExpiringRecordings(true, (rec, days) -> {
+			if (days < 0) {
+				log.debug("cleanExpiredRecordings:: following recording will be deleted {}", rec);
+				File f = rec.getFile(EXTENSION_MP4);
+				if (f != null && f.exists()) {
+					f.delete();
+				}
+				recordingDao.delete(rec);
+			}
+		});
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-service/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/site/site.xml b/openmeetings-service/src/site/site.xml
index c26954e..0d9f35c 100644
--- a/openmeetings-service/src/site/site.xml
+++ b/openmeetings-service/src/site/site.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-util/src/main/java/org/apache/openmeetings/util/ConnectionProperties.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/ConnectionProperties.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/ConnectionProperties.java
index 1f184ef..cbf799e 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/ConnectionProperties.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/ConnectionProperties.java
@@ -1,86 +1,86 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.util;
-
-import java.io.Serializable;
-
-public class ConnectionProperties implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	public enum DbType {
-		db2
-		, derby
-		, mssql
-		, mysql
-		, oracle
-		, postgresql
-	}
-
-	private String driver = "org.apache.derby.jdbc.EmbeddedDriver";
-	private String url = "jdbc:derby:openmeetings";
-	private String login = "user";
-	private String password = "secret";
-	private DbType dbType = DbType.derby;
-
-	public String getDriver() {
-		return driver;
-	}
-
-	public void setDriver(String driverName) {
-		this.driver = driverName;
-	}
-
-	public String getURL() {
-		return url;
-	}
-
-	public void setURL(String connectionURL) {
-		this.url = connectionURL;
-	}
-
-	public String getLogin() {
-		return login;
-	}
-
-	public void setLogin(String connectionLogin) {
-		this.login = connectionLogin;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String connectionPass) {
-		this.password = connectionPass;
-	}
-
-	public DbType getDbType() {
-		return dbType;
-	}
-
-	public void setDbType(DbType dbType) {
-		this.dbType = dbType;
-	}
-	
-	@Override
-	public String toString() {
-		return "ConnectionProperties [type=" + dbType + ", driver=" + driver + ", url=" + url
-				+ ", login=" + login + ", password=" + password + "]";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.io.Serializable;
+
+public class ConnectionProperties implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	public enum DbType {
+		db2
+		, derby
+		, mssql
+		, mysql
+		, oracle
+		, postgresql
+	}
+
+	private String driver = "org.apache.derby.jdbc.EmbeddedDriver";
+	private String url = "jdbc:derby:openmeetings";
+	private String login = "user";
+	private String password = "secret";
+	private DbType dbType = DbType.derby;
+
+	public String getDriver() {
+		return driver;
+	}
+
+	public void setDriver(String driverName) {
+		this.driver = driverName;
+	}
+
+	public String getURL() {
+		return url;
+	}
+
+	public void setURL(String connectionURL) {
+		this.url = connectionURL;
+	}
+
+	public String getLogin() {
+		return login;
+	}
+
+	public void setLogin(String connectionLogin) {
+		this.login = connectionLogin;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String connectionPass) {
+		this.password = connectionPass;
+	}
+
+	public DbType getDbType() {
+		return dbType;
+	}
+
+	public void setDbType(DbType dbType) {
+		this.dbType = dbType;
+	}
+	
+	@Override
+	public String toString() {
+		return "ConnectionProperties [type=" + dbType + ", driver=" + driver + ", url=" + url
+				+ ", login=" + login + ", password=" + password + "]";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-util/src/main/java/org/apache/openmeetings/util/DaoHelper.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/DaoHelper.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/DaoHelper.java
index 14e2f33..688bb19 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/DaoHelper.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/DaoHelper.java
@@ -1,107 +1,107 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.util;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.wicket.util.string.Strings;
-
-public class DaoHelper {
-
-	public static String getSearchQuery(String table, String alias, String search, boolean filterDeleted, boolean count, String sort, String... fields) {
-		return getSearchQuery(table, alias, search, false, filterDeleted, count, sort, fields);
-	}
-	public static String getSearchQuery(String table, String alias, String search, boolean distinct, boolean filterDeleted, boolean count, String sort, String... fields) {
-		return getSearchQuery(table, alias, null, search, distinct, filterDeleted, count, null, sort, fields);
-	}
-	
-	public static String getSearchQuery(String table, String alias, String join, String search, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {
-		return getSearchQuery(table, alias, join, search, false, filterDeleted, count, additionalWhere, sort, fields);
-	}
-	
-	public static String getSearchQuery(String table, String alias, String join, String search, boolean distinct, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {
-		StringBuilder sb = new StringBuilder("SELECT ");
-		if (count) {
-			sb.append("COUNT(");
-		}
-		if (distinct) {
-			sb.append("DISTINCT ");
-		}
-		sb.append(alias);
-		if (count) {
-			sb.append(")");
-		}
-		sb.append(" FROM ").append(table).append(" ").append(alias);
-		if (!Strings.isEmpty(join)) {
-			sb.append(" ").append(join);
-		}
-		sb.append(" WHERE 1 = 1 ");
-		if (filterDeleted) {
-			sb.append("AND ").append(alias).append(".deleted = false ");
-		}
-		StringBuilder where = getWhereClause(search, alias, fields);
-		if (!Strings.isEmpty(where)) {
-			sb.append("AND ").append(where);
-		}
-		if (!Strings.isEmpty(additionalWhere)) {
-			sb.append("AND ").append(additionalWhere);
-		}
-		if (!Strings.isEmpty(sort)) {
-			sb.append(" ORDER BY ").append(alias).append(".").append(sort);
-		}
-		return sb.toString();
-	}
-	
-	public static StringBuilder getWhereClause(String search, String alias, String... fields) {
-		StringBuilder sb = new StringBuilder();
-		getWhereClause(sb, search, alias, fields);
-		return sb;
-	}
-	
-	public static void getWhereClause(StringBuilder sb, String search, String alias, String... fields) {
-		if (search != null) {
-			boolean notEmpty = false;
-			String[] searchItems = search.replace("\'", "").replace("\"", "").split(" ");
-			for (int i = 0; i < searchItems.length; ++i) {
-				if (searchItems[i].isEmpty()) {
-					continue;
-				}
-				if (i == 0) {
-					notEmpty = true;
-					sb.append(" (");
-				} else {
-					sb.append(" OR ");
-				}
-				StringBuilder placeholder = new StringBuilder();
-				placeholder.append("%").append(StringUtils.lowerCase(searchItems[i])).append("%");
-	
-				sb.append("(");
-				for (int j = 0; j < fields.length; ++j) {
-					if (j != 0) {
-						sb.append(" OR ");
-					}
-					sb.append("lower(").append(alias).append(".").append(fields[j]).append(") LIKE '").append(placeholder).append("' ");
-				}
-				sb.append(")");
-			}
-			if (notEmpty) {
-				sb.append(") ");
-			}
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.util.string.Strings;
+
+public class DaoHelper {
+
+	public static String getSearchQuery(String table, String alias, String search, boolean filterDeleted, boolean count, String sort, String... fields) {
+		return getSearchQuery(table, alias, search, false, filterDeleted, count, sort, fields);
+	}
+	public static String getSearchQuery(String table, String alias, String search, boolean distinct, boolean filterDeleted, boolean count, String sort, String... fields) {
+		return getSearchQuery(table, alias, null, search, distinct, filterDeleted, count, null, sort, fields);
+	}
+	
+	public static String getSearchQuery(String table, String alias, String join, String search, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {
+		return getSearchQuery(table, alias, join, search, false, filterDeleted, count, additionalWhere, sort, fields);
+	}
+	
+	public static String getSearchQuery(String table, String alias, String join, String search, boolean distinct, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {
+		StringBuilder sb = new StringBuilder("SELECT ");
+		if (count) {
+			sb.append("COUNT(");
+		}
+		if (distinct) {
+			sb.append("DISTINCT ");
+		}
+		sb.append(alias);
+		if (count) {
+			sb.append(")");
+		}
+		sb.append(" FROM ").append(table).append(" ").append(alias);
+		if (!Strings.isEmpty(join)) {
+			sb.append(" ").append(join);
+		}
+		sb.append(" WHERE 1 = 1 ");
+		if (filterDeleted) {
+			sb.append("AND ").append(alias).append(".deleted = false ");
+		}
+		StringBuilder where = getWhereClause(search, alias, fields);
+		if (!Strings.isEmpty(where)) {
+			sb.append("AND ").append(where);
+		}
+		if (!Strings.isEmpty(additionalWhere)) {
+			sb.append("AND ").append(additionalWhere);
+		}
+		if (!Strings.isEmpty(sort)) {
+			sb.append(" ORDER BY ").append(alias).append(".").append(sort);
+		}
+		return sb.toString();
+	}
+	
+	public static StringBuilder getWhereClause(String search, String alias, String... fields) {
+		StringBuilder sb = new StringBuilder();
+		getWhereClause(sb, search, alias, fields);
+		return sb;
+	}
+	
+	public static void getWhereClause(StringBuilder sb, String search, String alias, String... fields) {
+		if (search != null) {
+			boolean notEmpty = false;
+			String[] searchItems = search.replace("\'", "").replace("\"", "").split(" ");
+			for (int i = 0; i < searchItems.length; ++i) {
+				if (searchItems[i].isEmpty()) {
+					continue;
+				}
+				if (i == 0) {
+					notEmpty = true;
+					sb.append(" (");
+				} else {
+					sb.append(" OR ");
+				}
+				StringBuilder placeholder = new StringBuilder();
+				placeholder.append("%").append(StringUtils.lowerCase(searchItems[i])).append("%");
+	
+				sb.append("(");
+				for (int j = 0; j < fields.length; ++j) {
+					if (j != 0) {
+						sb.append(" OR ");
+					}
+					sb.append("lower(").append(alias).append(".").append(fields[j]).append(") LIKE '").append(placeholder).append("' ");
+				}
+				sb.append(")");
+			}
+			if (notEmpty) {
+				sb.append(") ");
+			}
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
index 80b4ce1..3de9fdf 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
@@ -1,315 +1,315 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.DecimalFormat;
-
-import org.apache.openmeetings.util.ConnectionProperties.DbType;
-
-public class OmFileHelper {
-	/**
-	 * This variable needs to point to the openmeetings webapp directory
-	 */
-	private static File OM_HOME = null;
-	private static final String UPLOAD_DIR = "upload";
-	private static final String PUBLIC_DIR = "public";
-	private static final String CLIPARTS_DIR = "cliparts";
-	private static final String WEB_INF_DIR = "WEB-INF";
-	private static final String GROUP_LOGO_DIR = "grouplogo";
-	private static final String STREAMS_DIR = "streams";
-	private static final String EMOTIONS_DIR = "emoticons";
-	private static final String LANGUAGES_DIR = "languages";
-	private static final String HIBERNATE_DIR = "hibernate";
-	private static final String CONF_DIR = "conf";
-	private static final String IMAGES_DIR = "images";
-	private static final String WML_DIR = "stored";
-	private static final String INSTALL_FILE = "install.xml";
-
-	public static final String BACKUP_DIR = "backup";
-	public static final String IMPORT_DIR = "import";
-	public static final String PROFILES_DIR = "profiles";
-	public static final String SCREENSHARING_DIR = "screensharing";
-	public static final String FILES_DIR = "files";
-	public static final String PERSISTENCE_NAME = "classes/META-INF/persistence.xml";
-	public static final String DB_PERSISTENCE_NAME = "classes/META-INF/%s_persistence.xml";
-	public static final String profilesPrefix = "profile_";
-	public static final String nameOfLanguageFile = "languages.xml";
-	public static final String nameOfErrorFile = "errorvalues.xml";
-	public static final String libraryFileName = "library.xml";
-	public static final String defaultProfileImageName = "profile.jpg";
-	public static final String profileFileName = "profile";
-	public static final String recordingFileName = "flvRecording_";
-	public static final String profileImagePrefix = "_profile_";
-	public static final String thumbImagePrefix = "_thumb_";
-	public static final String TEST_SETUP_PREFIX = "TEST_SETUP_";
-	public static final String dashboardFile = "dashboard.xml";
-	public static final String EXTENSION_WML = "wml";
-	public static final String EXTENSION_FLV = "flv";
-	public static final String EXTENSION_MP4 = "mp4";
-	public static final String EXTENSION_JPG = "jpg";
-	public static final String EXTENSION_SWF = "swf";
-	public static final String EXTENSION_PDF = "pdf";
-	public static final String WB_VIDEO_FILE_PREFIX = "UPLOADFLV_";
-	public static final String MP4_MIME_TYPE = "video/" + EXTENSION_MP4;
-	public static final String JPG_MIME_TYPE = "image/jpeg";
-	public static final String PNG_MIME_TYPE = "image/png";
-	public static final String BCKP_ROOM_FILES = "roomFiles";
-	public static final String BCKP_RECORD_FILES = "recordingFiles";
-
-	public static void setOmHome(File omHome) {
-		OmFileHelper.OM_HOME = omHome;
-	}
-
-	public static void setOmHome(String omHome) {
-		OmFileHelper.OM_HOME = new File(omHome);
-	}
-
-	public static File getRootDir() {
-		// FIXME hack !!!!
-		return getOmHome().getParentFile().getParentFile();
-	}
-
-	public static File getOmHome() {
-		return OmFileHelper.OM_HOME;
-	}
-
-	private static File getDir(File parent, String name) {
-		File f = new File(parent, name);
-		if (!f.exists()) {
-			f.mkdirs();
-		}
-		return f;
-	}
-
-	public static File getUploadDir() {
-		return new File(OmFileHelper.OM_HOME, UPLOAD_DIR);
-	}
-
-	public static File getUploadFilesDir() {
-		return getDir(getUploadDir(), FILES_DIR);
-	}
-
-	public static File getUploadProfilesDir() {
-		return getDir(getUploadDir(), PROFILES_DIR);
-	}
-
-	public static File getUploadProfilesUserDir(Long userId) {
-		return getDir(getUploadProfilesDir(), profilesPrefix + userId);
-	}
-
-	public static File getUploadProfilesUserDir(String userId) {
-		return getDir(getUploadProfilesDir(), profilesPrefix + userId);
-	}
-
-	public static File getGroupLogoDir() {
-		return getDir(getUploadDir(), GROUP_LOGO_DIR);
-	}
-
-	public static File getGroupLogo(Long groupId, boolean check) {
-		File logo = new File(getGroupLogoDir(), String.format("logo%s.png", groupId));
-		if (check && !logo.exists()) {
-			logo = new File(getImagesDir(), "blank.png");
-		}
-		return logo;
-	}
-
-	public static File getDefaultProfilePicture() {
-		return new File(getImagesDir(), defaultProfileImageName);
-	}
-
-	public static File getUserProfilePicture(Long userId, String uri) {
-		File img = new File(getUploadProfilesUserDir(userId), profileImagePrefix + uri);
-		if (!img.exists()) {
-			img = getDefaultProfilePicture();
-		}
-		return img;
-	}
-
-	public static File getUserDashboard(Long userId) {
-		return new File(getUploadProfilesUserDir(userId), dashboardFile);
-	}
-
-	public static File getUploadImportDir() {
-		return getDir(getUploadDir(), IMPORT_DIR);
-	}
-
-	public static File getUploadBackupDir() {
-		return getDir(getUploadDir(), BACKUP_DIR);
-	}
-
-	public static File getUploadRoomDir(String roomName) {
-		return getDir(getUploadDir(), roomName);
-	}
-
-	public static File getUploadWmlDir() {
-		return getDir(getUploadDir(), WML_DIR);
-	}
-
-	public static File getStreamsDir() {
-		return getDir(OmFileHelper.OM_HOME, STREAMS_DIR);
-	}
-
-	public static File getStreamsHibernateDir() {
-		return getDir(getStreamsDir(), HIBERNATE_DIR);
-	}
-
-	public static File getRecording(String name) {
-		return new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
-	}
-
-	public static File getStreamsSubDir(Long id) {
-		return getStreamsSubDir("" + id);
-	}
-
-	public static File getStreamsSubDir(String name) {
-		return getDir(getStreamsDir(), name);
-	}
-
-	public static String getName(String name, String ext) {
-		return String.format("%s.%s", name, ext);
-	}
-
-	public static File getRecordingMetaData(Long roomId, String name) {
-		return new File(getStreamsSubDir(roomId), getName(name, EXTENSION_FLV));
-	}
-
-	public static File getLanguagesDir() {
-		return new File(OmFileHelper.OM_HOME, LANGUAGES_DIR);
-	}
-
-	public static File getPublicDir() {
-		return new File(OmFileHelper.OM_HOME, PUBLIC_DIR);
-	}
-
-	public static File getPublicClipartsDir() {
-		return new File(getPublicDir(), CLIPARTS_DIR);
-	}
-
-	public static File getPublicEmotionsDir() {
-		return new File(getPublicDir(), EMOTIONS_DIR);
-	}
-
-	public static File getWebinfDir() {
-		return new File(OmFileHelper.OM_HOME, WEB_INF_DIR);
-	}
-
-	public static File getPersistence() {
-		return getPersistence((DbType) null);
-	}
-
-	public static File getPersistence(String dbType) {
-		return getPersistence(DbType.valueOf(dbType));
-	}
-
-	public static File getPersistence(DbType dbType) {
-		return new File(OmFileHelper.getWebinfDir(), dbType == null ? PERSISTENCE_NAME : String.format(DB_PERSISTENCE_NAME, dbType));
-	}
-
-	public static File getConfDir() {
-		return new File(OmFileHelper.OM_HOME, CONF_DIR);
-	}
-
-	public static File getInstallFile() {
-		return new File(getConfDir(), INSTALL_FILE);
-	}
-
-	public static File getScreenSharingDir() {
-		return new File(OmFileHelper.OM_HOME, SCREENSHARING_DIR);
-	}
-
-	public static File getImagesDir() {
-		return new File(OmFileHelper.OM_HOME, IMAGES_DIR);
-	}
-
-	public static File appendSuffix(File original, String suffix) {
-		File parent = original.getParentFile();
-		String name = original.getName();
-		String ext = "";
-		int idx = name.lastIndexOf('.');
-		if (idx > -1) {
-			name = name.substring(0, idx);
-			ext = name.substring(idx);
-		}
-		return new File(parent, name + suffix + ext);
-	}
-
-	// FIXME need to be generalized
-	public static File getNewFile(File dir, String name, String ext) throws IOException {
-		File f = new File(dir, getName(name, ext));
-		int recursiveNumber = 0;
-		while (f.exists()) {
-			f = new File(dir, name + "_" + (recursiveNumber++) + ext);
-		}
-		f.createNewFile();
-		return f;
-	}
-
-	public static File getNewDir(File dir, String name) throws IOException {
-		File f = new File(dir, name);
-		String baseName = f.getCanonicalPath();
-
-		int recursiveNumber = 0;
-		while (f.exists()) {
-			f = new File(baseName + "_" + (recursiveNumber++));
-		}
-		f.mkdir();
-		return f;
-	}
-
-	public static String getHumanSize(File dir) {
-		return getHumanSize(getSize(dir));
-	}
-
-	public static String getHumanSize(long size) {
-		if (size <= 0) {
-			return "0";
-		}
-		final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
-		int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
-		return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
-	}
-
-	public static long getSize(File dir) {
-		long size = 0;
-		if (dir.isFile()) {
-			size = dir.length();
-		} else {
-			for (File file : dir.listFiles()) {
-				if (file.isFile()) {
-					size += file.length();
-				} else {
-					size += getSize(file);
-				}
-			}
-		}
-		return size;
-	}
-
-	public static String getFileName(String name) {
-		int dotidx = name.lastIndexOf('.');
-		return dotidx < 0 ? "" : name.substring(0, dotidx);
-	}
-
-	public static String getFileExt(String name) {
-		int dotidx = name.lastIndexOf('.');
-		return dotidx < 0 ? "" : name.substring(dotidx + 1).toLowerCase();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.DecimalFormat;
+
+import org.apache.openmeetings.util.ConnectionProperties.DbType;
+
+public class OmFileHelper {
+	/**
+	 * This variable needs to point to the openmeetings webapp directory
+	 */
+	private static File OM_HOME = null;
+	private static final String UPLOAD_DIR = "upload";
+	private static final String PUBLIC_DIR = "public";
+	private static final String CLIPARTS_DIR = "cliparts";
+	private static final String WEB_INF_DIR = "WEB-INF";
+	private static final String GROUP_LOGO_DIR = "grouplogo";
+	private static final String STREAMS_DIR = "streams";
+	private static final String EMOTIONS_DIR = "emoticons";
+	private static final String LANGUAGES_DIR = "languages";
+	private static final String HIBERNATE_DIR = "hibernate";
+	private static final String CONF_DIR = "conf";
+	private static final String IMAGES_DIR = "images";
+	private static final String WML_DIR = "stored";
+	private static final String INSTALL_FILE = "install.xml";
+
+	public static final String BACKUP_DIR = "backup";
+	public static final String IMPORT_DIR = "import";
+	public static final String PROFILES_DIR = "profiles";
+	public static final String SCREENSHARING_DIR = "screensharing";
+	public static final String FILES_DIR = "files";
+	public static final String PERSISTENCE_NAME = "classes/META-INF/persistence.xml";
+	public static final String DB_PERSISTENCE_NAME = "classes/META-INF/%s_persistence.xml";
+	public static final String profilesPrefix = "profile_";
+	public static final String nameOfLanguageFile = "languages.xml";
+	public static final String nameOfErrorFile = "errorvalues.xml";
+	public static final String libraryFileName = "library.xml";
+	public static final String defaultProfileImageName = "profile.jpg";
+	public static final String profileFileName = "profile";
+	public static final String recordingFileName = "flvRecording_";
+	public static final String profileImagePrefix = "_profile_";
+	public static final String thumbImagePrefix = "_thumb_";
+	public static final String TEST_SETUP_PREFIX = "TEST_SETUP_";
+	public static final String dashboardFile = "dashboard.xml";
+	public static final String EXTENSION_WML = "wml";
+	public static final String EXTENSION_FLV = "flv";
+	public static final String EXTENSION_MP4 = "mp4";
+	public static final String EXTENSION_JPG = "jpg";
+	public static final String EXTENSION_SWF = "swf";
+	public static final String EXTENSION_PDF = "pdf";
+	public static final String WB_VIDEO_FILE_PREFIX = "UPLOADFLV_";
+	public static final String MP4_MIME_TYPE = "video/" + EXTENSION_MP4;
+	public static final String JPG_MIME_TYPE = "image/jpeg";
+	public static final String PNG_MIME_TYPE = "image/png";
+	public static final String BCKP_ROOM_FILES = "roomFiles";
+	public static final String BCKP_RECORD_FILES = "recordingFiles";
+
+	public static void setOmHome(File omHome) {
+		OmFileHelper.OM_HOME = omHome;
+	}
+
+	public static void setOmHome(String omHome) {
+		OmFileHelper.OM_HOME = new File(omHome);
+	}
+
+	public static File getRootDir() {
+		// FIXME hack !!!!
+		return getOmHome().getParentFile().getParentFile();
+	}
+
+	public static File getOmHome() {
+		return OmFileHelper.OM_HOME;
+	}
+
+	private static File getDir(File parent, String name) {
+		File f = new File(parent, name);
+		if (!f.exists()) {
+			f.mkdirs();
+		}
+		return f;
+	}
+
+	public static File getUploadDir() {
+		return new File(OmFileHelper.OM_HOME, UPLOAD_DIR);
+	}
+
+	public static File getUploadFilesDir() {
+		return getDir(getUploadDir(), FILES_DIR);
+	}
+
+	public static File getUploadProfilesDir() {
+		return getDir(getUploadDir(), PROFILES_DIR);
+	}
+
+	public static File getUploadProfilesUserDir(Long userId) {
+		return getDir(getUploadProfilesDir(), profilesPrefix + userId);
+	}
+
+	public static File getUploadProfilesUserDir(String userId) {
+		return getDir(getUploadProfilesDir(), profilesPrefix + userId);
+	}
+
+	public static File getGroupLogoDir() {
+		return getDir(getUploadDir(), GROUP_LOGO_DIR);
+	}
+
+	public static File getGroupLogo(Long groupId, boolean check) {
+		File logo = new File(getGroupLogoDir(), String.format("logo%s.png", groupId));
+		if (check && !logo.exists()) {
+			logo = new File(getImagesDir(), "blank.png");
+		}
+		return logo;
+	}
+
+	public static File getDefaultProfilePicture() {
+		return new File(getImagesDir(), defaultProfileImageName);
+	}
+
+	public static File getUserProfilePicture(Long userId, String uri) {
+		File img = new File(getUploadProfilesUserDir(userId), profileImagePrefix + uri);
+		if (!img.exists()) {
+			img = getDefaultProfilePicture();
+		}
+		return img;
+	}
+
+	public static File getUserDashboard(Long userId) {
+		return new File(getUploadProfilesUserDir(userId), dashboardFile);
+	}
+
+	public static File getUploadImportDir() {
+		return getDir(getUploadDir(), IMPORT_DIR);
+	}
+
+	public static File getUploadBackupDir() {
+		return getDir(getUploadDir(), BACKUP_DIR);
+	}
+
+	public static File getUploadRoomDir(String roomName) {
+		return getDir(getUploadDir(), roomName);
+	}
+
+	public static File getUploadWmlDir() {
+		return getDir(getUploadDir(), WML_DIR);
+	}
+
+	public static File getStreamsDir() {
+		return getDir(OmFileHelper.OM_HOME, STREAMS_DIR);
+	}
+
+	public static File getStreamsHibernateDir() {
+		return getDir(getStreamsDir(), HIBERNATE_DIR);
+	}
+
+	public static File getRecording(String name) {
+		return new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
+	}
+
+	public static File getStreamsSubDir(Long id) {
+		return getStreamsSubDir("" + id);
+	}
+
+	public static File getStreamsSubDir(String name) {
+		return getDir(getStreamsDir(), name);
+	}
+
+	public static String getName(String name, String ext) {
+		return String.format("%s.%s", name, ext);
+	}
+
+	public static File getRecordingMetaData(Long roomId, String name) {
+		return new File(getStreamsSubDir(roomId), getName(name, EXTENSION_FLV));
+	}
+
+	public static File getLanguagesDir() {
+		return new File(OmFileHelper.OM_HOME, LANGUAGES_DIR);
+	}
+
+	public static File getPublicDir() {
+		return new File(OmFileHelper.OM_HOME, PUBLIC_DIR);
+	}
+
+	public static File getPublicClipartsDir() {
+		return new File(getPublicDir(), CLIPARTS_DIR);
+	}
+
+	public static File getPublicEmotionsDir() {
+		return new File(getPublicDir(), EMOTIONS_DIR);
+	}
+
+	public static File getWebinfDir() {
+		return new File(OmFileHelper.OM_HOME, WEB_INF_DIR);
+	}
+
+	public static File getPersistence() {
+		return getPersistence((DbType) null);
+	}
+
+	public static File getPersistence(String dbType) {
+		return getPersistence(DbType.valueOf(dbType));
+	}
+
+	public static File getPersistence(DbType dbType) {
+		return new File(OmFileHelper.getWebinfDir(), dbType == null ? PERSISTENCE_NAME : String.format(DB_PERSISTENCE_NAME, dbType));
+	}
+
+	public static File getConfDir() {
+		return new File(OmFileHelper.OM_HOME, CONF_DIR);
+	}
+
+	public static File getInstallFile() {
+		return new File(getConfDir(), INSTALL_FILE);
+	}
+
+	public static File getScreenSharingDir() {
+		return new File(OmFileHelper.OM_HOME, SCREENSHARING_DIR);
+	}
+
+	public static File getImagesDir() {
+		return new File(OmFileHelper.OM_HOME, IMAGES_DIR);
+	}
+
+	public static File appendSuffix(File original, String suffix) {
+		File parent = original.getParentFile();
+		String name = original.getName();
+		String ext = "";
+		int idx = name.lastIndexOf('.');
+		if (idx > -1) {
+			name = name.substring(0, idx);
+			ext = name.substring(idx);
+		}
+		return new File(parent, name + suffix + ext);
+	}
+
+	// FIXME need to be generalized
+	public static File getNewFile(File dir, String name, String ext) throws IOException {
+		File f = new File(dir, getName(name, ext));
+		int recursiveNumber = 0;
+		while (f.exists()) {
+			f = new File(dir, name + "_" + (recursiveNumber++) + ext);
+		}
+		f.createNewFile();
+		return f;
+	}
+
+	public static File getNewDir(File dir, String name) throws IOException {
+		File f = new File(dir, name);
+		String baseName = f.getCanonicalPath();
+
+		int recursiveNumber = 0;
+		while (f.exists()) {
+			f = new File(baseName + "_" + (recursiveNumber++));
+		}
+		f.mkdir();
+		return f;
+	}
+
+	public static String getHumanSize(File dir) {
+		return getHumanSize(getSize(dir));
+	}
+
+	public static String getHumanSize(long size) {
+		if (size <= 0) {
+			return "0";
+		}
+		final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
+		int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
+		return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
+	}
+
+	public static long getSize(File dir) {
+		long size = 0;
+		if (dir.isFile()) {
+			size = dir.length();
+		} else {
+			for (File file : dir.listFiles()) {
+				if (file.isFile()) {
+					size += file.length();
+				} else {
+					size += getSize(file);
+				}
+			}
+		}
+		return size;
+	}
+
+	public static String getFileName(String name) {
+		int dotidx = name.lastIndexOf('.');
+		return dotidx < 0 ? "" : name.substring(0, dotidx);
+	}
+
+	public static String getFileExt(String name) {
+		int dotidx = name.lastIndexOf('.');
+		return dotidx < 0 ? "" : name.substring(dotidx + 1).toLowerCase();
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-util/src/main/java/org/apache/openmeetings/util/Version.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/Version.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/Version.java
index 2d677dd..7ad8c08 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/Version.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/Version.java
@@ -1,98 +1,98 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.util;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.jar.Attributes;
-import java.util.jar.Manifest;
-
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-public class Version {
-	private static final Logger log = Red5LoggerFactory.getLogger(Version.class, OpenmeetingsVariables.webAppRootKey);
-	private static final int startedStringLength = 78;
-	private static String version = null;
-	private static String revision = null;
-	private static String buildDate = null;
-	
-	private static Attributes getAttributes() throws MalformedURLException, IOException {
-		String jarUrl = Version.class.getResource(Version.class.getSimpleName() + ".class").toString();
-		return new Manifest(new URL(jarUrl.substring(0, jarUrl.indexOf('!')) + "!/META-INF/MANIFEST.MF").openStream()).getMainAttributes();
-	}
-	
-	public static String getVersion() {
-		if (version == null) {
-			try {
-				version = getAttributes().getValue("Product-Version");
-			} catch (Exception e) {
-				log.error("Error", e);
-			}
-		}
-		return version;
-	}
-	
-	public static String getRevision() {
-		if (revision == null) {
-			try {
-				revision = getAttributes().getValue("Git-Revision");
-			} catch (Exception e) {
-				log.error("Error", e);
-			}
-		}
-		return revision;
-	}
-	
-	public static String getBuildDate() {
-		if (buildDate == null) {
-			try {
-				buildDate = getAttributes().getValue("Built-On");
-			} catch (Exception e) {
-				log.error("Error", e);
-			}
-		}
-		return buildDate;
-	}
-
-	private static void getLine(StringBuilder sb, String text, char fill) {
-		sb.append("\t#");
-		int l = text.length();
-		int headLength = (startedStringLength - l) / 2;
-		for (int i = 0; i < headLength; ++i) {
-			sb.append(fill);
-		}
-		sb.append(text);
-		for (int i = 0; i < (startedStringLength - l - headLength); ++i) {
-			sb.append(fill);
-		}
-		sb.append("#\n");
-	}
-	
-	public static void logOMStarted() {
-		StringBuilder sb = new StringBuilder("\n");
-		getLine(sb, "", '#');
-		getLine(sb, "Openmeetings is up", ' ');
-		getLine(sb, getVersion() + " " + getRevision() + " " + getBuildDate(), ' ');
-		getLine(sb, "and ready to use", ' ');
-		getLine(sb, "", '#');
-		log.debug(sb.toString());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class Version {
+	private static final Logger log = Red5LoggerFactory.getLogger(Version.class, OpenmeetingsVariables.webAppRootKey);
+	private static final int startedStringLength = 78;
+	private static String version = null;
+	private static String revision = null;
+	private static String buildDate = null;
+	
+	private static Attributes getAttributes() throws MalformedURLException, IOException {
+		String jarUrl = Version.class.getResource(Version.class.getSimpleName() + ".class").toString();
+		return new Manifest(new URL(jarUrl.substring(0, jarUrl.indexOf('!')) + "!/META-INF/MANIFEST.MF").openStream()).getMainAttributes();
+	}
+	
+	public static String getVersion() {
+		if (version == null) {
+			try {
+				version = getAttributes().getValue("Product-Version");
+			} catch (Exception e) {
+				log.error("Error", e);
+			}
+		}
+		return version;
+	}
+	
+	public static String getRevision() {
+		if (revision == null) {
+			try {
+				revision = getAttributes().getValue("Git-Revision");
+			} catch (Exception e) {
+				log.error("Error", e);
+			}
+		}
+		return revision;
+	}
+	
+	public static String getBuildDate() {
+		if (buildDate == null) {
+			try {
+				buildDate = getAttributes().getValue("Built-On");
+			} catch (Exception e) {
+				log.error("Error", e);
+			}
+		}
+		return buildDate;
+	}
+
+	private static void getLine(StringBuilder sb, String text, char fill) {
+		sb.append("\t#");
+		int l = text.length();
+		int headLength = (startedStringLength - l) / 2;
+		for (int i = 0; i < headLength; ++i) {
+			sb.append(fill);
+		}
+		sb.append(text);
+		for (int i = 0; i < (startedStringLength - l - headLength); ++i) {
+			sb.append(fill);
+		}
+		sb.append("#\n");
+	}
+	
+	public static void logOMStarted() {
+		StringBuilder sb = new StringBuilder("\n");
+		getLine(sb, "", '#');
+		getLine(sb, "Openmeetings is up", ' ');
+		getLine(sb, getVersion() + " " + getRevision() + " " + getBuildDate(), ' ');
+		getLine(sb, "and ready to use", ' ');
+		getLine(sb, "", '#');
+		log.debug(sb.toString());
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/MailUtil.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/MailUtil.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/MailUtil.java
index e43cfaa..3805521 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/MailUtil.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/MailUtil.java
@@ -1,34 +1,34 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.util.mail;
-
-import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
-import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.validation.Validatable;
-
-public class MailUtil {
-	public static boolean isValid(String email) {
-		if (Strings.isEmpty(email)) {
-			return false;
-		}
-		Validatable<String> eml = new Validatable<>(email);
-		RfcCompliantEmailAddressValidator.getInstance().validate(eml);
-		return eml.isValid();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.validation.Validatable;
+
+public class MailUtil {
+	public static boolean isValid(String email) {
+		if (Strings.isEmpty(email)) {
+			return false;
+		}
+		Validatable<String> eml = new Validatable<>(email);
+		RfcCompliantEmailAddressValidator.getInstance().validate(eml);
+		return eml.isValid();
+	}
+}


[16/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/BuildInstructions_3.0.x.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/BuildInstructions_3.0.x.xml b/openmeetings-server/src/site/xdoc/BuildInstructions_3.0.x.xml
index 481521f..ac74b31 100644
--- a/openmeetings-server/src/site/xdoc/BuildInstructions_3.0.x.xml
+++ b/openmeetings-server/src/site/xdoc/BuildInstructions_3.0.x.xml
@@ -1,305 +1,305 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Build instructions version 3.0.x</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Nightly Builds">
-			<p>
-				You can find Nightly Builds of the software at:
-				<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" rel="nofollow" target="_blank">
-					https://builds.apache.org/view/M-R/view/OpenMeetings/
-				</a>
-			</p>
-		</section>
-
-		<section name="These instructions are for 3.0.x version only"/>
-		
-		<section name="How to Build a Distribution">
-			<div>
-				<p>To build a binary release of OpenMeetings you need: </p>
-				<ul>
-					<li>Oracle JDK7</li>
-					<li>Apache ANT (minimum) 1.8.3</li>
-					<li>
-						SVN Command line client (Subversion 1.7 required!)
-						<a href="http://subversion.apache.org/packages.html" target="_blank" rel="nofollow">http://subversion.apache.org/packages.html</a>
-					</li>
-				</ul>
-			</div>
-
-			<p>Get the source: </p>
-			<source><![CDATA[svn checkout https://svn.apache.org/repos/asf/openmeetings/application/branches/3.0.x]]></source>
-			<p>Run the command: </p>
-			<source><![CDATA[ant ]]></source>
-			<p>There is no need to compile the client additionally! The ant task
-				does it all! You will find a directory dist that contains
-				OpenMeetings and a red5-server.
-			</p>
-			<p>To compile the client you can also use ant: </p>
-			<source>
-<![CDATA[
-ant                             # compiles a complete package into the folder dist
-ant compile.laszlo.main         # compiles the client into main.as3.swf10.swf and main.swf8.swf
-ant compile.laszlo.main.debug   # compiles the debug-client into maindebug.as3.swf10.swf and maindebug.swf8.swf
-ant -Ddb=<name of DB>           # will copy <name of DB>_persistense.xml to persistense.xml
-                                #(for ex. ant -Ddb=mysql will set mysql as default DB)
-]]>
-			</source>
-			<p>To compile just the openmeetings JAR file: </p>
-			<source><![CDATA[ant jar.only]]></source>
-			<p>
-				To run Junit tests using ANT see
-				<a href="JUnitTesting.html">JUnitTesting</a>
-			</p>
-		</section>
-
-		<section name="Run, Develop, Test">
-
-			<p>
-				To develop or build OpenMeetings you checkout the source as Eclipse
-				project. You need the Subclipse or Subversive Plugin for Eclipse. If
-				you just need to change 3 lines of code then your probably better
-				switch to
-				<a href="#How_to_build_a_distribution" rel="nofollow">How to build a
-					distribution
-				</a>
-				.
-			</p>
-
-			<subsection name="Step1 - Get required Software">
-
-				<p>To develop OpenMeetings you need at least: </p>
-				<ul>
-					<li>Eclipse in a up to date copy and Oracle JDK7 </li>
-					<li>Apache ANT (minimum) 1.8.3</li>
-					<li>
-						Subclipse 1.8 (Subversion 1.7 required!)
-						<a href="http://subclipse.tigris.org/" target="_blank" rel="nofollow">http://subclipse.tigris.org/
-						</a>
-					</li>
-					<li>
-						SVN Command line client (Subversion 1.7 required!)
-						<a href="http://subversion.apache.org/packages.html" target="_blank"
-							rel="nofollow">http://subversion.apache.org/packages.html</a>
-					</li>
-					<li>Spring IDE for Eclipse (installable via Help &gt; Eclipse
-						Marketplace)
-					</li>
-					<li>
-						Apache IvyDE&#8482; For Eclipse (installable via Help &gt; Install
-						New Software)
-						URL: http://www.apache.org/dist/ant/ivyde/updatesite
-						detailed steps can be found here:
-						<a href="http://ant.apache.org/ivy/ivyde/download.cgi" target="_blank"
-							rel="nofollow">http://ant.apache.org/ivy/ivyde/download.cgi</a>
-					</li>
-					<li>MySQL (or Postgres, or other Databases supported by openJPA)
-						are optionally but handy to have them
-					</li>
-				</ul>
-
-			</subsection>
-
-			<subsection name="Step2 - Download the Source">
-
-				<p>Advanced Users: Check out the Code from the Repository as a
-					Java
-					project into Eclipse.
-				</p>
-				<p>
-					URL:
-					<a href="https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/">
-						https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/
-					</a>
-				</p>
-				<p>To download the required JARs for building and developing
-					OpenMeetings you need to run the ANT comand:
-				</p>
-				<source><![CDATA[ant -Ddb=<your_DB> dist prepare-eclipse]]></source>
-				<p>After the ANT command you need to press F5 and rebuild the
-					project from inside Eclipse
-				</p>
-				<p>Step-By-Step: </p>
-				<p>1) Start Eclipse </p>
-				<p>
-					2) Change Perspective to SVN Repository Exploring:
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_1.png">
-						<img src="images/checkout_1.png" alt="" width="400" height="289" />
-					</a>
-
-				</p>
-				<p>
-					3) Select SVN Repository Exploring and click ok.
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_2.png">
-						<img src="images/checkout_2.png" alt="" width="304" height="417" />
-					</a>
-				</p>
-				<p>
-					4) A new Dialog in Eclipse opens
-					<strong>SVN Repositories</strong>
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_3.png">
-						<img src="images/checkout_3.png" alt="" width="460" height="102" />
-					</a>
-				</p>
-				<p>
-					5) Click on the icon with the plus in the top right corner in the
-					SVN Repository Dialog
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_4.png">
-						<img src="images/checkout_4.png" alt="" width="57" height="38" />
-					</a>
-				</p>
-				<p>
-					6) Add the URL
-					<a href="https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/" rel="nofollow">
-						https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/
-					</a>
-					and click Finish
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_5.png">
-						<img src="images/checkout_5.png" alt="" width="455" height="272" />
-					</a>
-				</p>
-				<p>
-					7) After download is complete you see a new Source Repository in
-					the Repository Explorer. Right click on it and choose
-					<strong>checkout</strong>
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_6.png">
-						<img src="images/checkout_6.png" alt="" width="340" height="135" />
-					</a>
-				</p>
-				<p>
-					8) In the Dialog the opens now just click next
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_7.png">
-						<img src="images/checkout_7.png" alt="" width="390" height="338" />
-					</a>
-				</p>
-				<p>
-					9) In the next Dialog just click Finish, Eclipse will then download
-					the sources
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_8.png">
-						<img src="images/checkout_8.png" alt="" width="390" height="338" />
-					</a>
-				</p>
-				<p>
-					10) After the download is complete you will see a new Project in
-					the Package Explorer Dialog of Eclipse
-					<br />
-					<br />
-					<a class="fancybox-buttons" href="images/checkout_9.png">
-						<img src="images/checkout_9.png" alt="" width="310" height="297" />
-					</a>
-				</p>
-				<div>
-					11) Please run
-					<source><![CDATA[ant dist prepare-eclipse]]></source>
-					to download all necessary jar files, and perform source
-					<tt>Refresh</tt>
-					to resolve all compilation issues.
-				</div>
-			</subsection>
-
-			<subsection name="Step3 - Deploy and Run">
-
-				<p>
-					see the first chapter about the ANT tasks to compile the code. You
-					will find a directory called
-					<strong>dist</strong>
-					which contains a regular openmeetings including red5. You can then
-					use the usual process like described at
-					<a href="installation.html">installation</a>
-					to run the code then.
-				</p>
-			</subsection>
-
-		</section>
-
-		<section name="Links">
-
-			<ul>
-				<li>
-					Getting Started with OpenLaszlo, checkout
-					<a
-						href="http://www.openlaszlo.org/demos#Laszlo10"
-						target="_blank" rel="nofollow">Laszlo-in-10-Minutes</a>
-					and the
-					<a href="http://www.openlaszlo.org/taxonomy/term/14" target="_blank"
-						rel="nofollow">Application Developer's Guide</a>
-					or try the
-					<a href="http://www.openlaszlo.org/getstarted" target="_blank"
-						rel="nofollow">ScreenCast</a>
-				</li>
-				<li>
-					<a href="http://openmeetings.apache.org/source-repository.html">
-						browse SVN source
-					</a>
-				</li>
-			</ul>
-
-		</section>
-
-		<section name="Tips and Gotchas">
-
-			<p>When you want to develop only client side there are handy ANT
-				tasks so that you only rebuild the SWFs, same for the Java side.
-			</p>
-			<p>
-				It
-				also takes much less time if you do use MySQL as database then
-				rebuilding the software and waiting for Apache Derby to set up the
-				database everytime you did rebuild.
-			</p>
-			<p>
-				<b>Working behind a proxy:</b>
-				If you are sitting behind a proxy you should add some proxy settings
-				before starting the build process.
-				<br />
-				For Apache Ivy see:
-				<a href="http://ant.apache.org/ivy/faq.html" target="_blank" rel="nofollow">http://ant.apache.org/ivy/faq.html
-				</a>
-				<br />
-				For SVN Command Line Client (From CollabNet 1.7) see:
-				<a
-					href="https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html"
-					target="_blank" rel="nofollow">https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html
-				</a>
-			</p>
-
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Build instructions version 3.0.x</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Nightly Builds">
+			<p>
+				You can find Nightly Builds of the software at:
+				<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" rel="nofollow" target="_blank">
+					https://builds.apache.org/view/M-R/view/OpenMeetings/
+				</a>
+			</p>
+		</section>
+
+		<section name="These instructions are for 3.0.x version only"/>
+		
+		<section name="How to Build a Distribution">
+			<div>
+				<p>To build a binary release of OpenMeetings you need: </p>
+				<ul>
+					<li>Oracle JDK7</li>
+					<li>Apache ANT (minimum) 1.8.3</li>
+					<li>
+						SVN Command line client (Subversion 1.7 required!)
+						<a href="http://subversion.apache.org/packages.html" target="_blank" rel="nofollow">http://subversion.apache.org/packages.html</a>
+					</li>
+				</ul>
+			</div>
+
+			<p>Get the source: </p>
+			<source><![CDATA[svn checkout https://svn.apache.org/repos/asf/openmeetings/application/branches/3.0.x]]></source>
+			<p>Run the command: </p>
+			<source><![CDATA[ant ]]></source>
+			<p>There is no need to compile the client additionally! The ant task
+				does it all! You will find a directory dist that contains
+				OpenMeetings and a red5-server.
+			</p>
+			<p>To compile the client you can also use ant: </p>
+			<source>
+<![CDATA[
+ant                             # compiles a complete package into the folder dist
+ant compile.laszlo.main         # compiles the client into main.as3.swf10.swf and main.swf8.swf
+ant compile.laszlo.main.debug   # compiles the debug-client into maindebug.as3.swf10.swf and maindebug.swf8.swf
+ant -Ddb=<name of DB>           # will copy <name of DB>_persistense.xml to persistense.xml
+                                #(for ex. ant -Ddb=mysql will set mysql as default DB)
+]]>
+			</source>
+			<p>To compile just the openmeetings JAR file: </p>
+			<source><![CDATA[ant jar.only]]></source>
+			<p>
+				To run Junit tests using ANT see
+				<a href="JUnitTesting.html">JUnitTesting</a>
+			</p>
+		</section>
+
+		<section name="Run, Develop, Test">
+
+			<p>
+				To develop or build OpenMeetings you checkout the source as Eclipse
+				project. You need the Subclipse or Subversive Plugin for Eclipse. If
+				you just need to change 3 lines of code then your probably better
+				switch to
+				<a href="#How_to_build_a_distribution" rel="nofollow">How to build a
+					distribution
+				</a>
+				.
+			</p>
+
+			<subsection name="Step1 - Get required Software">
+
+				<p>To develop OpenMeetings you need at least: </p>
+				<ul>
+					<li>Eclipse in a up to date copy and Oracle JDK7 </li>
+					<li>Apache ANT (minimum) 1.8.3</li>
+					<li>
+						Subclipse 1.8 (Subversion 1.7 required!)
+						<a href="http://subclipse.tigris.org/" target="_blank" rel="nofollow">http://subclipse.tigris.org/
+						</a>
+					</li>
+					<li>
+						SVN Command line client (Subversion 1.7 required!)
+						<a href="http://subversion.apache.org/packages.html" target="_blank"
+							rel="nofollow">http://subversion.apache.org/packages.html</a>
+					</li>
+					<li>Spring IDE for Eclipse (installable via Help &gt; Eclipse
+						Marketplace)
+					</li>
+					<li>
+						Apache IvyDE&#8482; For Eclipse (installable via Help &gt; Install
+						New Software)
+						URL: http://www.apache.org/dist/ant/ivyde/updatesite
+						detailed steps can be found here:
+						<a href="http://ant.apache.org/ivy/ivyde/download.cgi" target="_blank"
+							rel="nofollow">http://ant.apache.org/ivy/ivyde/download.cgi</a>
+					</li>
+					<li>MySQL (or Postgres, or other Databases supported by openJPA)
+						are optionally but handy to have them
+					</li>
+				</ul>
+
+			</subsection>
+
+			<subsection name="Step2 - Download the Source">
+
+				<p>Advanced Users: Check out the Code from the Repository as a
+					Java
+					project into Eclipse.
+				</p>
+				<p>
+					URL:
+					<a href="https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/">
+						https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/
+					</a>
+				</p>
+				<p>To download the required JARs for building and developing
+					OpenMeetings you need to run the ANT comand:
+				</p>
+				<source><![CDATA[ant -Ddb=<your_DB> dist prepare-eclipse]]></source>
+				<p>After the ANT command you need to press F5 and rebuild the
+					project from inside Eclipse
+				</p>
+				<p>Step-By-Step: </p>
+				<p>1) Start Eclipse </p>
+				<p>
+					2) Change Perspective to SVN Repository Exploring:
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_1.png">
+						<img src="images/checkout_1.png" alt="" width="400" height="289" />
+					</a>
+
+				</p>
+				<p>
+					3) Select SVN Repository Exploring and click ok.
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_2.png">
+						<img src="images/checkout_2.png" alt="" width="304" height="417" />
+					</a>
+				</p>
+				<p>
+					4) A new Dialog in Eclipse opens
+					<strong>SVN Repositories</strong>
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_3.png">
+						<img src="images/checkout_3.png" alt="" width="460" height="102" />
+					</a>
+				</p>
+				<p>
+					5) Click on the icon with the plus in the top right corner in the
+					SVN Repository Dialog
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_4.png">
+						<img src="images/checkout_4.png" alt="" width="57" height="38" />
+					</a>
+				</p>
+				<p>
+					6) Add the URL
+					<a href="https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/" rel="nofollow">
+						https://svn.apache.org/repos/asf/openmeetings/branches/3.0.x/
+					</a>
+					and click Finish
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_5.png">
+						<img src="images/checkout_5.png" alt="" width="455" height="272" />
+					</a>
+				</p>
+				<p>
+					7) After download is complete you see a new Source Repository in
+					the Repository Explorer. Right click on it and choose
+					<strong>checkout</strong>
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_6.png">
+						<img src="images/checkout_6.png" alt="" width="340" height="135" />
+					</a>
+				</p>
+				<p>
+					8) In the Dialog the opens now just click next
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_7.png">
+						<img src="images/checkout_7.png" alt="" width="390" height="338" />
+					</a>
+				</p>
+				<p>
+					9) In the next Dialog just click Finish, Eclipse will then download
+					the sources
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_8.png">
+						<img src="images/checkout_8.png" alt="" width="390" height="338" />
+					</a>
+				</p>
+				<p>
+					10) After the download is complete you will see a new Project in
+					the Package Explorer Dialog of Eclipse
+					<br />
+					<br />
+					<a class="fancybox-buttons" href="images/checkout_9.png">
+						<img src="images/checkout_9.png" alt="" width="310" height="297" />
+					</a>
+				</p>
+				<div>
+					11) Please run
+					<source><![CDATA[ant dist prepare-eclipse]]></source>
+					to download all necessary jar files, and perform source
+					<tt>Refresh</tt>
+					to resolve all compilation issues.
+				</div>
+			</subsection>
+
+			<subsection name="Step3 - Deploy and Run">
+
+				<p>
+					see the first chapter about the ANT tasks to compile the code. You
+					will find a directory called
+					<strong>dist</strong>
+					which contains a regular openmeetings including red5. You can then
+					use the usual process like described at
+					<a href="installation.html">installation</a>
+					to run the code then.
+				</p>
+			</subsection>
+
+		</section>
+
+		<section name="Links">
+
+			<ul>
+				<li>
+					Getting Started with OpenLaszlo, checkout
+					<a
+						href="http://www.openlaszlo.org/demos#Laszlo10"
+						target="_blank" rel="nofollow">Laszlo-in-10-Minutes</a>
+					and the
+					<a href="http://www.openlaszlo.org/taxonomy/term/14" target="_blank"
+						rel="nofollow">Application Developer's Guide</a>
+					or try the
+					<a href="http://www.openlaszlo.org/getstarted" target="_blank"
+						rel="nofollow">ScreenCast</a>
+				</li>
+				<li>
+					<a href="http://openmeetings.apache.org/source-repository.html">
+						browse SVN source
+					</a>
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Tips and Gotchas">
+
+			<p>When you want to develop only client side there are handy ANT
+				tasks so that you only rebuild the SWFs, same for the Java side.
+			</p>
+			<p>
+				It
+				also takes much less time if you do use MySQL as database then
+				rebuilding the software and waiting for Apache Derby to set up the
+				database everytime you did rebuild.
+			</p>
+			<p>
+				<b>Working behind a proxy:</b>
+				If you are sitting behind a proxy you should add some proxy settings
+				before starting the build process.
+				<br />
+				For Apache Ivy see:
+				<a href="http://ant.apache.org/ivy/faq.html" target="_blank" rel="nofollow">http://ant.apache.org/ivy/faq.html
+				</a>
+				<br />
+				For SVN Command Line Client (From CollabNet 1.7) see:
+				<a
+					href="https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html"
+					target="_blank" rel="nofollow">https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html
+				</a>
+			</p>
+
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/CalendarAndTimezone.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/CalendarAndTimezone.xml b/openmeetings-server/src/site/xdoc/CalendarAndTimezone.xml
index 9be46b9..a024075 100644
--- a/openmeetings-server/src/site/xdoc/CalendarAndTimezone.xml
+++ b/openmeetings-server/src/site/xdoc/CalendarAndTimezone.xml
@@ -1,68 +1,68 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Changing the Calendar and Timezone default</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Changing the Calendar and Timezone default">
-
-			<p>
-				In general the timezone is configured in the user profile of each
-				user, so changing the server timezone has no effect how to the users
-				calendar for example.
-				<br />
-				<br />
-				However there are some circumstances where there is no user profile
-				available.
-			</p>
-		</section>
-
-		<section
-			name="Changing servers default timzeone for Emails and Invitations (display)">
-			<p>
-				Goto Administration &gt; Configuration and change the config-key:
-				<tt>default.timezone</tt>
-			</p>
-			<p>Valid timezone have to meet standards! </p>
-		</section>
-
-		<section
-			name="Changing first day in week for calendar from Sunday to Monday">
-			<p>
-				Goto Administration &gt; Configuration and change the config-key:
-				<tt>calendar.firstday</tt>
-			</p>
-			<p>The day that each week begins. The value must be a number that represents the day of the week. Sunday=0, Monday=1, Tuesday=2, etc.</p>
-		</section>
-
-		<section
-			name="Changing the default number of max participants of a conference room created via calendar">
-
-			<p>Goto
-				Administration &gt; Configuration and change the config-key:
-				<tt>calendar.conference.rooms.default.size</tt>
-			</p>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Changing the Calendar and Timezone default</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Changing the Calendar and Timezone default">
+
+			<p>
+				In general the timezone is configured in the user profile of each
+				user, so changing the server timezone has no effect how to the users
+				calendar for example.
+				<br />
+				<br />
+				However there are some circumstances where there is no user profile
+				available.
+			</p>
+		</section>
+
+		<section
+			name="Changing servers default timzeone for Emails and Invitations (display)">
+			<p>
+				Goto Administration &gt; Configuration and change the config-key:
+				<tt>default.timezone</tt>
+			</p>
+			<p>Valid timezone have to meet standards! </p>
+		</section>
+
+		<section
+			name="Changing first day in week for calendar from Sunday to Monday">
+			<p>
+				Goto Administration &gt; Configuration and change the config-key:
+				<tt>calendar.firstday</tt>
+			</p>
+			<p>The day that each week begins. The value must be a number that represents the day of the week. Sunday=0, Monday=1, Tuesday=2, etc.</p>
+		</section>
+
+		<section
+			name="Changing the default number of max participants of a conference room created via calendar">
+
+			<p>Goto
+				Administration &gt; Configuration and change the config-key:
+				<tt>calendar.conference.rooms.default.size</tt>
+			</p>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/CallForLogo.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/CallForLogo.xml b/openmeetings-server/src/site/xdoc/CallForLogo.xml
index dfbee67..d8044af 100644
--- a/openmeetings-server/src/site/xdoc/CallForLogo.xml
+++ b/openmeetings-server/src/site/xdoc/CallForLogo.xml
@@ -1,243 +1,243 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Call For Logo</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="OpenMeetings Call For Logo">
-			<p>
-				As you may know, Apache Openmeetings is part of the Apache Software Foundation, which is a non-profit organization.
-				In order to celebrate The Apache Software Foundation's 15th Anniversary and promote the ASF's more than 200 projects,
-				Apache has launched an effort to get folks who use Apache projects to note that by including one or more of the newly-designed
-				"Powered By Apache" logos on their websites, documentation, marketing materials, etc.<br/><br/>
-
-				Guidelines for use are available here: <a href="http://apache.org/foundation/press/kit/">http://apache.org/foundation/press/kit</a><br/><br/>
-
-				Unfortunately we have no suitable logo for this :(<br/><br/>
-
-				This page is designed to test all proposed logo and choose the best one
-			</p>
-			<p>
-				Please send your logos and opinions to <a href="mail-lists.html">user@ mail list</a> (you need to subscribe first)<br/>
-				Thanks in advance :)
-			</p>
-		</section>
-		<section name="Preview">
-			<div class="powered-preview">
-			</div>
-		</section>
-		<section name="Logos">
-			<script type="text/javascript">
-			//<![CDATA[
-				function applyLogoBig(e) {
-					var ib = e.closest('table').find('.logo-big');
-					var bi = $('#bannerLeft img');
-					bi.attr('src', ib.attr('src'));
-					$('.subhead')[0].scrollIntoView()
-				}
-				function applyLogoSmall(e) {
-					var pp = $('.powered-preview');
-					var l = pp.children('.powered-preview-logo');
-					if (!l.length) {
-						l = $("<div class='powered-preview-logo'></div>");
-						pp.append(l);
-					}
-					var ib = e.closest('table').find('.logo-square');
-					l.css('background-image', 'url(' + ib.attr('src') + ')');
-					$('#Preview')[0].scrollIntoView();
-				}
-			//]]>
-			</script>
-			<h3>Big version</h3>
-			<ol>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-big" src="images/logo.png" alt="Apache OpenMeetings"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Denis Kandrov</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-big" src="images/logos/logo_om_big3.png" alt="Apache OpenMeetings"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Vital Trizna</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-big" src="images/logos/logo_om_big4.png" alt="Apache OpenMeetings"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Vital Trizna</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-big" src="images/logos/logo_om_big5.png" alt="Apache OpenMeetings"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Vital Trizna</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-big" src="images/logos/logo_om_big6.png" alt="Apache OpenMeetings"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Daniel Baker</td>
-						</tr>
-					</table>
-				</li>
-			</ol>
-			<h3>Square version</h3>
-			<ol>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om1.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Denis Kandrov</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small2.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Alvaro Bustos</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small3.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Vital Trizna</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small4.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Vital Trizna</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small5.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Alvaro Bustos</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small6.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Johan Strombom</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small7.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Amir Januzaj</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small8.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Alexander J. Tanchoco</td>
-						</tr>
-					</table>
-				</li>
-				<li>
-					<table>
-						<tr>
-							<td><img class="logo-square" src="images/logos/logo_om_small9.png" alt="Square version" width="50"/></td>
-							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
-						</tr>
-						<tr>
-							<td>Author</td>
-							<td>Daniel Baker</td>
-						</tr>
-					</table>
-				</li>
-			</ol>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Call For Logo</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="OpenMeetings Call For Logo">
+			<p>
+				As you may know, Apache Openmeetings is part of the Apache Software Foundation, which is a non-profit organization.
+				In order to celebrate The Apache Software Foundation's 15th Anniversary and promote the ASF's more than 200 projects,
+				Apache has launched an effort to get folks who use Apache projects to note that by including one or more of the newly-designed
+				"Powered By Apache" logos on their websites, documentation, marketing materials, etc.<br/><br/>
+
+				Guidelines for use are available here: <a href="http://apache.org/foundation/press/kit/">http://apache.org/foundation/press/kit</a><br/><br/>
+
+				Unfortunately we have no suitable logo for this :(<br/><br/>
+
+				This page is designed to test all proposed logo and choose the best one
+			</p>
+			<p>
+				Please send your logos and opinions to <a href="mail-lists.html">user@ mail list</a> (you need to subscribe first)<br/>
+				Thanks in advance :)
+			</p>
+		</section>
+		<section name="Preview">
+			<div class="powered-preview">
+			</div>
+		</section>
+		<section name="Logos">
+			<script type="text/javascript">
+			//<![CDATA[
+				function applyLogoBig(e) {
+					var ib = e.closest('table').find('.logo-big');
+					var bi = $('#bannerLeft img');
+					bi.attr('src', ib.attr('src'));
+					$('.subhead')[0].scrollIntoView()
+				}
+				function applyLogoSmall(e) {
+					var pp = $('.powered-preview');
+					var l = pp.children('.powered-preview-logo');
+					if (!l.length) {
+						l = $("<div class='powered-preview-logo'></div>");
+						pp.append(l);
+					}
+					var ib = e.closest('table').find('.logo-square');
+					l.css('background-image', 'url(' + ib.attr('src') + ')');
+					$('#Preview')[0].scrollIntoView();
+				}
+			//]]>
+			</script>
+			<h3>Big version</h3>
+			<ol>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-big" src="images/logo.png" alt="Apache OpenMeetings"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Denis Kandrov</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-big" src="images/logos/logo_om_big3.png" alt="Apache OpenMeetings"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Vital Trizna</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-big" src="images/logos/logo_om_big4.png" alt="Apache OpenMeetings"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Vital Trizna</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-big" src="images/logos/logo_om_big5.png" alt="Apache OpenMeetings"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Vital Trizna</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-big" src="images/logos/logo_om_big6.png" alt="Apache OpenMeetings"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoBig($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Daniel Baker</td>
+						</tr>
+					</table>
+				</li>
+			</ol>
+			<h3>Square version</h3>
+			<ol>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om1.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Denis Kandrov</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small2.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Alvaro Bustos</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small3.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Vital Trizna</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small4.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Vital Trizna</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small5.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Alvaro Bustos</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small6.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Johan Strombom</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small7.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Amir Januzaj</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small8.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Alexander J. Tanchoco</td>
+						</tr>
+					</table>
+				</li>
+				<li>
+					<table>
+						<tr>
+							<td><img class="logo-square" src="images/logos/logo_om_small9.png" alt="Square version" width="50"/></td>
+							<td><span class="btn btn-primary" onclick="applyLogoSmall($(this));">Apply</span></td>
+						</tr>
+						<tr>
+							<td>Author</td>
+							<td>Daniel Baker</td>
+						</tr>
+					</table>
+				</li>
+			</ol>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/Clustering.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/Clustering.xml b/openmeetings-server/src/site/xdoc/Clustering.xml
index 9d073d1..134e364 100644
--- a/openmeetings-server/src/site/xdoc/Clustering.xml
+++ b/openmeetings-server/src/site/xdoc/Clustering.xml
@@ -1,139 +1,139 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Clustering</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Description">
-			<p>
-				OpenMeetings 2.1 or later is required to use clustering. One database is used for all OpenMeetings 
-				servers, so all database tables are shared across OM instances. Certain folders should be shared 
-				between all servers to allow access to the files/recording.</p>
-		</section>
-		<section name="Configuration">
-			<ul>
-				<li>
-					Multiple OM servers should be set up as described in
-					<a href="installation.html" target="_blank">
-						<b>Installation</b>
-					</a>
-				</li>
-				<li>All servers should be configured to have same Time zone (To avoid
-					Schedulers to drop user sessions as outdated)
-				</li>
-				<li>All servers should be configured to use the same DB</li>
-				<li>Servers should be added in Administration -&gt; Servers section</li>
-			</ul>
-		</section>
-		<section name="Database">
-			<p>All servers should be configured to use the same database. It can be on the server or on the one node 
-			of the cluster.</p> 
-			<ul>
-				<li>Add users who can connect to the database remotely</li>
-				<li>Update <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml</tt>
-					set correct server address, login and password. Also add the following section:
-					<source><![CDATA[<property name="openjpa.RemoteCommitProvider" value="tcp(Addresses=10.1.1.1;10.1.1.2)" />]]></source>
-					Instead of the 10.1.1.1 and 10.1.1.2 set semicolon separated IPs of all nodes of the cluster.
-				</li>
-			</ul>
-		</section>
-		<section name="File systems">
-			<p>If files and recordings using the same physical folders the files and recordings will be available for 
-			each node. You can do this using Samba or NFS, for example. For using NFS do the following:</p>
-			<ul>
-				<li>Install NFS to the data server. In the file <tt>/etc/exports</tt> add the following lines:
-					<source>
-/opt/red5/webapps/openmeetings/upload 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
-/opt/red5/webapps/openmeetings/streams 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
-					</source>
-					Here 10.1.1.2 - is node ip for NFS remote access. Add these lines for all nodes except node with 
-					folders.
-				</li>
-				<li>
-					Install NFS common tools to other nodes. In the file <tt>/etc/fstab</tt> do the following:
-					<source>
-10.1.1.1:/opt/red5/webapps/openmeetings/upload/
-/opt/red5/webapps/openmeetings/upload nfs timeo=50,hard,intr
-10.1.1.1:/opt/red5/webapps/openmeetings/streams/
-/opt/red5/webapps/openmeetings/streams nfs timeo=50,hard,intr
-					</source>
-					Here 10.1.1.1 – data server ip. And run the command:
-					<source>mount -a</source>
-				</li>
-			</ul> 
-		</section>
-		<section name="OM nodes configuration">
-			<p>In the file <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/applicationContext.xml</tt>:</p>
-			<ul>
-				<li>
-					For each node uncomment line:
-					<source>
-<![CDATA[
-<!-- Need to be uncommented and set to the real ID if in cluster mode-->
-<property name="serverId" value="1" />
-]]>
-					</source>
-					and input the unique value for each node.
-				</li>
-				<li> 
-					Replace <tt>&lt;ref bean="openmeetings.HashMapStore" /&gt;  &lt;!-- Memory based session cache by default --&gt;</tt><br/>
-					with <tt>&lt;ref bean="openmeetings.DatabaseStore" /&gt;</tt> 
-					(Currently commented out with following comment: <tt>"The following section should be used in clustering mode"</tt>)
-				</li>
-			</ul>
-		</section>
-		<section name="Configuring cluster in Administration">
-			<p>Run red5 on each node. Login to the system as admin.</p>
-			<ul>
-				<li>Go to the <tt>Administration -&gt; Users</tt> and create Webservice user (only access via SOAP).</li>
-				<li>
-					Go to the <tt>Administration -&gt; Servers</tt> and add all cluster nodes with the following settings:
-					<source>
-Server Name = node name;
-Active = check the checkbox. If the checkbox is checked it means node is active and you can use this node;
-Server Address = node ip;
-HTTP Port = 5080 - port for http part of Openmeetings;
-User (SOAP Access) = login of Webservice user from the previous step;
-Password = password of Webservise user;
-Webapp path = openmeetings - path where OM installed on this node, it would be better if this path will be the same for all nodes;
-Protocol = http.
-					</source>
-				</li> 
-			</ul>
-			<img src="images/cluster1.png" alt="" width="650" height="461" />
-		</section>
-		<section name="Ensure everything works as expected">
-			<ul>
-				<li>Set up the cluster and loggin with two users, go to the same room (also check before room 
-				entering that the status page with the room list shows the correct number of participants before 
-				entering the room). You should login to the same server initially, the server will redirect you 
-				for the conference room to the appropriate server automatically. Both users should be in the same room.
-				</li>
-				<li>Do the same with only two users but go to _different_ rooms. The calculation should send 
-				both users to different servers, cause based on the calculation two different rooms on a cluster 
-				with two nodes should go exactly one room for each node. You can now loggin really to node1 
-				and node2 of your cluster while those users are loggedin and go to <tt>Administration &gt; Connections</tt>
-				and check in the column "servers" where they are located. They should be on different server.
-				</li>
-			</ul>
-			<img src="images/cluster2.png" alt="" width="650" height="369" />
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Clustering</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Description">
+			<p>
+				OpenMeetings 2.1 or later is required to use clustering. One database is used for all OpenMeetings 
+				servers, so all database tables are shared across OM instances. Certain folders should be shared 
+				between all servers to allow access to the files/recording.</p>
+		</section>
+		<section name="Configuration">
+			<ul>
+				<li>
+					Multiple OM servers should be set up as described in
+					<a href="installation.html" target="_blank">
+						<b>Installation</b>
+					</a>
+				</li>
+				<li>All servers should be configured to have same Time zone (To avoid
+					Schedulers to drop user sessions as outdated)
+				</li>
+				<li>All servers should be configured to use the same DB</li>
+				<li>Servers should be added in Administration -&gt; Servers section</li>
+			</ul>
+		</section>
+		<section name="Database">
+			<p>All servers should be configured to use the same database. It can be on the server or on the one node 
+			of the cluster.</p> 
+			<ul>
+				<li>Add users who can connect to the database remotely</li>
+				<li>Update <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml</tt>
+					set correct server address, login and password. Also add the following section:
+					<source><![CDATA[<property name="openjpa.RemoteCommitProvider" value="tcp(Addresses=10.1.1.1;10.1.1.2)" />]]></source>
+					Instead of the 10.1.1.1 and 10.1.1.2 set semicolon separated IPs of all nodes of the cluster.
+				</li>
+			</ul>
+		</section>
+		<section name="File systems">
+			<p>If files and recordings using the same physical folders the files and recordings will be available for 
+			each node. You can do this using Samba or NFS, for example. For using NFS do the following:</p>
+			<ul>
+				<li>Install NFS to the data server. In the file <tt>/etc/exports</tt> add the following lines:
+					<source>
+/opt/red5/webapps/openmeetings/upload 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
+/opt/red5/webapps/openmeetings/streams 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
+					</source>
+					Here 10.1.1.2 - is node ip for NFS remote access. Add these lines for all nodes except node with 
+					folders.
+				</li>
+				<li>
+					Install NFS common tools to other nodes. In the file <tt>/etc/fstab</tt> do the following:
+					<source>
+10.1.1.1:/opt/red5/webapps/openmeetings/upload/
+/opt/red5/webapps/openmeetings/upload nfs timeo=50,hard,intr
+10.1.1.1:/opt/red5/webapps/openmeetings/streams/
+/opt/red5/webapps/openmeetings/streams nfs timeo=50,hard,intr
+					</source>
+					Here 10.1.1.1 – data server ip. And run the command:
+					<source>mount -a</source>
+				</li>
+			</ul> 
+		</section>
+		<section name="OM nodes configuration">
+			<p>In the file <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/applicationContext.xml</tt>:</p>
+			<ul>
+				<li>
+					For each node uncomment line:
+					<source>
+<![CDATA[
+<!-- Need to be uncommented and set to the real ID if in cluster mode-->
+<property name="serverId" value="1" />
+]]>
+					</source>
+					and input the unique value for each node.
+				</li>
+				<li> 
+					Replace <tt>&lt;ref bean="openmeetings.HashMapStore" /&gt;  &lt;!-- Memory based session cache by default --&gt;</tt><br/>
+					with <tt>&lt;ref bean="openmeetings.DatabaseStore" /&gt;</tt> 
+					(Currently commented out with following comment: <tt>"The following section should be used in clustering mode"</tt>)
+				</li>
+			</ul>
+		</section>
+		<section name="Configuring cluster in Administration">
+			<p>Run red5 on each node. Login to the system as admin.</p>
+			<ul>
+				<li>Go to the <tt>Administration -&gt; Users</tt> and create Webservice user (only access via SOAP).</li>
+				<li>
+					Go to the <tt>Administration -&gt; Servers</tt> and add all cluster nodes with the following settings:
+					<source>
+Server Name = node name;
+Active = check the checkbox. If the checkbox is checked it means node is active and you can use this node;
+Server Address = node ip;
+HTTP Port = 5080 - port for http part of Openmeetings;
+User (SOAP Access) = login of Webservice user from the previous step;
+Password = password of Webservise user;
+Webapp path = openmeetings - path where OM installed on this node, it would be better if this path will be the same for all nodes;
+Protocol = http.
+					</source>
+				</li> 
+			</ul>
+			<img src="images/cluster1.png" alt="" width="650" height="461" />
+		</section>
+		<section name="Ensure everything works as expected">
+			<ul>
+				<li>Set up the cluster and loggin with two users, go to the same room (also check before room 
+				entering that the status page with the room list shows the correct number of participants before 
+				entering the room). You should login to the same server initially, the server will redirect you 
+				for the conference room to the appropriate server automatically. Both users should be in the same room.
+				</li>
+				<li>Do the same with only two users but go to _different_ rooms. The calculation should send 
+				both users to different servers, cause based on the calculation two different rooms on a cluster 
+				with two nodes should go exactly one room for each node. You can now loggin really to node1 
+				and node2 of your cluster while those users are loggedin and go to <tt>Administration &gt; Connections</tt>
+				and check in the column "servers" where they are located. They should be on different server.
+				</li>
+			</ul>
+			<img src="images/cluster2.png" alt="" width="650" height="369" />
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/CommandLineAdmin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/CommandLineAdmin.xml b/openmeetings-server/src/site/xdoc/CommandLineAdmin.xml
index 41630e9..c0fa323 100644
--- a/openmeetings-server/src/site/xdoc/CommandLineAdmin.xml
+++ b/openmeetings-server/src/site/xdoc/CommandLineAdmin.xml
@@ -1,100 +1,100 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Command line admin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="Usage">
-			<p>To avoid intensive traffic utilization and save your time you can
-				use command line admin to achieve following tasks:</p>
-			<ul>
-				<li>Install using defaults</li>
-				<li>Install from backup</li>
-				<li>Backup</li>
-				<li>Cleanup</li>
-			</ul>
-			<p>Some example commands:</p>
-			<p>MySQL (requires to place the MySQL JDBC driver into webapps/openmeetings/WEB-INF/lib before running the command):</p>
-			<source>./admin.sh -i -v -tz Europe/Berlin -email your.email@gmail.com -group webbase -user admin --smtp-server localhost \
-	--db-type mysql --db-name openmeetings_db --email-auth-user noreply@webbase-design.de --password 123qweasd \
-	--system-email-address noreply@webbase-design.de --db-user root --db-host localhost --email-auth-pass 123qweasd
-			</source>
-			<p>Derby (Not recommended for production environment):</p>
-			<source>./admin.sh -i -v -tz Europe/Berlin -email seba.wagner@gmail.com -group webbase -user admin --smtp-server localhost \
-	--email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --email-auth-pass 123qweasd
-			</source>
-		</section>
-		<section name="Command reference">	
-<source><![CDATA[
- -v,--verbose                        verbose error messages
---------------------------------------------------------------------------------------------------
- -h,--help                           prints this message
---------------------------------------------------------------------------------------------------
- -b,--backup                         Backups OM
-   -file <arg>                       (optional) file used for backup/restore/install
-      --exclude-files                (optional) should backup exclude files [default: include]
---------------------------------------------------------------------------------------------------
- -r,--restore                        Restores OM
-   -file <arg>                       file used for backup/restore/install
---------------------------------------------------------------------------------------------------
- -l,--LDAP                           Import LDAP users into DB
-   -d,--domain-id <arg>              LDAP domain Id
-      --print-only                   (optional) Print users found instead of importing
---------------------------------------------------------------------------------------------------
- -i,--install                        Fill DB table, and make OM usable
-   -tz <arg>                         Default server time zone, and time zone for the selected user
-                                     (mutually exclusive with 'file')
-   -group <arg>                      The name of the default user group (mutually exclusive with
-                                     'file')
-   -email <arg>                      Email of the default user (mutually exclusive with 'file')
-   -user <arg>                       Login name of the default user, minimum 4 characters (mutually
-                                     exclusive with 'file')
-   -file <arg>                       file used for backup/restore/install
-      --password <arg>               (optional) Password of the default user, minimum 4 characters
-                                     (will be prompted if not set)
-      --system-email-address <arg>   (optional) System e-mail address [default:
-                                     noreply@openmeetings.apache.org]
-      --smtp-server <arg>            (optional) SMTP server for outgoing e-mails [default:
-                                     localhost]
-      --smtp-port <arg>              (optional) SMTP server for outgoing e-mails [default: 25]
-      --email-auth-user <arg>        (optional) Email auth username (anonymous connection will be
-                                     used if not set)
-      --email-auth-pass <arg>        (optional) Email auth password (anonymous connection will be
-                                     used if not set)
-      --email-use-tls                (optional) Is secure e-mail connection [default: no]
-      --skip-default-rooms           (optional) Do not create default rooms [created by default]
-      --disable-frontend-register    (optional) Do not allow front end register [allowed by default]
-      --db-type <arg>                (optional) The type of the DB to be used
-      --db-host <arg>                (optional) DNS name or IP address of database
-      --db-port <arg>                (optional) Database port
-      --db-name <arg>                (optional) The name of Openmeetings database
-      --db-user <arg>                (optional) User with write access to the DB specified
-      --db-pass <arg>                (optional) Password of the user with write access to the DB
-                                     specified
-      --drop                         (optional) Drop database before installation
-      --force                        (optional) Install without checking the existence of old data
-                                     in the database.
---------------------------------------------------------------------------------------------------
- -f,--files                          File operations - statictics/cleanup
-      --cleanup                      (optional) Should intermediate files be clean up
---------------------------------------------------------------------------------------------------
-]]></source>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Command line admin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="Usage">
+			<p>To avoid intensive traffic utilization and save your time you can
+				use command line admin to achieve following tasks:</p>
+			<ul>
+				<li>Install using defaults</li>
+				<li>Install from backup</li>
+				<li>Backup</li>
+				<li>Cleanup</li>
+			</ul>
+			<p>Some example commands:</p>
+			<p>MySQL (requires to place the MySQL JDBC driver into webapps/openmeetings/WEB-INF/lib before running the command):</p>
+			<source>./admin.sh -i -v -tz Europe/Berlin -email your.email@gmail.com -group webbase -user admin --smtp-server localhost \
+	--db-type mysql --db-name openmeetings_db --email-auth-user noreply@webbase-design.de --password 123qweasd \
+	--system-email-address noreply@webbase-design.de --db-user root --db-host localhost --email-auth-pass 123qweasd
+			</source>
+			<p>Derby (Not recommended for production environment):</p>
+			<source>./admin.sh -i -v -tz Europe/Berlin -email seba.wagner@gmail.com -group webbase -user admin --smtp-server localhost \
+	--email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --email-auth-pass 123qweasd
+			</source>
+		</section>
+		<section name="Command reference">	
+<source><![CDATA[
+ -v,--verbose                        verbose error messages
+--------------------------------------------------------------------------------------------------
+ -h,--help                           prints this message
+--------------------------------------------------------------------------------------------------
+ -b,--backup                         Backups OM
+   -file <arg>                       (optional) file used for backup/restore/install
+      --exclude-files                (optional) should backup exclude files [default: include]
+--------------------------------------------------------------------------------------------------
+ -r,--restore                        Restores OM
+   -file <arg>                       file used for backup/restore/install
+--------------------------------------------------------------------------------------------------
+ -l,--LDAP                           Import LDAP users into DB
+   -d,--domain-id <arg>              LDAP domain Id
+      --print-only                   (optional) Print users found instead of importing
+--------------------------------------------------------------------------------------------------
+ -i,--install                        Fill DB table, and make OM usable
+   -tz <arg>                         Default server time zone, and time zone for the selected user
+                                     (mutually exclusive with 'file')
+   -group <arg>                      The name of the default user group (mutually exclusive with
+                                     'file')
+   -email <arg>                      Email of the default user (mutually exclusive with 'file')
+   -user <arg>                       Login name of the default user, minimum 4 characters (mutually
+                                     exclusive with 'file')
+   -file <arg>                       file used for backup/restore/install
+      --password <arg>               (optional) Password of the default user, minimum 4 characters
+                                     (will be prompted if not set)
+      --system-email-address <arg>   (optional) System e-mail address [default:
+                                     noreply@openmeetings.apache.org]
+      --smtp-server <arg>            (optional) SMTP server for outgoing e-mails [default:
+                                     localhost]
+      --smtp-port <arg>              (optional) SMTP server for outgoing e-mails [default: 25]
+      --email-auth-user <arg>        (optional) Email auth username (anonymous connection will be
+                                     used if not set)
+      --email-auth-pass <arg>        (optional) Email auth password (anonymous connection will be
+                                     used if not set)
+      --email-use-tls                (optional) Is secure e-mail connection [default: no]
+      --skip-default-rooms           (optional) Do not create default rooms [created by default]
+      --disable-frontend-register    (optional) Do not allow front end register [allowed by default]
+      --db-type <arg>                (optional) The type of the DB to be used
+      --db-host <arg>                (optional) DNS name or IP address of database
+      --db-port <arg>                (optional) Database port
+      --db-name <arg>                (optional) The name of Openmeetings database
+      --db-user <arg>                (optional) User with write access to the DB specified
+      --db-pass <arg>                (optional) Password of the user with write access to the DB
+                                     specified
+      --drop                         (optional) Drop database before installation
+      --force                        (optional) Install without checking the existence of old data
+                                     in the database.
+--------------------------------------------------------------------------------------------------
+ -f,--files                          File operations - statictics/cleanup
+      --cleanup                      (optional) Should intermediate files be clean up
+--------------------------------------------------------------------------------------------------
+]]></source>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/ConferenceRoomLayoutOptions.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/ConferenceRoomLayoutOptions.xml b/openmeetings-server/src/site/xdoc/ConferenceRoomLayoutOptions.xml
index df66401..5703eeb 100644
--- a/openmeetings-server/src/site/xdoc/ConferenceRoomLayoutOptions.xml
+++ b/openmeetings-server/src/site/xdoc/ConferenceRoomLayoutOptions.xml
@@ -1,87 +1,87 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Layout options for a conference room in OpenMeetings</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="Layout options for conference rooms">
-			<p>
-				Each room has a number of attributes to generate different layouts.
-				You can change those values individually for each room in Administration &gt; Rooms
-			</p>
-			<p></p>
-			<table>
-				<tr>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> key </th>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> default </th>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> meaning </th>
-					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> availabe since OpenMeetings version </th>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideTopBar </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the top bar with the menus and exit button </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideChat </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the chat tab and use space for whiteboard </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActivitiesAndActions </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the activities window with the notofications aber user activities</td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideFilesExplorer </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the file explorer</td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActionsMenu </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the menu with the actions</td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideScreenSharing </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the button to start screensharing/recording</td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideWhiteboard </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the whiteboard, if this option is true, the videos will be in the area of the whiteboard</td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-				<tr>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> showMicrophoneStatus </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Show the current status of the microphone (off/on) on the bottom of each video view</td>
-					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
-				</tr>
-			</table>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Layout options for a conference room in OpenMeetings</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="Layout options for conference rooms">
+			<p>
+				Each room has a number of attributes to generate different layouts.
+				You can change those values individually for each room in Administration &gt; Rooms
+			</p>
+			<p></p>
+			<table>
+				<tr>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> key </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> default </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> meaning </th>
+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> availabe since OpenMeetings version </th>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideTopBar </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the top bar with the menus and exit button </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideChat </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the chat tab and use space for whiteboard </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActivitiesAndActions </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the activities window with the notofications aber user activities</td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideFilesExplorer </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the file explorer</td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActionsMenu </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the menu with the actions</td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideScreenSharing </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the button to start screensharing/recording</td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideWhiteboard </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the whiteboard, if this option is true, the videos will be in the area of the whiteboard</td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+				<tr>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> showMicrophoneStatus </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Show the current status of the microphone (off/on) on the bottom of each video view</td>
+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>
+				</tr>
+			</table>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/ConfluencePlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/ConfluencePlugin.xml b/openmeetings-server/src/site/xdoc/ConfluencePlugin.xml
index 7df5844..c59c8d3 100644
--- a/openmeetings-server/src/site/xdoc/ConfluencePlugin.xml
+++ b/openmeetings-server/src/site/xdoc/ConfluencePlugin.xml
@@ -1,49 +1,49 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Confluence Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Confluence Plugin for OpenMeetings">
-			<p>Sources are available at <a href="https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/confluence">https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/confluence</a></p>
-			<p>
-				To get SNAPSHOTS for testing please contact <a href="mail-lists.html">Mailing lists</a>
-			</p>
-		</section>
-
-		<section name="Features">
-			<p>The plugin contains the following features: </p>
-			<ul>
-				<li>Create videoconference rooms through Confluence: </li>
-				<li>
-					<ol>
-						<li>Integrated with Confluence content </li>
-						<li>Configurable room type </li>
-					</ol>
-				</li>
-			</ul>
-		</section>
-
-		<section name="Demo video">
-			<p>The demo video of Confluence plugin show you the plugin in action </p>
-			<iframe width="640" height="390" src="http://www.youtube.com/embed/YFKlXggtld0" frameborder="0" allowfullscreen=""></iframe>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Confluence Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Confluence Plugin for OpenMeetings">
+			<p>Sources are available at <a href="https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/confluence">https://svn.apache.org/repos/asf/openmeetings/plugin/trunk/confluence</a></p>
+			<p>
+				To get SNAPSHOTS for testing please contact <a href="mail-lists.html">Mailing lists</a>
+			</p>
+		</section>
+
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Create videoconference rooms through Confluence: </li>
+				<li>
+					<ol>
+						<li>Integrated with Confluence content </li>
+						<li>Configurable room type </li>
+					</ol>
+				</li>
+			</ul>
+		</section>
+
+		<section name="Demo video">
+			<p>The demo video of Confluence plugin show you the plugin in action </p>
+			<iframe width="640" height="390" src="http://www.youtube.com/embed/YFKlXggtld0" frameborder="0" allowfullscreen=""></iframe>
+		</section>
+	</body>
+</document>


[17/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
index ad8b691..0b62a7e 100644
--- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
+++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/ScreenV1Encoder.java
@@ -1,202 +1,202 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.screenshare;
-
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeX;
-import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeY;
-import static org.red5.io.IoConstants.FLAG_CODEC_SCREEN;
-import static org.red5.io.IoConstants.FLAG_FRAMETYPE_INTERFRAME;
-import static org.red5.io.IoConstants.FLAG_FRAMETYPE_KEYFRAME;
-
-import java.awt.Rectangle;
-import java.awt.Robot;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.zip.Deflater;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.red5.server.net.rtmp.event.VideoData;
-
-public class ScreenV1Encoder extends BaseScreenEncoder {
-	private int[][] last = null;
-	private static int KEY_FRAME_INDEX = 25;
-	private static int DEFAULT_BLOCK_SIZE = 32;
-	private static int DEFAULT_SCREEN_WIDTH = 1920;
-	private static int DEFAULT_SCREEN_HEIGHT = 1080;
-	private int keyFrameIndex;
-	private int frameCount = 0;
-	private int blockSize;
-	private ByteArrayOutputStream ba = new ByteArrayOutputStream(50 + 3 * DEFAULT_SCREEN_WIDTH * DEFAULT_SCREEN_HEIGHT);
-	private byte[] areaBuf = null;
-	private Deflater d = new Deflater(Deflater.DEFAULT_COMPRESSION);
-	private byte[] zipBuf = null;
-	private VideoData unalteredFrame = null;
-	
-	public ScreenV1Encoder() {
-		this(KEY_FRAME_INDEX, DEFAULT_BLOCK_SIZE);
-	}
-	
-	public ScreenV1Encoder(int keyFrameIndex) {
-		this(keyFrameIndex, DEFAULT_BLOCK_SIZE);
-	}
-	
-	//will create square blocks
-	public ScreenV1Encoder(int keyFrameIndex, int blockSize) {
-		this.keyFrameIndex = keyFrameIndex;
-		if (blockSize < 16 || blockSize > 256 || blockSize % 16 != 0) {
-			throw new RuntimeException("Invalid block size passed: " + blockSize + " should be: 'from 16 to 256 in multiples of 16'");
-		}
-		this.blockSize = blockSize;
-
-		areaBuf = new byte[3 * blockSize * blockSize];
-		zipBuf = new byte[3 * blockSize * blockSize];
-	}
-
-	private static VideoData getData(byte[] data) {
-		IoBuffer buf = IoBuffer.allocate(data.length);
-		buf.clear();
-		buf.put(data);
-		buf.flip();
-		return new VideoData(buf);
-	}
-	
-	@Override
-	public void createUnalteredFrame() throws IOException {
-		if (last == null) {
-			return;
-		}
-		if (unalteredFrame == null) {
-			ByteArrayOutputStream ba = new ByteArrayOutputStream(200);
-			
-			Rectangle _area = new Rectangle(resizeX, resizeY);
-			//header
-			ba.write(getTag(FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));
-			writeShort(ba, _area.width + ((blockSize / 16 - 1) << 12));
-			writeShort(ba, _area.height + ((blockSize / 16 - 1) << 12));
-			Rectangle area = getNextBlock(_area, null);
-			while (area.width > 0 && area.height > 0) {
-				writeShort(ba, 0);
-				area = getNextBlock(_area, area);
-			}
-			unalteredFrame = getData(ba.toByteArray());
-		}
-	}
-	
-	@Override
-	public VideoData getUnalteredFrame() {
-		if (unalteredFrame != null && (frameCount % keyFrameIndex) != 0) {
-			frameCount++;
-		}
-		return unalteredFrame;
-	}
-	
-	@Override
-	public synchronized VideoData encode(int[][] img) throws IOException {
-		ba.reset();
-		Rectangle imgArea = new Rectangle(img.length, img[0].length);
-		Rectangle area = getNextBlock(imgArea, null);
-		boolean isKeyFrame = (frameCount++ % keyFrameIndex) == 0 || last == null;
-		
-		//header
-		ba.write(getTag(isKeyFrame ? FLAG_FRAMETYPE_KEYFRAME : FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));
-		writeShort(ba, imgArea.width + ((blockSize / 16 - 1) << 12));
-		writeShort(ba, imgArea.height + ((blockSize / 16 - 1) << 12));
-		
-		while (area.width > 0 && area.height > 0) {
-			writeBytesIfChanged(ba, isKeyFrame, img, area);
-			area = getNextBlock(imgArea, area);
-		}
-		last = img;
-		return getData(ba.toByteArray());
-	}
-	
-	@Override
-	public void reset() {
-		last = null;
-		unalteredFrame = null;
-	}
-	
-	private Rectangle getNextBlock(Rectangle img, Rectangle _prev) {
-		Rectangle prev;
-		if (_prev == null) {
-			prev = new Rectangle(0, Math.max(0, img.height - blockSize), blockSize, blockSize);
-		} else {
-			prev = new Rectangle(_prev);
-			if (prev.x + prev.width == img.getWidth()) {
-				if (prev.y == 0) return new Rectangle(); //the end of the image
-				//next row
-				prev.x = 0; //reset position
-				prev.width = blockSize; //reset width
-				prev.height = (prev.y > blockSize ? blockSize : prev.y);
-				prev.y -= prev.height;
-			} else {
-				prev.x += blockSize;
-			}
-		}
-		return img.intersection(prev); 
-	}
-
-	private void writeBytesIfChanged(ByteArrayOutputStream ba, boolean isKeyFrame, int[][] img, Rectangle area) throws IOException {
-		boolean changed = isKeyFrame;
-		int count = 0;
-		for (int y = area.y + area.height - 1; y >= area.y; --y) {
-			for (int x = area.x; x < area.x + area.width; ++x) {
-				int pixel = img[x][y];
-				if (!changed && (last == null || pixel != last[x][y])) {
-					changed = true;
-				}
-				areaBuf[count++] = (byte)(pixel & 0xFF);			// Blue component
-				areaBuf[count++] = (byte)((pixel >> 8) & 0xFF);		// Green component
-				areaBuf[count++] = (byte)((pixel >> 16) & 0xFF);	// Red component
-			}
-		}
-		if (changed) {
-			d.reset();
-			d.setInput(areaBuf, 0, count);
-			d.finish();
-			int written = d.deflate(zipBuf);
-			writeShort(ba, written);
-			ba.write(zipBuf, 0, written);
-		} else {
-			writeShort(ba, 0);
-		}
-	}
-
-	public int getTag(final int frame, final int codec) {
-		return ((frame & 0x0F) << 4) + ((codec & 0x0F) << 0);
-	}
-	
-	private static void writeShort(OutputStream os, final int n) throws IOException {
-		os.write((n >> 8) & 0xFF);
-		os.write((n >> 0) & 0xFF);
-	}
-	
-	public static int[][] getImage(Rectangle screen, Robot robot) {
-		int[][] buffer = new int[resizeX][resizeY];
-		BufferedImage image = resize(robot.createScreenCapture(screen), new Rectangle(resizeX, resizeY));
-		for (int x = 0; x < image.getWidth(); ++x) {
-			for (int y = 0; y < image.getHeight(); ++y) {
-				buffer[x][y] = image.getRGB(x, y);
-			}
-		}
-		return buffer;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screenshare;
+
+import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeX;
+import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.resizeY;
+import static org.red5.io.IoConstants.FLAG_CODEC_SCREEN;
+import static org.red5.io.IoConstants.FLAG_FRAMETYPE_INTERFRAME;
+import static org.red5.io.IoConstants.FLAG_FRAMETYPE_KEYFRAME;
+
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.zip.Deflater;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.red5.server.net.rtmp.event.VideoData;
+
+public class ScreenV1Encoder extends BaseScreenEncoder {
+	private int[][] last = null;
+	private static int KEY_FRAME_INDEX = 25;
+	private static int DEFAULT_BLOCK_SIZE = 32;
+	private static int DEFAULT_SCREEN_WIDTH = 1920;
+	private static int DEFAULT_SCREEN_HEIGHT = 1080;
+	private int keyFrameIndex;
+	private int frameCount = 0;
+	private int blockSize;
+	private ByteArrayOutputStream ba = new ByteArrayOutputStream(50 + 3 * DEFAULT_SCREEN_WIDTH * DEFAULT_SCREEN_HEIGHT);
+	private byte[] areaBuf = null;
+	private Deflater d = new Deflater(Deflater.DEFAULT_COMPRESSION);
+	private byte[] zipBuf = null;
+	private VideoData unalteredFrame = null;
+	
+	public ScreenV1Encoder() {
+		this(KEY_FRAME_INDEX, DEFAULT_BLOCK_SIZE);
+	}
+	
+	public ScreenV1Encoder(int keyFrameIndex) {
+		this(keyFrameIndex, DEFAULT_BLOCK_SIZE);
+	}
+	
+	//will create square blocks
+	public ScreenV1Encoder(int keyFrameIndex, int blockSize) {
+		this.keyFrameIndex = keyFrameIndex;
+		if (blockSize < 16 || blockSize > 256 || blockSize % 16 != 0) {
+			throw new RuntimeException("Invalid block size passed: " + blockSize + " should be: 'from 16 to 256 in multiples of 16'");
+		}
+		this.blockSize = blockSize;
+
+		areaBuf = new byte[3 * blockSize * blockSize];
+		zipBuf = new byte[3 * blockSize * blockSize];
+	}
+
+	private static VideoData getData(byte[] data) {
+		IoBuffer buf = IoBuffer.allocate(data.length);
+		buf.clear();
+		buf.put(data);
+		buf.flip();
+		return new VideoData(buf);
+	}
+	
+	@Override
+	public void createUnalteredFrame() throws IOException {
+		if (last == null) {
+			return;
+		}
+		if (unalteredFrame == null) {
+			ByteArrayOutputStream ba = new ByteArrayOutputStream(200);
+			
+			Rectangle _area = new Rectangle(resizeX, resizeY);
+			//header
+			ba.write(getTag(FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));
+			writeShort(ba, _area.width + ((blockSize / 16 - 1) << 12));
+			writeShort(ba, _area.height + ((blockSize / 16 - 1) << 12));
+			Rectangle area = getNextBlock(_area, null);
+			while (area.width > 0 && area.height > 0) {
+				writeShort(ba, 0);
+				area = getNextBlock(_area, area);
+			}
+			unalteredFrame = getData(ba.toByteArray());
+		}
+	}
+	
+	@Override
+	public VideoData getUnalteredFrame() {
+		if (unalteredFrame != null && (frameCount % keyFrameIndex) != 0) {
+			frameCount++;
+		}
+		return unalteredFrame;
+	}
+	
+	@Override
+	public synchronized VideoData encode(int[][] img) throws IOException {
+		ba.reset();
+		Rectangle imgArea = new Rectangle(img.length, img[0].length);
+		Rectangle area = getNextBlock(imgArea, null);
+		boolean isKeyFrame = (frameCount++ % keyFrameIndex) == 0 || last == null;
+		
+		//header
+		ba.write(getTag(isKeyFrame ? FLAG_FRAMETYPE_KEYFRAME : FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));
+		writeShort(ba, imgArea.width + ((blockSize / 16 - 1) << 12));
+		writeShort(ba, imgArea.height + ((blockSize / 16 - 1) << 12));
+		
+		while (area.width > 0 && area.height > 0) {
+			writeBytesIfChanged(ba, isKeyFrame, img, area);
+			area = getNextBlock(imgArea, area);
+		}
+		last = img;
+		return getData(ba.toByteArray());
+	}
+	
+	@Override
+	public void reset() {
+		last = null;
+		unalteredFrame = null;
+	}
+	
+	private Rectangle getNextBlock(Rectangle img, Rectangle _prev) {
+		Rectangle prev;
+		if (_prev == null) {
+			prev = new Rectangle(0, Math.max(0, img.height - blockSize), blockSize, blockSize);
+		} else {
+			prev = new Rectangle(_prev);
+			if (prev.x + prev.width == img.getWidth()) {
+				if (prev.y == 0) return new Rectangle(); //the end of the image
+				//next row
+				prev.x = 0; //reset position
+				prev.width = blockSize; //reset width
+				prev.height = (prev.y > blockSize ? blockSize : prev.y);
+				prev.y -= prev.height;
+			} else {
+				prev.x += blockSize;
+			}
+		}
+		return img.intersection(prev); 
+	}
+
+	private void writeBytesIfChanged(ByteArrayOutputStream ba, boolean isKeyFrame, int[][] img, Rectangle area) throws IOException {
+		boolean changed = isKeyFrame;
+		int count = 0;
+		for (int y = area.y + area.height - 1; y >= area.y; --y) {
+			for (int x = area.x; x < area.x + area.width; ++x) {
+				int pixel = img[x][y];
+				if (!changed && (last == null || pixel != last[x][y])) {
+					changed = true;
+				}
+				areaBuf[count++] = (byte)(pixel & 0xFF);			// Blue component
+				areaBuf[count++] = (byte)((pixel >> 8) & 0xFF);		// Green component
+				areaBuf[count++] = (byte)((pixel >> 16) & 0xFF);	// Red component
+			}
+		}
+		if (changed) {
+			d.reset();
+			d.setInput(areaBuf, 0, count);
+			d.finish();
+			int written = d.deflate(zipBuf);
+			writeShort(ba, written);
+			ba.write(zipBuf, 0, written);
+		} else {
+			writeShort(ba, 0);
+		}
+	}
+
+	public int getTag(final int frame, final int codec) {
+		return ((frame & 0x0F) << 4) + ((codec & 0x0F) << 0);
+	}
+	
+	private static void writeShort(OutputStream os, final int n) throws IOException {
+		os.write((n >> 8) & 0xFF);
+		os.write((n >> 0) & 0xFF);
+	}
+	
+	public static int[][] getImage(Rectangle screen, Robot robot) {
+		int[][] buffer = new int[resizeX][resizeY];
+		BufferedImage image = resize(robot.createScreenCapture(screen), new Rectangle(resizeX, resizeY));
+		for (int x = 0; x < image.getWidth(); ++x) {
+			for (int y = 0; y < image.getHeight(); ++y) {
+				buffer[x][y] = image.getRGB(x, y);
+			}
+		}
+		return buffer;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/MouseListenerable.java
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/MouseListenerable.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/MouseListenerable.java
index 1c442dd..33c8ae5 100644
--- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/MouseListenerable.java
+++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/MouseListenerable.java
@@ -1,32 +1,32 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.screenshare.gui;
-
-import java.awt.event.MouseAdapter;
-
-import javax.swing.JLabel;
-
-public class MouseListenerable extends JLabel {
-	private static final long serialVersionUID = 1L;
-
-	public void addListener(MouseAdapter listner) {
-		addMouseListener(listner);
-		addMouseMotionListener(listner);
-	}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screenshare.gui;
+
+import java.awt.event.MouseAdapter;
+
+import javax.swing.JLabel;
+
+public class MouseListenerable extends JLabel {
+	private static final long serialVersionUID = 1L;
+
+	public void addListener(MouseAdapter listner) {
+		addMouseListener(listner);
+		addMouseMotionListener(listner);
+	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/NumberSpinner.java
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/NumberSpinner.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/NumberSpinner.java
index 22e9edc..d349e16 100644
--- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/NumberSpinner.java
+++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/gui/NumberSpinner.java
@@ -1,35 +1,35 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.screenshare.gui;
-
-import javax.swing.JSpinner;
-import javax.swing.SpinnerNumberModel;
-
-public class NumberSpinner extends JSpinner {
-	private static final long serialVersionUID = 1L;
-
-	public NumberSpinner(int value, int min, int max, int step) {
-		super(new SpinnerNumberModel(value, min, max, step));
-	}
-	
-	@Override
-	public Integer getValue() {
-		return (Integer)super.getValue();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screenshare.gui;
+
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+
+public class NumberSpinner extends JSpinner {
+	private static final long serialVersionUID = 1L;
+
+	public NumberSpinner(int value, int min, int max, int step) {
+		super(new SpinnerNumberModel(value, min, max, step));
+	}
+	
+	@Override
+	public Integer getValue() {
+		return (Integer)super.getValue();
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/main/resources/logback.xsd
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/resources/logback.xsd b/openmeetings-screenshare/src/main/resources/logback.xsd
index 7e75655..cc5ad1c 100644
--- a/openmeetings-screenshare/src/main/resources/logback.xsd
+++ b/openmeetings-screenshare/src/main/resources/logback.xsd
@@ -1,109 +1,109 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
-  <xs:element name="configuration">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element ref="contextName"/>
-        <xs:element ref="jmxConfigurator"/>
-        <xs:element maxOccurs="unbounded" ref="appender"/>
-        <xs:element maxOccurs="unbounded" ref="logger"/>
-        <xs:element ref="root"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="contextName" type="xs:string"/>
-  <xs:element name="jmxConfigurator">
-    <xs:complexType>
-      <xs:attribute name="contextName" use="required"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="appender">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:sequence minOccurs="0">
-          <xs:element ref="File"/>
-          <xs:element ref="Append"/>
-          <xs:element ref="Encoding"/>
-          <xs:element ref="BufferedIO"/>
-          <xs:element ref="ImmediateFlush"/>
-        </xs:sequence>
-        <xs:element ref="layout"/>
-      </xs:sequence>
-      <xs:attribute name="class" use="required"/>
-      <xs:attribute name="name" use="required" type="xs:NCName"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="File" type="xs:string"/>
-  <xs:element name="Append" type="xs:boolean"/>
-  <xs:element name="Encoding" type="xs:NCName"/>
-  <xs:element name="BufferedIO" type="xs:boolean"/>
-  <xs:element name="ImmediateFlush" type="xs:boolean"/>
-  <xs:element name="layout">
-    <xs:complexType>
-      <xs:choice>
-        <xs:element ref="Pattern"/>
-        <xs:element ref="pattern"/>
-      </xs:choice>
-      <xs:attribute name="class" use="required"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="Pattern" type="xs:string"/>
-  <xs:element name="pattern" type="xs:string"/>
-  <xs:element name="logger">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="unbounded" minOccurs="0" ref="appender-ref"/>
-        <xs:element maxOccurs="1" minOccurs="0" ref="level"/>
-      </xs:sequence>
-      <xs:attribute name="name" use="required" type="xs:NCName"/>
-      <xs:attribute name="level" type="LoggerLevels" use="optional"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="root">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element minOccurs="0" maxOccurs="unbounded" ref="appender-ref"/>
-      </xs:sequence>
-      <xs:attribute name="level" type="LoggerLevels" use="optional"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="appender-ref">
-    <xs:complexType>
-      <xs:attribute name="ref" use="required" type="xs:NCName"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:complexType name="level">
-    <xs:sequence>
-      <xs:element ref="level"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="level">
-    <xs:complexType>
-      <xs:attribute name="value" use="required" type="xs:NCName"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:simpleType name="LoggerLevels">
-    <xs:restriction base="xs:string">
-      <xs:pattern value="off|OFF|all|ALL|inherited|INHERITED|null|NULL|error|ERROR|warn|WARN|info|INFO|debug|DEBUG|trace|TRACE"/>
-    </xs:restriction>
-  </xs:simpleType>
-</xs:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="configuration">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="contextName"/>
+        <xs:element ref="jmxConfigurator"/>
+        <xs:element maxOccurs="unbounded" ref="appender"/>
+        <xs:element maxOccurs="unbounded" ref="logger"/>
+        <xs:element ref="root"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="contextName" type="xs:string"/>
+  <xs:element name="jmxConfigurator">
+    <xs:complexType>
+      <xs:attribute name="contextName" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="appender">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:sequence minOccurs="0">
+          <xs:element ref="File"/>
+          <xs:element ref="Append"/>
+          <xs:element ref="Encoding"/>
+          <xs:element ref="BufferedIO"/>
+          <xs:element ref="ImmediateFlush"/>
+        </xs:sequence>
+        <xs:element ref="layout"/>
+      </xs:sequence>
+      <xs:attribute name="class" use="required"/>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="File" type="xs:string"/>
+  <xs:element name="Append" type="xs:boolean"/>
+  <xs:element name="Encoding" type="xs:NCName"/>
+  <xs:element name="BufferedIO" type="xs:boolean"/>
+  <xs:element name="ImmediateFlush" type="xs:boolean"/>
+  <xs:element name="layout">
+    <xs:complexType>
+      <xs:choice>
+        <xs:element ref="Pattern"/>
+        <xs:element ref="pattern"/>
+      </xs:choice>
+      <xs:attribute name="class" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Pattern" type="xs:string"/>
+  <xs:element name="pattern" type="xs:string"/>
+  <xs:element name="logger">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" minOccurs="0" ref="appender-ref"/>
+        <xs:element maxOccurs="1" minOccurs="0" ref="level"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="level" type="LoggerLevels" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="root">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="appender-ref"/>
+      </xs:sequence>
+      <xs:attribute name="level" type="LoggerLevels" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="appender-ref">
+    <xs:complexType>
+      <xs:attribute name="ref" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="level">
+    <xs:sequence>
+      <xs:element ref="level"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="level">
+    <xs:complexType>
+      <xs:attribute name="value" use="required" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:simpleType name="LoggerLevels">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="off|OFF|all|ALL|inherited|INHERITED|null|NULL|error|ERROR|warn|WARN|info|INFO|debug|DEBUG|trace|TRACE"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-screenshare/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/site/site.xml b/openmeetings-screenshare/src/site/site.xml
index b7a0eae..dd3dc53 100644
--- a/openmeetings-screenshare/src/site/site.xml
+++ b/openmeetings-screenshare/src/site/site.xml
@@ -1,39 +1,39 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/main/assembly/jrebel/red5-debug.bat
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/main/assembly/jrebel/red5-debug.bat b/openmeetings-server/src/main/assembly/jrebel/red5-debug.bat
index 9087e9e..59e8e89 100644
--- a/openmeetings-server/src/main/assembly/jrebel/red5-debug.bat
+++ b/openmeetings-server/src/main/assembly/jrebel/red5-debug.bat
@@ -1,19 +1,19 @@
-REM #############################################
-REM Licensed under the Apache License, Version 2.0 (the "License");
-REM you may not use this file except in compliance with the License.
-REM You may obtain a copy of the License at
-REM
-REM     http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM #############################################
-@echo off
-
-if NOT DEFINED RED5_HOME set RED5_HOME=%~dp0
-
-set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -javaagent:@jrebel.home@\jrebel.jar -Drebel.remoting_plugin=true -Dproject.root=@project.home@
-%RED5_HOME%\red5.bat
+REM #############################################
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM #############################################
+@echo off
+
+if NOT DEFINED RED5_HOME set RED5_HOME=%~dp0
+
+set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -javaagent:@jrebel.home@\jrebel.jar -Drebel.remoting_plugin=true -Dproject.root=@project.home@
+%RED5_HOME%\red5.bat

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/main/assembly/scripts/admin.bat
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/main/assembly/scripts/admin.bat b/openmeetings-server/src/main/assembly/scripts/admin.bat
index 8ae8ec2..c5a47c2 100644
--- a/openmeetings-server/src/main/assembly/scripts/admin.bat
+++ b/openmeetings-server/src/main/assembly/scripts/admin.bat
@@ -1,21 +1,21 @@
-REM #############################################
-REM Licensed under the Apache License, Version 2.0 (the "License");
-REM you may not use this file except in compliance with the License.
-REM You may obtain a copy of the License at
-REM
-REM     http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM #############################################
-@echo off
-set RED5_HOME=%~dp0
-set OM_CONTEXT=openmeetings
-
-set CLASSPATH=%RED5_HOME%\*;%RED5_HOME%\conf;%RED5_HOME%\plugins\*;%RED5_HOME%\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\classes
-
-java -cp "%CLASSPATH%" -Dcontext=%OM_CONTEXT% -Dlogback.ContextSelector=org.red5.logging.LoggingContextSelector org.apache.openmeetings.cli.Admin %*
-
+REM #############################################
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM     http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM #############################################
+@echo off
+set RED5_HOME=%~dp0
+set OM_CONTEXT=openmeetings
+
+set CLASSPATH=%RED5_HOME%\*;%RED5_HOME%\conf;%RED5_HOME%\plugins\*;%RED5_HOME%\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\classes
+
+java -cp "%CLASSPATH%" -Dcontext=%OM_CONTEXT% -Dlogback.ContextSelector=org.red5.logging.LoggingContextSelector org.apache.openmeetings.cli.Admin %*
+

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/site.xml b/openmeetings-server/src/site/site.xml
index d36a3ab..89bd6f1 100644
--- a/openmeetings-server/src/site/site.xml
+++ b/openmeetings-server/src/site/site.xml
@@ -1,140 +1,140 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.6.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.6.0 http://maven.apache.org/xsd/decoration-1.6.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu name="General">
-			<item name="Home" href="/index.html"/>
-			<item name="License" href="/license.html"/>
-			<item name="ASF" href="http://www.apache.org/"/>
-			<item name="Call For Logo" href="/CallForLogo.html"/>
-			<item name="News archive" href="/NewsArchive.html"/>
-			<item name="Security" href="/security.html"/>
-			<item name="Commercial Support" href="/commercial-support.html"/>
-		</menu>
-		<menu name="Installation">
-			<item name="Installation" href="/installation.html" />
-			<item name="Upgrade" href="/Upgrade.html" />
-			<item name="Tutorials" href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" />
-			<item name="Command Line Admin" href="/CommandLineAdmin.html" />
-		</menu>
-		<menu name="Community">
-			<item name="Get Involved" href="/get-involved.html" />
-			<item name="Committers" href="/team-list.html" />
-			<item name="Our Users" href="/OurUsers.html" />
-			<item name="Mailing Lists" href="/mail-lists.html" />
-			<item name="Wiki" href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/" />
-		</menu>
-		<menu name="Development">
-			<item name="Source Code" href="/source-repository.html" />
-			<item name="Bugs / Issues" href="/issue-tracking.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Continuous Integration" href="/integration.html" />
-			<item name="Build Instructions 3.0.x" href="/BuildInstructions_3.0.x.html" />
-			<item name="Build Instructions" href="/BuildInstructions.html" />
-			<item name="JUnit Testing" href="/JUnitTesting.html" />
-			<item name="Manual Testing" href="/ManualTesting.html" />
-			<item name="Release Guide" href="/ReleaseGuide.html" />
-			<item name="Website Guide" href="/WebsiteGuide.html" />
-		</menu>
-		<menu name="Configuration">
-			<item name="Integration" href="#integration">
-				<item name="SOAP/REST API" href="/openmeetings-webservice/apidocs/index.html" target="_blank"/>
-				<item name="REST API Sample" href="/RestAPISample.html" />
-				<item name="Ldap and ADS" href="/LdapAndADS.html" />
-				<item name="OAuth2" href="/oauth2.html" />
-				<item name="VoIP and SIP" href="/voip-sip-integration.html" />
-				<item name="Errors table" href="/errorvalues.html" />
-			</item>
-			<item name="Plugins" href="#plugins">
-				<item name="Moodle Plugin" href="/MoodlePlugin.html" />
-				<item name="Sakai Plugin" href="/SakaiPlugin.html" />
-				<item name="Jira Plugin" href="/JiraPlugin.html" />
-				<item name="Joomla Plugin" href="/JoomlaPlugin.html" />
-				<item name="Drupal Plugin" href="/DrupalPlugin.html" />
-				<item name="Bitrix Plugin" href="/BitrixPlugin.html" />
-				<item name="Confluence Plugin" href="/ConfluencePlugin.html" />
-				<item name="SugarCRM Plugin" href="/SugarCRMPlugin.html" />
-				<item name="Redmine Plugin" href="/RedminePlugin.html" />
-			</item>
-			<item name="DB Sample Configurations" href="#db">
-				<item name="Apache Derby" href="/ApacheDerbyConfig.html" />
-				<item name="IBM DB2" href="/IBMDB2Config.html" />
-				<item name="Oracle" href="/OracleConfig.html" />
-				<item name="MySQL" href="/MySQLConfig.html" />
-				<item name="Postgres" href="/PostgresConfig.html" />
-				<item name="MSSQL" href="/MSSQLConfig.html" />
-			</item>
-			<item name="Localization and languages" href="#localization">
-				<item name="Internationalisation" href="/Internationalisation.html" />
-				<item name="LanguageEditor" href="/LanguageEditor.html" />
-				<item name="TimeZoneHandling" href="/TimeZoneHandling.html" />
-				<item name="EditTemplates" href="/EditTemplates.html" />
-			</item>
-			<item name="NAT Port Settings" href="#port">
-				<item name="Port settings" href="/PortSettings.html" />
-			</item>
-			<item name="Performance" href="#performance">
-				<item name="JVM performance tuning" href="/JVMPerformanceTuning.html" />
-				<item name="Network bandwidth calculator" href="/NetworkCalculator.html" />
-			</item>
-			<item name="User Interface" href="#interface">
-				<item name="Themes" href="/themes-and-branding.html" />
-				<item name="Dashboard" href="/Dashboard.html" />
-				<item name="Webcam resolutions" href="/WebcamResolutions.html" />
-				<item name="Room layout options" href="/ConferenceRoomLayoutOptions.html" />
-				<item name="Hot Keys" href="/HotKeys.html" />
-			</item>
-			<item name="Customization" href="#customize">
-				<item name="Webapp name/path" href="/WebappNamePath.html" />
-				<item name="Navigation" href="/Navigation.html" />
-				<item name="Calendar and timezone" href="/CalendarAndTimezone.html" />
-				<item name="Custom room type" href="/CustomRoomTypeHowTo.html" />
-				<item name="Custom crypt mechanism" href="/CustomCryptMechanism.html" />
-				<item name="General Configuration" href="/GeneralConfiguration.html" />
-			</item>
-			<item name="Security" href="#security">
-				<item name="Restricted Access" href="/RestrictedAccess.html" />
-				<item name="RTMPS and HTTPS" href="/RTMPSAndHTTPS.html" />
-			</item>
-			<item name="Converters" href="#convert">
-				<item name="OpenOffice Converter" href="/OpenOfficeConverter.html" />
-			</item>
-			<item name="Clustering" href="#cluster">
-				<item name="Clustering" href="/Clustering.html" />
-			</item>
-			<item name="Misc" href="#misc">
-				<item name="Get version info" href="/GetVersionInfo.html" />
-			</item>
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<pages>
-				<index>
-					<sections>
-						<carousel/>
-					</sections>
-				</index>
-			</pages>
-			<endContent>
-				<script type="text/javascript" src="$resourcePath/js/jquery-ui.min.js"></script>
-				<script type="text/javascript" src="$resourcePath/js/netcalc.js"></script>
-			</endContent>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.6.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.6.0 http://maven.apache.org/xsd/decoration-1.6.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu name="General">
+			<item name="Home" href="/index.html"/>
+			<item name="License" href="/license.html"/>
+			<item name="ASF" href="http://www.apache.org/"/>
+			<item name="Call For Logo" href="/CallForLogo.html"/>
+			<item name="News archive" href="/NewsArchive.html"/>
+			<item name="Security" href="/security.html"/>
+			<item name="Commercial Support" href="/commercial-support.html"/>
+		</menu>
+		<menu name="Installation">
+			<item name="Installation" href="/installation.html" />
+			<item name="Upgrade" href="/Upgrade.html" />
+			<item name="Tutorials" href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" />
+			<item name="Command Line Admin" href="/CommandLineAdmin.html" />
+		</menu>
+		<menu name="Community">
+			<item name="Get Involved" href="/get-involved.html" />
+			<item name="Committers" href="/team-list.html" />
+			<item name="Our Users" href="/OurUsers.html" />
+			<item name="Mailing Lists" href="/mail-lists.html" />
+			<item name="Wiki" href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/" />
+		</menu>
+		<menu name="Development">
+			<item name="Source Code" href="/source-repository.html" />
+			<item name="Bugs / Issues" href="/issue-tracking.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Continuous Integration" href="/integration.html" />
+			<item name="Build Instructions 3.0.x" href="/BuildInstructions_3.0.x.html" />
+			<item name="Build Instructions" href="/BuildInstructions.html" />
+			<item name="JUnit Testing" href="/JUnitTesting.html" />
+			<item name="Manual Testing" href="/ManualTesting.html" />
+			<item name="Release Guide" href="/ReleaseGuide.html" />
+			<item name="Website Guide" href="/WebsiteGuide.html" />
+		</menu>
+		<menu name="Configuration">
+			<item name="Integration" href="#integration">
+				<item name="SOAP/REST API" href="/openmeetings-webservice/apidocs/index.html" target="_blank"/>
+				<item name="REST API Sample" href="/RestAPISample.html" />
+				<item name="Ldap and ADS" href="/LdapAndADS.html" />
+				<item name="OAuth2" href="/oauth2.html" />
+				<item name="VoIP and SIP" href="/voip-sip-integration.html" />
+				<item name="Errors table" href="/errorvalues.html" />
+			</item>
+			<item name="Plugins" href="#plugins">
+				<item name="Moodle Plugin" href="/MoodlePlugin.html" />
+				<item name="Sakai Plugin" href="/SakaiPlugin.html" />
+				<item name="Jira Plugin" href="/JiraPlugin.html" />
+				<item name="Joomla Plugin" href="/JoomlaPlugin.html" />
+				<item name="Drupal Plugin" href="/DrupalPlugin.html" />
+				<item name="Bitrix Plugin" href="/BitrixPlugin.html" />
+				<item name="Confluence Plugin" href="/ConfluencePlugin.html" />
+				<item name="SugarCRM Plugin" href="/SugarCRMPlugin.html" />
+				<item name="Redmine Plugin" href="/RedminePlugin.html" />
+			</item>
+			<item name="DB Sample Configurations" href="#db">
+				<item name="Apache Derby" href="/ApacheDerbyConfig.html" />
+				<item name="IBM DB2" href="/IBMDB2Config.html" />
+				<item name="Oracle" href="/OracleConfig.html" />
+				<item name="MySQL" href="/MySQLConfig.html" />
+				<item name="Postgres" href="/PostgresConfig.html" />
+				<item name="MSSQL" href="/MSSQLConfig.html" />
+			</item>
+			<item name="Localization and languages" href="#localization">
+				<item name="Internationalisation" href="/Internationalisation.html" />
+				<item name="LanguageEditor" href="/LanguageEditor.html" />
+				<item name="TimeZoneHandling" href="/TimeZoneHandling.html" />
+				<item name="EditTemplates" href="/EditTemplates.html" />
+			</item>
+			<item name="NAT Port Settings" href="#port">
+				<item name="Port settings" href="/PortSettings.html" />
+			</item>
+			<item name="Performance" href="#performance">
+				<item name="JVM performance tuning" href="/JVMPerformanceTuning.html" />
+				<item name="Network bandwidth calculator" href="/NetworkCalculator.html" />
+			</item>
+			<item name="User Interface" href="#interface">
+				<item name="Themes" href="/themes-and-branding.html" />
+				<item name="Dashboard" href="/Dashboard.html" />
+				<item name="Webcam resolutions" href="/WebcamResolutions.html" />
+				<item name="Room layout options" href="/ConferenceRoomLayoutOptions.html" />
+				<item name="Hot Keys" href="/HotKeys.html" />
+			</item>
+			<item name="Customization" href="#customize">
+				<item name="Webapp name/path" href="/WebappNamePath.html" />
+				<item name="Navigation" href="/Navigation.html" />
+				<item name="Calendar and timezone" href="/CalendarAndTimezone.html" />
+				<item name="Custom room type" href="/CustomRoomTypeHowTo.html" />
+				<item name="Custom crypt mechanism" href="/CustomCryptMechanism.html" />
+				<item name="General Configuration" href="/GeneralConfiguration.html" />
+			</item>
+			<item name="Security" href="#security">
+				<item name="Restricted Access" href="/RestrictedAccess.html" />
+				<item name="RTMPS and HTTPS" href="/RTMPSAndHTTPS.html" />
+			</item>
+			<item name="Converters" href="#convert">
+				<item name="OpenOffice Converter" href="/OpenOfficeConverter.html" />
+			</item>
+			<item name="Clustering" href="#cluster">
+				<item name="Clustering" href="/Clustering.html" />
+			</item>
+			<item name="Misc" href="#misc">
+				<item name="Get version info" href="/GetVersionInfo.html" />
+			</item>
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<pages>
+				<index>
+					<sections>
+						<carousel/>
+					</sections>
+				</index>
+			</pages>
+			<endContent>
+				<script type="text/javascript" src="$resourcePath/js/jquery-ui.min.js"></script>
+				<script type="text/javascript" src="$resourcePath/js/netcalc.js"></script>
+			</endContent>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/stylesheets/errortable.xsl
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/stylesheets/errortable.xsl b/openmeetings-server/src/site/stylesheets/errortable.xsl
index 5748361..dbf72de 100644
--- a/openmeetings-server/src/site/stylesheets/errortable.xsl
+++ b/openmeetings-server/src/site/stylesheets/errortable.xsl
@@ -1,67 +1,67 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-	<xsl:param name="languagesDir"/>
-	<xsl:output method="xml"/>
-	
-	<xsl:template match="ROOT">
-<document>
-<xsl:comment>
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- </xsl:comment>
-	<properties>
-		<title>Openmeetings Errors table</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Documentation Robot</author>
-	</properties>
-	<body>
-		<section name="Openmeetings Errors table">
-		<table>
-			<tr>
-				<th>Code</th>
-				<th>Type</th>
-				<th>Description</th>
-			</tr>
-			<xsl:apply-templates/>
-		</table>
-		</section>
-	</body>
-</document>
-	</xsl:template>
-	
-	<xsl:template match="row">
-		<xsl:variable name="englishPath"><xsl:value-of select="concat($languagesDir, '/Application.properties.xml')"/></xsl:variable>
-			<tr>
-				<td>-<xsl:value-of select="field[@name='errorvalues_id']"/></td>
-				<td>
-					<xsl:variable name="type" select="concat('error.type.', field[@name='type'])"/>
-					<xsl:value-of select="document($englishPath)/properties/entry[@key=$type]/text()" />
-				</td>
-				<td>
-					<xsl:variable name="descId" select="field[@name='fieldvalues_id']"/>
-					<xsl:value-of select="document($englishPath)/properties/entry[@key=$descId]/text()" />
-				</td>
-			</tr>
-	</xsl:template>
-</xsl:stylesheet>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+	<xsl:param name="languagesDir"/>
+	<xsl:output method="xml"/>
+	
+	<xsl:template match="ROOT">
+<document>
+<xsl:comment>
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ </xsl:comment>
+	<properties>
+		<title>Openmeetings Errors table</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Documentation Robot</author>
+	</properties>
+	<body>
+		<section name="Openmeetings Errors table">
+		<table>
+			<tr>
+				<th>Code</th>
+				<th>Type</th>
+				<th>Description</th>
+			</tr>
+			<xsl:apply-templates/>
+		</table>
+		</section>
+	</body>
+</document>
+	</xsl:template>
+	
+	<xsl:template match="row">
+		<xsl:variable name="englishPath"><xsl:value-of select="concat($languagesDir, '/Application.properties.xml')"/></xsl:variable>
+			<tr>
+				<td>-<xsl:value-of select="field[@name='errorvalues_id']"/></td>
+				<td>
+					<xsl:variable name="type" select="concat('error.type.', field[@name='type'])"/>
+					<xsl:value-of select="document($englishPath)/properties/entry[@key=$type]/text()" />
+				</td>
+				<td>
+					<xsl:variable name="descId" select="field[@name='fieldvalues_id']"/>
+					<xsl:value-of select="document($englishPath)/properties/entry[@key=$descId]/text()" />
+				</td>
+			</tr>
+	</xsl:template>
+</xsl:stylesheet>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/ApacheDerbyConfig.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/ApacheDerbyConfig.xml b/openmeetings-server/src/site/xdoc/ApacheDerbyConfig.xml
index d251f47..a3071ba 100644
--- a/openmeetings-server/src/site/xdoc/ApacheDerbyConfig.xml
+++ b/openmeetings-server/src/site/xdoc/ApacheDerbyConfig.xml
@@ -1,57 +1,57 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Apache Derby Configuration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Apache Derby Configuration">
-
-			<p>
-				OpenMeetings default configuration is to use Apache Derby.
-			</p>
-
-			<p>
-				It is recommended for production environments and high
-				availibility to change to an usual relational database like MySQL,
-				Postgres or DB2.
-			</p>
-			<p>
-				For more information about Apache Derby see
-				<a href="http://db.apache.org/derby/">http://db.apache.org/derby/</a>
-			</p>
-
-			<p>
-				There is a sample configuration for Apache Derby that ships with
-				every release in:
-				<br />
-				/webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml
-			</p>
-
-			<p>
-				If you encounter issues, you can drop the db and then run the web
-				based installer again
-			</p>
-
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Apache Derby Configuration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Apache Derby Configuration">
+
+			<p>
+				OpenMeetings default configuration is to use Apache Derby.
+			</p>
+
+			<p>
+				It is recommended for production environments and high
+				availibility to change to an usual relational database like MySQL,
+				Postgres or DB2.
+			</p>
+			<p>
+				For more information about Apache Derby see
+				<a href="http://db.apache.org/derby/">http://db.apache.org/derby/</a>
+			</p>
+
+			<p>
+				There is a sample configuration for Apache Derby that ships with
+				every release in:
+				<br />
+				/webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml
+			</p>
+
+			<p>
+				If you encounter issues, you can drop the db and then run the web
+				based installer again
+			</p>
+
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/BitrixPlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/BitrixPlugin.xml b/openmeetings-server/src/site/xdoc/BitrixPlugin.xml
index 00e93b4..f7b7f90 100644
--- a/openmeetings-server/src/site/xdoc/BitrixPlugin.xml
+++ b/openmeetings-server/src/site/xdoc/BitrixPlugin.xml
@@ -1,48 +1,48 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Bitrix Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="OpenMeetings Plugin for Bitrix">
-			<p>
-				Plugin for Bitrix currently is not open source. 
-				Please contact <a href="commercial-support.html" target="_blank" rel="nofollow">Commercial Support</a> to get it. 
-			</p>			
-		</section>
-		<section name="Features">
-			<p>The plugin contains the following features: </p>
-			<ul>
-				<li>Enter videoconference rooms from Bitrix (http://www.1c-bitrix.ru/): </li>
-			</ul>
-		</section>
-		<section name="Configuration">			
-			<div>
-				<b>OpenMeetings Bitrix Plugin Installation</b><br/>
-				<ol>
-					<li>Build plugin from sources</li>
-					<li>Unpack it into bitrix/modules</li>
-					<li>Install via Admin</li>
-					<li>Add OPenmeetings component to any page.</li>
-				</ol>              
-			</div>
-		</section>
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Bitrix Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="OpenMeetings Plugin for Bitrix">
+			<p>
+				Plugin for Bitrix currently is not open source. 
+				Please contact <a href="commercial-support.html" target="_blank" rel="nofollow">Commercial Support</a> to get it. 
+			</p>			
+		</section>
+		<section name="Features">
+			<p>The plugin contains the following features: </p>
+			<ul>
+				<li>Enter videoconference rooms from Bitrix (http://www.1c-bitrix.ru/): </li>
+			</ul>
+		</section>
+		<section name="Configuration">			
+			<div>
+				<b>OpenMeetings Bitrix Plugin Installation</b><br/>
+				<ol>
+					<li>Build plugin from sources</li>
+					<li>Unpack it into bitrix/modules</li>
+					<li>Install via Admin</li>
+					<li>Add OPenmeetings component to any page.</li>
+				</ol>              
+			</div>
+		</section>
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/BuildInstructions.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/BuildInstructions.xml b/openmeetings-server/src/site/xdoc/BuildInstructions.xml
index c6af2af..7fbd84f 100644
--- a/openmeetings-server/src/site/xdoc/BuildInstructions.xml
+++ b/openmeetings-server/src/site/xdoc/BuildInstructions.xml
@@ -1,105 +1,105 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Build instructions</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Nightly Builds">
-			<p>
-				You can find Nightly Builds of the software at:
-				<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" rel="nofollow" target="_blank">
-					https://builds.apache.org/view/M-R/view/OpenMeetings/
-				</a>
-			</p>
-		</section>
-
-		<section name="How to Build a Distribution">
-			<div>
-				<p>To build a binary release of OpenMeetings you need: </p>
-				<ul>
-					<li>Oracle JDK8</li>
-					<li>Apache Maven (minimum) 3.3.9</li>
-					<li>Git</li>
-				</ul>
-			</div>
-
-			<p>Get the source: </p>
-			<source><![CDATA[git clone https://git-wip-us.apache.org/repos/asf/openmeetings.git]]></source>
-			<p>Run the command: </p>
-			<source><![CDATA[mvn clean install -P allModules]]></source>
-		</section>
-
-		<section name="Run, Develop, Test">
-			<p>
-				To develop Openmeetings you need to import maven project into Eclipse
-				<img src="images/eclipse-import-maven-project.png" alt="Import OM into Eclipse" width="526" height="394" />
-			</p>
-		</section>
-		<section name="Check for updates">
-			<source>mvn versions:display-dependency-updates</source>
-			<source>mvn versions:display-plugin-updates</source>
-			<source>mvn versions:display-property-updates</source>
-		</section>
-		<section name="Check dependencies">
-			<source>mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.0:analyze-only</source>
-		</section>
-		<section name="Tips and Gotchas">
-			<p>To compile only client you can run following command: </p>
-			<source>
-<![CDATA[
-mvn install -P allModules -pl openmeetings-flash               # compiles a complete package into the folder openmeetings-flash/target
-]]>
-			</source>
-			<p>In case you would like to develop Openmeetings you need to run <i>"unpacked"</i> build: </p>
-			<source>
-<![CDATA[
-mvn clean install -P allModules,unpacked,mysql,default-db-cred -DskipTests=true -Dwicket.mode=DEVELOPMENT
-]]>
-			</source>
-			<p>After modifications are made you can run <i>"quick"</i> build: </p>
-			<source>
-<![CDATA[
-mvn install -P allModules,quick,mysql,default-db-cred -pl openmeetings-web -pl openmeetings-server -Dwicket.mode=DEVELOPMENT
-]]>
-			</source>
-			<p>Any number of projects can be specified during build: </p>
-			<source>
-<![CDATA[
-mvn install -P allModules,quick,mysql,default-db-cred -pl openmeetings-util -pl openmeetings-db -pl openmeetings-core -pl openmeetings-install -pl openmeetings-service -pl openmeetings-web -pl openmeetings-server -pl openmeetings-webservice -Dwicket.mode=DEVELOPMENT
-]]>
-			</source>
-			<div>
-				<b>Working behind a proxy:</b>
-				If you are sitting behind a proxy you should add some proxy settings before starting the build process.
-				<br />
-				<source>git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080</source>
-				<ul>
-					<li>change <tt>proxyuser</tt> to your proxy user</li>
-					<li>change <tt>proxypwd</tt> to your proxy password</li>
-					<li>change <tt>proxy.server.com</tt> to the URL of your proxy server</li>
-					<li>change <tt>8080</tt> to the proxy port configured on your proxy server</li>
-				</ul>
-			</div>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Build instructions</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Nightly Builds">
+			<p>
+				You can find Nightly Builds of the software at:
+				<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" rel="nofollow" target="_blank">
+					https://builds.apache.org/view/M-R/view/OpenMeetings/
+				</a>
+			</p>
+		</section>
+
+		<section name="How to Build a Distribution">
+			<div>
+				<p>To build a binary release of OpenMeetings you need: </p>
+				<ul>
+					<li>Oracle JDK8</li>
+					<li>Apache Maven (minimum) 3.3.9</li>
+					<li>Git</li>
+				</ul>
+			</div>
+
+			<p>Get the source: </p>
+			<source><![CDATA[git clone https://git-wip-us.apache.org/repos/asf/openmeetings.git]]></source>
+			<p>Run the command: </p>
+			<source><![CDATA[mvn clean install -P allModules]]></source>
+		</section>
+
+		<section name="Run, Develop, Test">
+			<p>
+				To develop Openmeetings you need to import maven project into Eclipse
+				<img src="images/eclipse-import-maven-project.png" alt="Import OM into Eclipse" width="526" height="394" />
+			</p>
+		</section>
+		<section name="Check for updates">
+			<source>mvn versions:display-dependency-updates</source>
+			<source>mvn versions:display-plugin-updates</source>
+			<source>mvn versions:display-property-updates</source>
+		</section>
+		<section name="Check dependencies">
+			<source>mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.0:analyze-only</source>
+		</section>
+		<section name="Tips and Gotchas">
+			<p>To compile only client you can run following command: </p>
+			<source>
+<![CDATA[
+mvn install -P allModules -pl openmeetings-flash               # compiles a complete package into the folder openmeetings-flash/target
+]]>
+			</source>
+			<p>In case you would like to develop Openmeetings you need to run <i>"unpacked"</i> build: </p>
+			<source>
+<![CDATA[
+mvn clean install -P allModules,unpacked,mysql,default-db-cred -DskipTests=true -Dwicket.mode=DEVELOPMENT
+]]>
+			</source>
+			<p>After modifications are made you can run <i>"quick"</i> build: </p>
+			<source>
+<![CDATA[
+mvn install -P allModules,quick,mysql,default-db-cred -pl openmeetings-web -pl openmeetings-server -Dwicket.mode=DEVELOPMENT
+]]>
+			</source>
+			<p>Any number of projects can be specified during build: </p>
+			<source>
+<![CDATA[
+mvn install -P allModules,quick,mysql,default-db-cred -pl openmeetings-util -pl openmeetings-db -pl openmeetings-core -pl openmeetings-install -pl openmeetings-service -pl openmeetings-web -pl openmeetings-server -pl openmeetings-webservice -Dwicket.mode=DEVELOPMENT
+]]>
+			</source>
+			<div>
+				<b>Working behind a proxy:</b>
+				If you are sitting behind a proxy you should add some proxy settings before starting the build process.
+				<br />
+				<source>git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080</source>
+				<ul>
+					<li>change <tt>proxyuser</tt> to your proxy user</li>
+					<li>change <tt>proxypwd</tt> to your proxy password</li>
+					<li>change <tt>proxy.server.com</tt> to the URL of your proxy server</li>
+					<li>change <tt>8080</tt> to the proxy port configured on your proxy server</li>
+				</ul>
+			</div>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file


[22/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/commonVideoViewContentSWF10.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/commonVideoViewContentSWF10.lzx b/openmeetings-flash/src/main/swf/commonVideoViewContentSWF10.lzx
index 2cc1c0f..47a9ad1 100644
--- a/openmeetings-flash/src/main/swf/commonVideoViewContentSWF10.lzx
+++ b/openmeetings-flash/src/main/swf/commonVideoViewContentSWF10.lzx
@@ -1,815 +1,815 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-
-<class name="commonVideoViewContentSWF10" extends="view">
-	<switch>
-		<when property="$as3">
-			<passthrough>
-				import flash.external.ExternalInterface;
-				import flash.media.Camera;
-				import flash.media.Microphone;
-				import flash.media.MicrophoneEnhancedMode;
-				import flash.media.MicrophoneEnhancedOptions;
-				import flash.media.SoundCodec;
-				import flash.net.SharedObject;
-			</passthrough>
-		</when>
-	</switch>
-
-	<attribute name="offsetLength" type="number" value="40"/>
-	<attribute name="videoWidth" type="number" value="132"/>
-	<attribute name="videoHeight" type="number" value="132"/>
-	<attribute name="SIDEPANEL_WIDTH" type="number" value="270" />
-	<attribute name="baseVideoStream" value="null" />
-
-	<method name="toggleVideo" args="value">
-		if($debug) Debug.info("toggleVideo ", canvas.currentClient, value);
-		canvas.currentClient.canVideo = value;
-	</method>
-
-	<method name="createEditRecordStream" args="isInterview">
-		if($debug) Debug.info("createEditRecordStream,", isInterview);
-		new lz.editRecordStreamSWF10(canvas, {
-				isInterview: isInterview,
-			});
-	</method>
-
-	<method name="batchCreateVideo" args="clients">
-	<![CDATA[
-		if ($debug) Debug.info("batchCreateVideo: ", clients.length);
-		for (var i = 0; i < clients.length; ++i) {
-			var c = clients[i];
-			if (c.streamid != canvas.streamid) {
-				if (c.isBroadcasting) {
-					createVideo(c);
-				} else {
-					createVideoObject(c.publicSID, false, c.interviewPodId, c);
-				}
-			}
-		}
-	]]>
-	</method>
-
-	<!--
-		Method that creates the video views when another user enters a room and his
-		item in the list of participants is created.
-		The method to "play" the stream is invoked later, when the user
-		really starts to stream and not only when he just enters the room.
-	 -->
-	<method name="createVideoObject" args="publicSID, isBroadcasting, interviewPodId, object">
-		if($debug) Debug.info("createVideoObject, publicSID: ",publicSID, "isBroadcasting: ", isBroadcasting, "object", object);
-		var vidContainer = getVideoObjectByPublicSID(publicSID);
-		if (vidContainer == null) {
-			vidContainer = isBroadcasting ? this.getNewVideoObject(publicSID) : this.getNewVideoObjectByPos(publicSID);
-			vidContainer.publicSID = publicSID;
-		}
-		if ($debug) Debug.write("Is interview ? ", canvas.isInterview);
-		placeInterviewPod(vidContainer, interviewPodId);
-		vidContainer.clientVars = object;
-		vidContainer.setAttribute('visible', false);
-		return vidContainer;
-	</method>
-
-	<method name="placeInterviewPod" args="vidContainer, interviewPodId">
-	<![CDATA[
-		if ($debug) Debug.write("placeInterviewPod::Is interview ", canvas.isInterview, interviewPodId);
-		if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) {
-			if (interviewPodId != null) {
-				vidContainer.setAttribute("interviewPodId", interviewPodId);
-				var cont = canvas._drawarea._videoviewcontent;
-				var box = cont['interviewVideoBox' + interviewPodId];
-				if (!!box) {
-					vidContainer.setAttribute("x", cont.x + box.x);
-					vidContainer.setAttribute("y", box.y);
-				}
-			}
-			vidContainer.setAttribute("width", 322);
-			vidContainer.setAttribute("height", 281);
-		}
-	]]>
-	</method>
-
-	<method name="setPartnerName" args="obj, first, last=null">
-		if (!obj) {
-			return;
-		}
-		var dispName = !last ? first : first + ' ' + last;
-		obj.setAttribute('chatpartnername', dispName);
-	</method>
-
-	<!--
-		Method that creates the video views when user(self) initially entering a room.
-		Creates the video-view AND starts to stream/play the video
-	 -->
-	<method name="createVideo" args="cl">
-	<![CDATA[
-		if ($debug) Debug.info("createVideo::: ", cl.publicSID, cl.broadCastID, cl.avsettings, cl.interviewPodId);
-		if ($debug) Debug.write(" createVideo ALL vars ", cl);
-		var vidContainer = getVideoObjectByPublicSID(cl.publicSID);
-		if (cl.avsettings != 'n') {
-			if (vidContainer == null) {
-				vidContainer = getNewVideoObjectByPos(cl.publicSID);
-			}
-			vidContainer.clientVars = cl;
-			setPartnerName(vidContainer, cl.firstname, cl.lastname);
-			switch (cl.avsettings) {
-				case 'a':
-					if ($debug) Debug.warn("start play");
-					vidContainer._chatvideoinner._videostream.playStream(cl.broadCastID, -1);
-					break;
-				case 'v':
-				case 'av':
-					//this means avsettings is either: "v" or "av"
-					vidContainer._chatvideoinner._videostream.playStream(cl.broadCastID, -1);
-					break;
-				case 'n':
-				default:
-					break;
-			}
-			vidContainer.updateAVSettingsSymbol(cl);
-			if (cl.micMuted) {
-				vidContainer.setMicMuted(cl.micMuted);
-			}
-			if ($debug) Debug.write(" createVideo ALL vars ", vidContainer);
-			placeInterviewPod(vidContainer, cl.interviewPodId);
-		}
-		enableRecordingButton();
-		return vidContainer;
-	]]>
-	</method>
-
-	<method name="getVideoObjectByPublicSID" args="publicSID">
-	<![CDATA[
-		//if ($debug) Debug.write("getVideoObjectByPublicSid SEARCH: ", publicSID);
-		for (var i = 0; i < this.subviews.length; ++i) {
-			//if ($debug) Debug.write("this.subviews[i].publicSID ", this.subviews[i].publicSID);
-			if (this.subviews[i].publicSID == publicSID) {
-				return this.subviews[i];
-			}
-		}
-		if ($debug) Debug.warn(" - getVideoObjectByPublicSID - DID NOT FIND THE USER BY ", publicSID);
-		return null;
-	]]>
-	</method>
-
-	<method name="getNewVideoObjectByPos" args="publicSID">
-	<![CDATA[
-		//Get a Free VideoView Slot
-		var freePos = this.getVideoObjectFreePos(this.offsetLength,this.videoWidth,this.videoHeight);
-
-		return new lz.videoObjectPlayBroadcast(this,{
-				publicSID:publicSID,
-				width:videoWidth,
-				height:videoHeight,
-				x:freePos[0],
-				y:freePos[1],
-				isInterview:canvas.isInterview
-			});
-	]]>
-	</method>
-
-	<method name="getNewVideoObject" args="publicSID">
-	<![CDATA[
-		this.broadCastViewRef = getNewVideoObjectByPos(publicSID);
-		this.broadCastViewRef._chatvideoinner.r.destroy();
-		if ($debug) Debug.write("getNewVideoObject canvas.currentClient ",publicSID, canvas.currentClient);
-		setPartnerName(this.broadCastViewRef, canvas.currentClient.firstname, canvas.currentClient.lastname);
-		return this.broadCastViewRef;
-	]]>
-	</method>
-
-	<method name="enableRecordingButton">
-	<![CDATA[
-		var count = 0;
-		for (var i = 0; i < this.subviews.length; ++i) {
-			if (this.subviews[i].visible) {
-				count++;
-			}
-		}
-		if (canvas.isInterview) {
-			if (count > 0 && !canvas._drawarea._interview._stop.enabled) {
-				canvas._drawarea._interview._start.setAttribute('enabled', true);
-			} else if (count == 0 && canvas._drawarea._interview._start.enabled) {
-				canvas._drawarea._interview._start.setAttribute('enabled', false);
-			}
-		}
-	]]>
-	</method>
-
-	<method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">
-	<![CDATA[
-		if (canvas.isInterview) {
-			return [0, 0];
-		}
-		var newx = 20;
-		if (canvas.currentRoomObj.hideWhiteboard) {
-			newx += SIDEPANEL_WIDTH;
-		}
-		var newy = 0;
-		var posFound = false;
-		if (offsetLength == undefined) {
-			offsetLength=10;
-		}
-		while (!posFound) {
-			posFound = true;
-			for (var i=0;i<this.subviews.length;i++){
-				var subview = this.subviews[i];
-				var left = subview.x;
-				var right = subview.x + subview.width;
-				var top = subview.y;
-				var bottom = subview.y + subview.height;
-
-				if( !(newx > right
-					|| (newx + videoWidth) < left
-					|| newy > bottom
-					|| (newy + videoHeight) < top ))
-				{
-					newx = right + offsetLength;
-					posFound = false;
-				}
-				if ((newx + videoWidth) >= canvas.width) {
-					newx = 20;
-					if (canvas.currentRoomObj.hideWhiteboard) {
-						newx += SIDEPANEL_WIDTH;
-					}
-					newy += 10;
-					posFound = false;
-				}
-			}
-		}
-
-		if ((newy + videoHeight) >= canvas.height) {
-			newy = 0;
-		}
-		return [newx, newy];
-	]]>
-	</method>
-
-	<method name="muteSound" args="publicSID, bool">
-	<![CDATA[
-		var obj = this.getVideoObjectByPublicSID(publicSID);
-		if (obj != null) {
-			obj.silenceMicrophone(bool);
-		}
-		return;
-	]]>
-	</method>
-
-	<method name="resetAllValues">
-		for (var eg in this.subviews){
-			this.subviews[eg].resetValues();
-		}
-		return;
-	</method>
-
-	<method name="closeStreamclient" args="publicSID">
-	<![CDATA[
-		if ($debug) Debug.write("closeStream this: ", publicSID);
-		var obj = this.getVideoObjectByPublicSID(publicSID);
-		if ($debug) Debug.write("closeStream this obj: ", obj);
-		if (obj != null) {
-			obj.resetValues();
-		}
-		if (canvas.publicSID == publicSID && canvas.editRecordStream != null) {
-			canvas.editRecordStream.destroy();
-		}
-		return obj;
-	]]>
-	</method>
-
-	<method name="removeVideoByUser" args="publicSID"><![CDATA[
-		if ($debug) Debug.write("removeVideoByUser: ", publicSID);
-		var obj = closeStreamclient(publicSID);
-		if (obj == null) {
-			if ($debug) Debug.warn("Could Not find this To removeVideoByUser", publicSID);
-		} else {
-			obj.destroy();
-			enableRecordingButton();
-		}
-	]]></method>
-
-	<method name="updateMuteStatusVideoView" args="roomClient">
-	<![CDATA[
-		var obj = this.getVideoObjectByPublicSID(roomClient.publicSID);
-		if (obj != null) {
-			obj.muteMicrophone(roomClient);
-		}
-	]]>
-	</method>
-
-	<method name="setSpeakingByPos" args="publicSID,bool">
-	<![CDATA[
-		//if ($debug) Debug.write("setSpeakingByPos ",publicSID,bool);
-		var obj = this.getVideoObjectByPublicSID(publicSID);
-		if (obj == null) {
-			if ($debug) Debug.warn("Could not find user for setSpeakingByPos ",publicSID,bool);
-			return;
-		}
-		obj._loudness.setSpeaking(bool);
-	]]>
-	</method>
-
-	<method name="setAVSettingsToClient" args="rcl">
-	<![CDATA[
-		if ($debug) Debug.write("setAVSettingsToClient: ", rcl.publicSID, rcl);
-		var obj = this.getVideoObjectByPublicSID(rcl.publicSID);
-		if ($debug) Debug.write("setAVSettingsToClient: ", obj, rcl.avsettings);
-		if (obj == null) {
-			obj = this.getNewVideoObjectByPos(rcl.publicSID);
-		}
-		obj.thisVars = rcl;
-		obj.updateAVSettingsSymbol(rcl);
-		var v = ("a" == rcl.avsettings && obj.isInterview) || ("a" != rcl.avsettings && rcl.avsettings != "n");
-		obj.setAttribute("visible", "n" != rcl.avsettings);
-		if ($debug) Debug.write("setAVSettingsToClient: ", v, obj.visible);
-	]]>
-	</method>
-
-	<method name="startStream" args="value">
-	<![CDATA[
-		//value.publicSID,value.broadCastID,value.firstname,value.lastname,value.interviewPodId,value.VWidth,value.VHeight
-
-		if ($debug) Debug.write("startStream: ", value);
-		createVideo(value);
-	]]>
-	</method>
-
-	<!---
-		Clear all views, probably this is called whenever a user leaves the room for example
-	 -->
-	<method name="clearAll">
-	<![CDATA[
-		if ($debug) Debug.write("clearAll", this.subviews);
-		while(this.subviews.length > 0) {
-			if (this.subviews[0]._chatvideoinner != null) {
-				this.subviews[0]._chatvideoinner._videostream._stop();
-			}
-			this.subviews[0].destroy();
-		}
-		if (canvas.editRecordStream != null) {
-			canvas.editRecordStream.destroy();
-		}
-		return;
-	]]>
-	</method>
-
-	<method name="setExclusiveAudioAllowStatus" args="canGiveAudio">
-	<![CDATA[
-		if ($debug) Debug.write("setExclusiveAudioAllowStatus :: ",canGiveAudio);
-		canvas.setAttribute("isAllowedToGiveExclusiveAudio",canGiveAudio);
-		return;
-	]]>
-	</method>
-
-	<method name="updateFirstLastName" args="publicSID, first, last">
-		setPartnerName(getVideoObjectByPublicSID(publicSID), first, last);
-	</method>
-
-	<!-- arranges video pods -->
-	<method name="arrangeWindows">
-	<![CDATA[
-		if ($debug) Debug.write("arrangeWindows");
-		var windowsList = this.subviews;
-
-		if (0 == windowsList.length) {
-			return;
-		}
-
-		windowsList.sort(this.sortFunction);
-
-		var offsetInPx = 40;
-		var initX = 20;
-		var initY = 20;
-		var xPos = initX;
-		var yPos = initY;
-		var rowHeight = windowsList[0].height;
-
-		// arrange windows with new positions
-		for (var winIdx = 0; winIdx < windowsList.length; winIdx++) {
-			var window = windowsList[winIdx];
-			if (canvas.width < xPos + window.width) {
-				yPos += rowHeight + offsetInPx;
-				xPos = initX;
-				rowHeight = window.height;
-			}
-			if (canvas.height < yPos) {
-				initX += 10;
-				initY += 10;
-				xPos = initX;
-				yPos = initY;
-			}
-			window.setAttribute("x", xPos);
-			window.setAttribute("y", yPos);
-			window.bringToFront();
-
-			xPos += window.width + offsetInPx;
-		}
-	]]>
-	</method>
-
-	<!-- @keyword private -->
-	<method name="sortFunction" args="el1, el2">
-		<![CDATA[
-			if (el1.height > el2.height) {
-				return -1;
-			} else if (el1.height < el2.height) {
-				return 1;
-			}
-			return 0;
-		]]>
-	</method>
-
-	<!---
-		Initializes video playback component
-		and connect to RTMP
-	 -->
-	<method name="connectRecordingPlayer" args="connection_url,x,y,width,height">
-		if($debug) Debug.write("connectRecordingPlayer ", connection_url,x,y,width,height);
-		canvas.thishib.setAttribute('src',connection_url);
-		canvas.thishib.connect();
-		this.baseVideoStream = new lz.playBackVideoStream(canvas,{
-			x:x,
-			y:y,
-			width:width,
-			height:height
-		});
-	</method>
-
-	<!---
-		plays a recorded stream
-	 -->
-	<method name="playRecordingStream" args="streamName,delay,x,y,width,height">
-		if($debug) Debug.write("playRecordingStream ",streamName,x,y,width,height);
-		if (this.baseVideoStream == null) {
-			if ($debug) Debug.warn("baseVideoStream is NULL");
-			return;
-		}
-		this.baseVideoStream.setAttribute("x",x);
-		this.baseVideoStream.setAttribute("y",y);
-		this.baseVideoStream.setAttribute("width",width);
-		this.baseVideoStream.setAttribute("height",height);
-		this.baseVideoStream.setAttribute("visibility","visible");
-		this.baseVideoStream.playRecordingStream(streamName,delay);
-	</method>
-
-	<!---
-		Updates the width/height property of the recording playback video
-	 -->
-	<method name="updateRecordingVideoPosition" args="width,height">
-		if (this.baseVideoStream == null) {
-			if ($debug) Debug.warn("baseVideoStream is NULL");
-			return;
-		}
-		this.baseVideoStream.setAttribute("width",width);
-		this.baseVideoStream.setAttribute("height",height);
-	</method>
-
-	<!---
-		stops and hides the recording playback video
-	 -->
-	<method name="stopRecordingStream">
-		if($debug) Debug.write("stopRecordingStream ");
-		if (this.baseVideoStream == null) {
-			if ($debug) Debug.warn("baseVideoStream is NULL");
-			return;
-		}
-		if($debug) Debug.write(" stopRecording ");
-		this.baseVideoStream.stopRecording();
-		this.baseVideoStream.setAttribute("visibility","hidden");
-	</method>
-
-	<!---
-		pauses the current video or continue at the same position
-	 -->
-	<method name="pauseRecordingPlayback" args="pauseBool">
-		if($debug) Debug.write("pauseRecordingPlayback ");
-		if (this.baseVideoStream == null) {
-			if ($debug) Debug.warn("baseVideoStream is NULL");
-			return;
-		}
-		this.baseVideoStream.pause(pauseBool);
-	</method>
-
-	<method name="seekRecordingPlayback" args="flvTime">
-		if($debug) Debug.write("seekRecordingPlayback ",flvTime);
-		if (this.baseVideoStream == null) {
-			if ($debug) Debug.warn("baseVideoStream is NULL");
-			return;
-		}
-		this.baseVideoStream.seekStream(flvTime);
-	</method>
-
-	<method name="stopAndCloseRecordingConnection">
-		if($debug) Debug.write("stopAndCloseRecordingConnection ");
-		if (this.baseVideoStream == null) {
-			if ($debug) Debug.warn("baseVideoStream is NULL");
-			return;
-		}
-		this.baseVideoStream.stopRecording();
-		this.baseVideoStream.destroy();
-		this.baseVideoStream = null;
-	</method>
-
-	<!---
-	   #################################
-	   Methods to handle screen sharing video playback and cursor
-	 -->
-
-	<!---
-		Adds a new screen sharing playback video
-	 -->
-	<method name="newScreenSharing" args="value">
-	<![CDATA[
-		if (value.streamPublishName != canvas.publicSID) {
-			if (canvas.screenSharingDialogContainer == null) {
-				canvas.screenSharingDialogContainer = new lz.screenSharingDialogContainer(canvas);
-			}
-			if ($debug) Debug.warn("New Screen Sharing", value);
-			new lz.screenSharingDialog(canvas.screenSharingDialogContainer, {initObject: value});
-		} else {
-			if ($debug) Debug.warn("Self Screen Sharing");
-		}
-	]]>
-	</method>
-
-	<!---
-		Add a list of screen sharing playback videos
-		(initially when entering the room invoked)
-	 -->
-	<method name="newScreenSharings" args="value">
-	<![CDATA[
-		for (var eg in value) {
-			this.newScreenSharing(value[eg]);
-		}
-	]]>
-	</method>
-
-	<!---
-		Close a single screen sharing playback video
-	 -->
-	<method name="closeScreenSharing" args="value">
-	<![CDATA[
-		if (canvas.screenSharingDialogContainer != null) {
-			var obj = canvas.screenSharingDialogContainer.searchForSession(value.streamPublishName);
-			if (obj) {
-				obj.doClose();
-			}
-		}
-	]]>
-	</method>
-
-	<!---
-	   Closes all screen sharing playback videos, whiteboard videos, user videos
-	   and closes the rtmp connection
-	 -->
-	<method name="closeAllScreenSharings">
-	<![CDATA[
-		if ($debug) Debug.write("RECEIVE closeAllScreenSharings ");
-		if (canvas.screenSharingDialogContainer != null) {
-			canvas.screenSharingDialogContainer.closeAll();
-			canvas.screenSharingDialogContainer.destroy();
-			canvas.screenSharingDialogContainer = null;
-		}
-		canvas.commonVideoViewContent.clearAll();
-	]]>
-	</method>
-
-	<!---
-		Update the position of the cursor from the sharing screen
-	 -->
-	<method name="updateCursorScreenSharing" args="value">
-	<![CDATA[
-		//if ($debug) Debug.write("updateCursorScreenSharing ", value);
-		if (canvas.screenSharingDialogContainer != null) {
-			var obj = canvas.screenSharingDialogContainer.searchForSession(value.streamPublishName);
-			if (obj) {
-				obj.updateCursor(value.cursor_x, value.cursor_y);
-			}
-		}
-	]]>
-	</method>
-
-	<!---
-		Make regExpTest
-	 -->
-	<method name="regExpTest" args="fieldValue,regExStr">
-	<![CDATA[
-		var re = new RegExp(regExStr);
-		var testResult = re.test( fieldValue );
-		if ($debug) Debug.write(fieldValue, testResult);
-		return testResult;
-	]]>
-	</method>
-
-	<method name="getMic" args="valMic">
-	<![CDATA[
-		if ($debug) Debug.write("Entering getMic ...", valMic);
-		if (valMic == null) {
-			valMic = 0; //select first one by default
-		}
-		var _micro = canvas.echoPath == 0 ? Microphone.getMicrophone(valMic) : Microphone.getEnhancedMicrophone(valMic);
-
-		if (_micro != null) {
-			if (canvas.echoPath == 256) {
-				var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
-				options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
-				options.echoPath = 256;
-				options.nonLinearProcessing = true;
-				_micro.enhancedOptions = options;
-				if ($debug) Debug.write("echoPath set to 256");
-				if ($debug) Debug.write(_micro.enhancedOptions);
-			}
-			_micro.codec = SoundCodec.NELLYMOSER;
-			_micro.framesPerPacket = 1;
-			_micro.setSilenceLevel(0, 2000);
-			if ($debug) Debug.write("canvas.microphoneRateBest: ", canvas.microphoneRateBest);
-			_micro.rate = (canvas.microphoneRateBest == 'undefined') ? 22 : canvas.microphoneRateBest;
-			_micro.gain = 50;
-			// this has no effect if enhanced microphone is obtained
-			//Microphone setUseEchoSupression(bool)
-			var enableEchoSupression = !(canvas.echoSuppression === "false");
-			if ($debug) Debug.write("canvas.echoSuppression: ", canvas.echoSuppression);
-			_micro.setUseEchoSuppression(enableEchoSupression);
-		}
-		if ($debug) Debug.write("... getMic DONE", _micro);
-		return _micro;
-	]]>
-	</method>
-
-	<method name="getCam" args="valCam, width, height">
-	<![CDATA[
-		if ($debug) Debug.write("Entering getCam ...", valCam);
-		if (valCam == null) {
-			valCam = 0; //select first one by default
-		}
-		var _camera = Camera.getCamera(valCam);
-		if (_camera != null) {
-			if ($debug) Debug.write("size: ", width, height);
-
-			if ($debug) Debug.write("_camera.setQuality BEST: ", canvas.isInterview, (canvas.bandwidthNeededBest * 2), canvas.camQualityBest);
-			if (canvas.isInterview) {
-				//we need a fixed frame rate for the videos to merge them later on
-				_camera.setMode(320, 260, 24, true); //FIXME TODO hardcoded in different places
-				if ($debug) Debug.warn("IS INTERVIEW ");
-				_camera.setQuality(0, 98);
-			} else {
-				if ($debug) Debug.write("_camera.setMode: ", width, height, canvas.framesPerSecond, true);
-				_camera.setMode(width, height, canvas.framesPerSecond, true);
-				if ($debug) Debug.warn("IS NO INTERVIEW ");
-				_camera.setQuality(canvas.bandwidthNeededBest, canvas.camQualityBest);
-			}
-		}
-		if ($debug) Debug.write("... getCam DONE", _camera);
-		return _camera;
-	]]>
-	</method>
-
-	<method name="syncAVsettings" args="g">
-		ExternalInterface.call("avSettings", JSON.stringify(g));
-	</method>
-
-	<method name="storeAVsettings" args="cam, mic, w, h">
-	<![CDATA[
-		var t:SharedObject = SharedObject.getLocal('userdata');
-		var g = t.data;
-		if (!g) g = new Array();
-		g["cam"] = cam;
-		g["mic"] = mic;
-		g["width"] = w;
-		g["height"] = h;
-		t.flush();
-		//if ($debug) Debug.write("sharedobject store:: ", g);
-		syncAVsettings(g);
-	]]>
-	</method>
-
-	<method name="loadAVsettings">
-	<![CDATA[
-		var t:SharedObject = SharedObject.getLocal('userdata');
-		var g = t.data;
-		//if ($debug) Debug.write("loadAVsettings: ", g["cam"], g["mic"]);
-
-		if(g["width"] > 0 && g["height"] > 0) {
-			return g;
-		}
-		return null;
-	]]>
-	</method>
-
-	<method name="ensureAVsettings" args="w, h">
-		if ($debug) Debug.write("ensureAVsettings::  [width, height] : [" + w + ", " + h + "]");
-		var g = loadAVsettings();
-		if (!g) {
-			storeAVsettings(Camera.names.length > 0 ? 0 : -1, Microphone.names.length > 0 ? 0 : -1, w, h);
-		} else {
-			syncAVsettings(g);
-		}
-	</method>
-
-	<method name="getAvSetting" args="prop, g=null, def=null">
-		//Initialize and get eventually stored property
-		if (!g) {
-			g = canvas.commonVideoViewContent.loadAVsettings();
-		}
-		var val = g != null ? g[prop] : null;
-		return val != null ? val : def;
-	</method>
-
-	<method name="getAVmode">
-		var settings = canvas.currentClient.avsettings;
-		return !settings ? 'n' : settings;
-	</method>
-
-	<method name="_startAvBroadcast" args="restart=false">
-		setUserAVSettings.updateBroadcastId = restart;
-		setUserAVSettings.doCall();
-	</method>
-
-	<netRemoteCallHib name="setUserAVSettings" funcname="setUserAVSettings" remotecontext="$once{ canvas.thishib }" >
-		<attribute name="updateBroadcastId" value="false" type="boolean" />
-		<netparam><method name="getValue">return parent.updateBroadcastId;</method></netparam>
-		<handler name="ondata" args="value">
-			if ($debug) Debug.write("setUserAVSettings:: done", value);
-			if (value > -1) {
-				canvas.currentClient.broadCastID = value;
-				parent.startAvBroadcast();
-			}
-		</handler>
-	</netRemoteCallHib>
-
-	<method name="videoEnabled" args="settings">
-	<![CDATA[
-		return settings.indexOf('v') > -1;
-	]]>
-	</method>
-
-	<method name="startAvBroadcast">
-	<![CDATA[
-		var g = canvas.commonVideoViewContent.loadAVsettings();
-		var settings = getAVmode();
-		if ($debug) Debug.write("startAvBroadcast::mode ", settings);
-		if ('n' != settings) {
-			var videoWindow = getVideoObjectByPublicSID(canvas.publicSID);
-			if (videoWindow != null && videoEnabled(settings) && videoEnabled(videoWindow.clientVars.avsettings)) {
-				// audio on/off with video enabled
-				var videoview = videoWindow._chatvideoinner._videostream;
-				if (settings == 'av' && videoWindow.clientVars.avsettings == 'v') {
-					videoview.muteMicro(false);
-				} else if (settings == 'v' && videoWindow.clientVars.avsettings == 'av') {
-					videoview.muteMicro(true);
-				}
-				videoWindow.clientVars = canvas.currentClient;
-			} else {
-				videoWindow = createVideoObject(canvas.publicSID, true, canvas.currentClient.interviewPodId, canvas.currentClient);
-				if ($debug) Debug.write("startAvBroadcast::doninitalize");
-
-				var videoview = videoWindow._chatvideoinner._videostream;
-				if ($debug) Debug.write("videoWindow: ", videoWindow);
-				videoWindow.setAttribute('isremote', false);
-				var _micro = getMic(getAvSetting('mic', g, 0));
-				var _camera = getCam(getAvSetting('cam', g, 0), canvas.currentClient.VWidth, canvas.currentClient.VHeight);
-				if ($debug) Debug.write("startAvBroadcast", _camera, _micro, settings, videoview);
-
-				if ($debug) Debug.write("BroadcastId: ", canvas.currentClient.broadCastID);
-				switch (settings) {
-					case "av":
-						videoview.broadcast(canvas.currentClient.broadCastID, _camera, _micro);
-						break;
-					case "a":
-						videoview.broadcast(canvas.currentClient.broadCastID, null, _micro);
-						break;
-					case "v":
-						videoview.broadcast(canvas.currentClient.broadCastID, _camera, _micro);
-						videoview.muteMicro(true);
-						break;
-					default:
-						break;
-				}
-			}
-			videoWindow.updateAVSettingsSymbol(canvas.currentClient);
-		}
-		enableRecordingButton();
-	]]>
-	</method>
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+
+<class name="commonVideoViewContentSWF10" extends="view">
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.external.ExternalInterface;
+				import flash.media.Camera;
+				import flash.media.Microphone;
+				import flash.media.MicrophoneEnhancedMode;
+				import flash.media.MicrophoneEnhancedOptions;
+				import flash.media.SoundCodec;
+				import flash.net.SharedObject;
+			</passthrough>
+		</when>
+	</switch>
+
+	<attribute name="offsetLength" type="number" value="40"/>
+	<attribute name="videoWidth" type="number" value="132"/>
+	<attribute name="videoHeight" type="number" value="132"/>
+	<attribute name="SIDEPANEL_WIDTH" type="number" value="270" />
+	<attribute name="baseVideoStream" value="null" />
+
+	<method name="toggleVideo" args="value">
+		if($debug) Debug.info("toggleVideo ", canvas.currentClient, value);
+		canvas.currentClient.canVideo = value;
+	</method>
+
+	<method name="createEditRecordStream" args="isInterview">
+		if($debug) Debug.info("createEditRecordStream,", isInterview);
+		new lz.editRecordStreamSWF10(canvas, {
+				isInterview: isInterview,
+			});
+	</method>
+
+	<method name="batchCreateVideo" args="clients">
+	<![CDATA[
+		if ($debug) Debug.info("batchCreateVideo: ", clients.length);
+		for (var i = 0; i < clients.length; ++i) {
+			var c = clients[i];
+			if (c.streamid != canvas.streamid) {
+				if (c.isBroadcasting) {
+					createVideo(c);
+				} else {
+					createVideoObject(c.publicSID, false, c.interviewPodId, c);
+				}
+			}
+		}
+	]]>
+	</method>
+
+	<!--
+		Method that creates the video views when another user enters a room and his
+		item in the list of participants is created.
+		The method to "play" the stream is invoked later, when the user
+		really starts to stream and not only when he just enters the room.
+	 -->
+	<method name="createVideoObject" args="publicSID, isBroadcasting, interviewPodId, object">
+		if($debug) Debug.info("createVideoObject, publicSID: ",publicSID, "isBroadcasting: ", isBroadcasting, "object", object);
+		var vidContainer = getVideoObjectByPublicSID(publicSID);
+		if (vidContainer == null) {
+			vidContainer = isBroadcasting ? this.getNewVideoObject(publicSID) : this.getNewVideoObjectByPos(publicSID);
+			vidContainer.publicSID = publicSID;
+		}
+		if ($debug) Debug.write("Is interview ? ", canvas.isInterview);
+		placeInterviewPod(vidContainer, interviewPodId);
+		vidContainer.clientVars = object;
+		vidContainer.setAttribute('visible', false);
+		return vidContainer;
+	</method>
+
+	<method name="placeInterviewPod" args="vidContainer, interviewPodId">
+	<![CDATA[
+		if ($debug) Debug.write("placeInterviewPod::Is interview ", canvas.isInterview, interviewPodId);
+		if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) {
+			if (interviewPodId != null) {
+				vidContainer.setAttribute("interviewPodId", interviewPodId);
+				var cont = canvas._drawarea._videoviewcontent;
+				var box = cont['interviewVideoBox' + interviewPodId];
+				if (!!box) {
+					vidContainer.setAttribute("x", cont.x + box.x);
+					vidContainer.setAttribute("y", box.y);
+				}
+			}
+			vidContainer.setAttribute("width", 322);
+			vidContainer.setAttribute("height", 281);
+		}
+	]]>
+	</method>
+
+	<method name="setPartnerName" args="obj, first, last=null">
+		if (!obj) {
+			return;
+		}
+		var dispName = !last ? first : first + ' ' + last;
+		obj.setAttribute('chatpartnername', dispName);
+	</method>
+
+	<!--
+		Method that creates the video views when user(self) initially entering a room.
+		Creates the video-view AND starts to stream/play the video
+	 -->
+	<method name="createVideo" args="cl">
+	<![CDATA[
+		if ($debug) Debug.info("createVideo::: ", cl.publicSID, cl.broadCastID, cl.avsettings, cl.interviewPodId);
+		if ($debug) Debug.write(" createVideo ALL vars ", cl);
+		var vidContainer = getVideoObjectByPublicSID(cl.publicSID);
+		if (cl.avsettings != 'n') {
+			if (vidContainer == null) {
+				vidContainer = getNewVideoObjectByPos(cl.publicSID);
+			}
+			vidContainer.clientVars = cl;
+			setPartnerName(vidContainer, cl.firstname, cl.lastname);
+			switch (cl.avsettings) {
+				case 'a':
+					if ($debug) Debug.warn("start play");
+					vidContainer._chatvideoinner._videostream.playStream(cl.broadCastID, -1);
+					break;
+				case 'v':
+				case 'av':
+					//this means avsettings is either: "v" or "av"
+					vidContainer._chatvideoinner._videostream.playStream(cl.broadCastID, -1);
+					break;
+				case 'n':
+				default:
+					break;
+			}
+			vidContainer.updateAVSettingsSymbol(cl);
+			if (cl.micMuted) {
+				vidContainer.setMicMuted(cl.micMuted);
+			}
+			if ($debug) Debug.write(" createVideo ALL vars ", vidContainer);
+			placeInterviewPod(vidContainer, cl.interviewPodId);
+		}
+		enableRecordingButton();
+		return vidContainer;
+	]]>
+	</method>
+
+	<method name="getVideoObjectByPublicSID" args="publicSID">
+	<![CDATA[
+		//if ($debug) Debug.write("getVideoObjectByPublicSid SEARCH: ", publicSID);
+		for (var i = 0; i < this.subviews.length; ++i) {
+			//if ($debug) Debug.write("this.subviews[i].publicSID ", this.subviews[i].publicSID);
+			if (this.subviews[i].publicSID == publicSID) {
+				return this.subviews[i];
+			}
+		}
+		if ($debug) Debug.warn(" - getVideoObjectByPublicSID - DID NOT FIND THE USER BY ", publicSID);
+		return null;
+	]]>
+	</method>
+
+	<method name="getNewVideoObjectByPos" args="publicSID">
+	<![CDATA[
+		//Get a Free VideoView Slot
+		var freePos = this.getVideoObjectFreePos(this.offsetLength,this.videoWidth,this.videoHeight);
+
+		return new lz.videoObjectPlayBroadcast(this,{
+				publicSID:publicSID,
+				width:videoWidth,
+				height:videoHeight,
+				x:freePos[0],
+				y:freePos[1],
+				isInterview:canvas.isInterview
+			});
+	]]>
+	</method>
+
+	<method name="getNewVideoObject" args="publicSID">
+	<![CDATA[
+		this.broadCastViewRef = getNewVideoObjectByPos(publicSID);
+		this.broadCastViewRef._chatvideoinner.r.destroy();
+		if ($debug) Debug.write("getNewVideoObject canvas.currentClient ",publicSID, canvas.currentClient);
+		setPartnerName(this.broadCastViewRef, canvas.currentClient.firstname, canvas.currentClient.lastname);
+		return this.broadCastViewRef;
+	]]>
+	</method>
+
+	<method name="enableRecordingButton">
+	<![CDATA[
+		var count = 0;
+		for (var i = 0; i < this.subviews.length; ++i) {
+			if (this.subviews[i].visible) {
+				count++;
+			}
+		}
+		if (canvas.isInterview) {
+			if (count > 0 && !canvas._drawarea._interview._stop.enabled) {
+				canvas._drawarea._interview._start.setAttribute('enabled', true);
+			} else if (count == 0 && canvas._drawarea._interview._start.enabled) {
+				canvas._drawarea._interview._start.setAttribute('enabled', false);
+			}
+		}
+	]]>
+	</method>
+
+	<method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">
+	<![CDATA[
+		if (canvas.isInterview) {
+			return [0, 0];
+		}
+		var newx = 20;
+		if (canvas.currentRoomObj.hideWhiteboard) {
+			newx += SIDEPANEL_WIDTH;
+		}
+		var newy = 0;
+		var posFound = false;
+		if (offsetLength == undefined) {
+			offsetLength=10;
+		}
+		while (!posFound) {
+			posFound = true;
+			for (var i=0;i<this.subviews.length;i++){
+				var subview = this.subviews[i];
+				var left = subview.x;
+				var right = subview.x + subview.width;
+				var top = subview.y;
+				var bottom = subview.y + subview.height;
+
+				if( !(newx > right
+					|| (newx + videoWidth) < left
+					|| newy > bottom
+					|| (newy + videoHeight) < top ))
+				{
+					newx = right + offsetLength;
+					posFound = false;
+				}
+				if ((newx + videoWidth) >= canvas.width) {
+					newx = 20;
+					if (canvas.currentRoomObj.hideWhiteboard) {
+						newx += SIDEPANEL_WIDTH;
+					}
+					newy += 10;
+					posFound = false;
+				}
+			}
+		}
+
+		if ((newy + videoHeight) >= canvas.height) {
+			newy = 0;
+		}
+		return [newx, newy];
+	]]>
+	</method>
+
+	<method name="muteSound" args="publicSID, bool">
+	<![CDATA[
+		var obj = this.getVideoObjectByPublicSID(publicSID);
+		if (obj != null) {
+			obj.silenceMicrophone(bool);
+		}
+		return;
+	]]>
+	</method>
+
+	<method name="resetAllValues">
+		for (var eg in this.subviews){
+			this.subviews[eg].resetValues();
+		}
+		return;
+	</method>
+
+	<method name="closeStreamclient" args="publicSID">
+	<![CDATA[
+		if ($debug) Debug.write("closeStream this: ", publicSID);
+		var obj = this.getVideoObjectByPublicSID(publicSID);
+		if ($debug) Debug.write("closeStream this obj: ", obj);
+		if (obj != null) {
+			obj.resetValues();
+		}
+		if (canvas.publicSID == publicSID && canvas.editRecordStream != null) {
+			canvas.editRecordStream.destroy();
+		}
+		return obj;
+	]]>
+	</method>
+
+	<method name="removeVideoByUser" args="publicSID"><![CDATA[
+		if ($debug) Debug.write("removeVideoByUser: ", publicSID);
+		var obj = closeStreamclient(publicSID);
+		if (obj == null) {
+			if ($debug) Debug.warn("Could Not find this To removeVideoByUser", publicSID);
+		} else {
+			obj.destroy();
+			enableRecordingButton();
+		}
+	]]></method>
+
+	<method name="updateMuteStatusVideoView" args="roomClient">
+	<![CDATA[
+		var obj = this.getVideoObjectByPublicSID(roomClient.publicSID);
+		if (obj != null) {
+			obj.muteMicrophone(roomClient);
+		}
+	]]>
+	</method>
+
+	<method name="setSpeakingByPos" args="publicSID,bool">
+	<![CDATA[
+		//if ($debug) Debug.write("setSpeakingByPos ",publicSID,bool);
+		var obj = this.getVideoObjectByPublicSID(publicSID);
+		if (obj == null) {
+			if ($debug) Debug.warn("Could not find user for setSpeakingByPos ",publicSID,bool);
+			return;
+		}
+		obj._loudness.setSpeaking(bool);
+	]]>
+	</method>
+
+	<method name="setAVSettingsToClient" args="rcl">
+	<![CDATA[
+		if ($debug) Debug.write("setAVSettingsToClient: ", rcl.publicSID, rcl);
+		var obj = this.getVideoObjectByPublicSID(rcl.publicSID);
+		if ($debug) Debug.write("setAVSettingsToClient: ", obj, rcl.avsettings);
+		if (obj == null) {
+			obj = this.getNewVideoObjectByPos(rcl.publicSID);
+		}
+		obj.thisVars = rcl;
+		obj.updateAVSettingsSymbol(rcl);
+		var v = ("a" == rcl.avsettings && obj.isInterview) || ("a" != rcl.avsettings && rcl.avsettings != "n");
+		obj.setAttribute("visible", "n" != rcl.avsettings);
+		if ($debug) Debug.write("setAVSettingsToClient: ", v, obj.visible);
+	]]>
+	</method>
+
+	<method name="startStream" args="value">
+	<![CDATA[
+		//value.publicSID,value.broadCastID,value.firstname,value.lastname,value.interviewPodId,value.VWidth,value.VHeight
+
+		if ($debug) Debug.write("startStream: ", value);
+		createVideo(value);
+	]]>
+	</method>
+
+	<!---
+		Clear all views, probably this is called whenever a user leaves the room for example
+	 -->
+	<method name="clearAll">
+	<![CDATA[
+		if ($debug) Debug.write("clearAll", this.subviews);
+		while(this.subviews.length > 0) {
+			if (this.subviews[0]._chatvideoinner != null) {
+				this.subviews[0]._chatvideoinner._videostream._stop();
+			}
+			this.subviews[0].destroy();
+		}
+		if (canvas.editRecordStream != null) {
+			canvas.editRecordStream.destroy();
+		}
+		return;
+	]]>
+	</method>
+
+	<method name="setExclusiveAudioAllowStatus" args="canGiveAudio">
+	<![CDATA[
+		if ($debug) Debug.write("setExclusiveAudioAllowStatus :: ",canGiveAudio);
+		canvas.setAttribute("isAllowedToGiveExclusiveAudio",canGiveAudio);
+		return;
+	]]>
+	</method>
+
+	<method name="updateFirstLastName" args="publicSID, first, last">
+		setPartnerName(getVideoObjectByPublicSID(publicSID), first, last);
+	</method>
+
+	<!-- arranges video pods -->
+	<method name="arrangeWindows">
+	<![CDATA[
+		if ($debug) Debug.write("arrangeWindows");
+		var windowsList = this.subviews;
+
+		if (0 == windowsList.length) {
+			return;
+		}
+
+		windowsList.sort(this.sortFunction);
+
+		var offsetInPx = 40;
+		var initX = 20;
+		var initY = 20;
+		var xPos = initX;
+		var yPos = initY;
+		var rowHeight = windowsList[0].height;
+
+		// arrange windows with new positions
+		for (var winIdx = 0; winIdx < windowsList.length; winIdx++) {
+			var window = windowsList[winIdx];
+			if (canvas.width < xPos + window.width) {
+				yPos += rowHeight + offsetInPx;
+				xPos = initX;
+				rowHeight = window.height;
+			}
+			if (canvas.height < yPos) {
+				initX += 10;
+				initY += 10;
+				xPos = initX;
+				yPos = initY;
+			}
+			window.setAttribute("x", xPos);
+			window.setAttribute("y", yPos);
+			window.bringToFront();
+
+			xPos += window.width + offsetInPx;
+		}
+	]]>
+	</method>
+
+	<!-- @keyword private -->
+	<method name="sortFunction" args="el1, el2">
+		<![CDATA[
+			if (el1.height > el2.height) {
+				return -1;
+			} else if (el1.height < el2.height) {
+				return 1;
+			}
+			return 0;
+		]]>
+	</method>
+
+	<!---
+		Initializes video playback component
+		and connect to RTMP
+	 -->
+	<method name="connectRecordingPlayer" args="connection_url,x,y,width,height">
+		if($debug) Debug.write("connectRecordingPlayer ", connection_url,x,y,width,height);
+		canvas.thishib.setAttribute('src',connection_url);
+		canvas.thishib.connect();
+		this.baseVideoStream = new lz.playBackVideoStream(canvas,{
+			x:x,
+			y:y,
+			width:width,
+			height:height
+		});
+	</method>
+
+	<!---
+		plays a recorded stream
+	 -->
+	<method name="playRecordingStream" args="streamName,delay,x,y,width,height">
+		if($debug) Debug.write("playRecordingStream ",streamName,x,y,width,height);
+		if (this.baseVideoStream == null) {
+			if ($debug) Debug.warn("baseVideoStream is NULL");
+			return;
+		}
+		this.baseVideoStream.setAttribute("x",x);
+		this.baseVideoStream.setAttribute("y",y);
+		this.baseVideoStream.setAttribute("width",width);
+		this.baseVideoStream.setAttribute("height",height);
+		this.baseVideoStream.setAttribute("visibility","visible");
+		this.baseVideoStream.playRecordingStream(streamName,delay);
+	</method>
+
+	<!---
+		Updates the width/height property of the recording playback video
+	 -->
+	<method name="updateRecordingVideoPosition" args="width,height">
+		if (this.baseVideoStream == null) {
+			if ($debug) Debug.warn("baseVideoStream is NULL");
+			return;
+		}
+		this.baseVideoStream.setAttribute("width",width);
+		this.baseVideoStream.setAttribute("height",height);
+	</method>
+
+	<!---
+		stops and hides the recording playback video
+	 -->
+	<method name="stopRecordingStream">
+		if($debug) Debug.write("stopRecordingStream ");
+		if (this.baseVideoStream == null) {
+			if ($debug) Debug.warn("baseVideoStream is NULL");
+			return;
+		}
+		if($debug) Debug.write(" stopRecording ");
+		this.baseVideoStream.stopRecording();
+		this.baseVideoStream.setAttribute("visibility","hidden");
+	</method>
+
+	<!---
+		pauses the current video or continue at the same position
+	 -->
+	<method name="pauseRecordingPlayback" args="pauseBool">
+		if($debug) Debug.write("pauseRecordingPlayback ");
+		if (this.baseVideoStream == null) {
+			if ($debug) Debug.warn("baseVideoStream is NULL");
+			return;
+		}
+		this.baseVideoStream.pause(pauseBool);
+	</method>
+
+	<method name="seekRecordingPlayback" args="flvTime">
+		if($debug) Debug.write("seekRecordingPlayback ",flvTime);
+		if (this.baseVideoStream == null) {
+			if ($debug) Debug.warn("baseVideoStream is NULL");
+			return;
+		}
+		this.baseVideoStream.seekStream(flvTime);
+	</method>
+
+	<method name="stopAndCloseRecordingConnection">
+		if($debug) Debug.write("stopAndCloseRecordingConnection ");
+		if (this.baseVideoStream == null) {
+			if ($debug) Debug.warn("baseVideoStream is NULL");
+			return;
+		}
+		this.baseVideoStream.stopRecording();
+		this.baseVideoStream.destroy();
+		this.baseVideoStream = null;
+	</method>
+
+	<!---
+	   #################################
+	   Methods to handle screen sharing video playback and cursor
+	 -->
+
+	<!---
+		Adds a new screen sharing playback video
+	 -->
+	<method name="newScreenSharing" args="value">
+	<![CDATA[
+		if (value.streamPublishName != canvas.publicSID) {
+			if (canvas.screenSharingDialogContainer == null) {
+				canvas.screenSharingDialogContainer = new lz.screenSharingDialogContainer(canvas);
+			}
+			if ($debug) Debug.warn("New Screen Sharing", value);
+			new lz.screenSharingDialog(canvas.screenSharingDialogContainer, {initObject: value});
+		} else {
+			if ($debug) Debug.warn("Self Screen Sharing");
+		}
+	]]>
+	</method>
+
+	<!---
+		Add a list of screen sharing playback videos
+		(initially when entering the room invoked)
+	 -->
+	<method name="newScreenSharings" args="value">
+	<![CDATA[
+		for (var eg in value) {
+			this.newScreenSharing(value[eg]);
+		}
+	]]>
+	</method>
+
+	<!---
+		Close a single screen sharing playback video
+	 -->
+	<method name="closeScreenSharing" args="value">
+	<![CDATA[
+		if (canvas.screenSharingDialogContainer != null) {
+			var obj = canvas.screenSharingDialogContainer.searchForSession(value.streamPublishName);
+			if (obj) {
+				obj.doClose();
+			}
+		}
+	]]>
+	</method>
+
+	<!---
+	   Closes all screen sharing playback videos, whiteboard videos, user videos
+	   and closes the rtmp connection
+	 -->
+	<method name="closeAllScreenSharings">
+	<![CDATA[
+		if ($debug) Debug.write("RECEIVE closeAllScreenSharings ");
+		if (canvas.screenSharingDialogContainer != null) {
+			canvas.screenSharingDialogContainer.closeAll();
+			canvas.screenSharingDialogContainer.destroy();
+			canvas.screenSharingDialogContainer = null;
+		}
+		canvas.commonVideoViewContent.clearAll();
+	]]>
+	</method>
+
+	<!---
+		Update the position of the cursor from the sharing screen
+	 -->
+	<method name="updateCursorScreenSharing" args="value">
+	<![CDATA[
+		//if ($debug) Debug.write("updateCursorScreenSharing ", value);
+		if (canvas.screenSharingDialogContainer != null) {
+			var obj = canvas.screenSharingDialogContainer.searchForSession(value.streamPublishName);
+			if (obj) {
+				obj.updateCursor(value.cursor_x, value.cursor_y);
+			}
+		}
+	]]>
+	</method>
+
+	<!---
+		Make regExpTest
+	 -->
+	<method name="regExpTest" args="fieldValue,regExStr">
+	<![CDATA[
+		var re = new RegExp(regExStr);
+		var testResult = re.test( fieldValue );
+		if ($debug) Debug.write(fieldValue, testResult);
+		return testResult;
+	]]>
+	</method>
+
+	<method name="getMic" args="valMic">
+	<![CDATA[
+		if ($debug) Debug.write("Entering getMic ...", valMic);
+		if (valMic == null) {
+			valMic = 0; //select first one by default
+		}
+		var _micro = canvas.echoPath == 0 ? Microphone.getMicrophone(valMic) : Microphone.getEnhancedMicrophone(valMic);
+
+		if (_micro != null) {
+			if (canvas.echoPath == 256) {
+				var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
+				options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
+				options.echoPath = 256;
+				options.nonLinearProcessing = true;
+				_micro.enhancedOptions = options;
+				if ($debug) Debug.write("echoPath set to 256");
+				if ($debug) Debug.write(_micro.enhancedOptions);
+			}
+			_micro.codec = SoundCodec.NELLYMOSER;
+			_micro.framesPerPacket = 1;
+			_micro.setSilenceLevel(0, 2000);
+			if ($debug) Debug.write("canvas.microphoneRateBest: ", canvas.microphoneRateBest);
+			_micro.rate = (canvas.microphoneRateBest == 'undefined') ? 22 : canvas.microphoneRateBest;
+			_micro.gain = 50;
+			// this has no effect if enhanced microphone is obtained
+			//Microphone setUseEchoSupression(bool)
+			var enableEchoSupression = !(canvas.echoSuppression === "false");
+			if ($debug) Debug.write("canvas.echoSuppression: ", canvas.echoSuppression);
+			_micro.setUseEchoSuppression(enableEchoSupression);
+		}
+		if ($debug) Debug.write("... getMic DONE", _micro);
+		return _micro;
+	]]>
+	</method>
+
+	<method name="getCam" args="valCam, width, height">
+	<![CDATA[
+		if ($debug) Debug.write("Entering getCam ...", valCam);
+		if (valCam == null) {
+			valCam = 0; //select first one by default
+		}
+		var _camera = Camera.getCamera(valCam);
+		if (_camera != null) {
+			if ($debug) Debug.write("size: ", width, height);
+
+			if ($debug) Debug.write("_camera.setQuality BEST: ", canvas.isInterview, (canvas.bandwidthNeededBest * 2), canvas.camQualityBest);
+			if (canvas.isInterview) {
+				//we need a fixed frame rate for the videos to merge them later on
+				_camera.setMode(320, 260, 24, true); //FIXME TODO hardcoded in different places
+				if ($debug) Debug.warn("IS INTERVIEW ");
+				_camera.setQuality(0, 98);
+			} else {
+				if ($debug) Debug.write("_camera.setMode: ", width, height, canvas.framesPerSecond, true);
+				_camera.setMode(width, height, canvas.framesPerSecond, true);
+				if ($debug) Debug.warn("IS NO INTERVIEW ");
+				_camera.setQuality(canvas.bandwidthNeededBest, canvas.camQualityBest);
+			}
+		}
+		if ($debug) Debug.write("... getCam DONE", _camera);
+		return _camera;
+	]]>
+	</method>
+
+	<method name="syncAVsettings" args="g">
+		ExternalInterface.call("avSettings", JSON.stringify(g));
+	</method>
+
+	<method name="storeAVsettings" args="cam, mic, w, h">
+	<![CDATA[
+		var t:SharedObject = SharedObject.getLocal('userdata');
+		var g = t.data;
+		if (!g) g = new Array();
+		g["cam"] = cam;
+		g["mic"] = mic;
+		g["width"] = w;
+		g["height"] = h;
+		t.flush();
+		//if ($debug) Debug.write("sharedobject store:: ", g);
+		syncAVsettings(g);
+	]]>
+	</method>
+
+	<method name="loadAVsettings">
+	<![CDATA[
+		var t:SharedObject = SharedObject.getLocal('userdata');
+		var g = t.data;
+		//if ($debug) Debug.write("loadAVsettings: ", g["cam"], g["mic"]);
+
+		if(g["width"] > 0 && g["height"] > 0) {
+			return g;
+		}
+		return null;
+	]]>
+	</method>
+
+	<method name="ensureAVsettings" args="w, h">
+		if ($debug) Debug.write("ensureAVsettings::  [width, height] : [" + w + ", " + h + "]");
+		var g = loadAVsettings();
+		if (!g) {
+			storeAVsettings(Camera.names.length > 0 ? 0 : -1, Microphone.names.length > 0 ? 0 : -1, w, h);
+		} else {
+			syncAVsettings(g);
+		}
+	</method>
+
+	<method name="getAvSetting" args="prop, g=null, def=null">
+		//Initialize and get eventually stored property
+		if (!g) {
+			g = canvas.commonVideoViewContent.loadAVsettings();
+		}
+		var val = g != null ? g[prop] : null;
+		return val != null ? val : def;
+	</method>
+
+	<method name="getAVmode">
+		var settings = canvas.currentClient.avsettings;
+		return !settings ? 'n' : settings;
+	</method>
+
+	<method name="_startAvBroadcast" args="restart=false">
+		setUserAVSettings.updateBroadcastId = restart;
+		setUserAVSettings.doCall();
+	</method>
+
+	<netRemoteCallHib name="setUserAVSettings" funcname="setUserAVSettings" remotecontext="$once{ canvas.thishib }" >
+		<attribute name="updateBroadcastId" value="false" type="boolean" />
+		<netparam><method name="getValue">return parent.updateBroadcastId;</method></netparam>
+		<handler name="ondata" args="value">
+			if ($debug) Debug.write("setUserAVSettings:: done", value);
+			if (value > -1) {
+				canvas.currentClient.broadCastID = value;
+				parent.startAvBroadcast();
+			}
+		</handler>
+	</netRemoteCallHib>
+
+	<method name="videoEnabled" args="settings">
+	<![CDATA[
+		return settings.indexOf('v') > -1;
+	]]>
+	</method>
+
+	<method name="startAvBroadcast">
+	<![CDATA[
+		var g = canvas.commonVideoViewContent.loadAVsettings();
+		var settings = getAVmode();
+		if ($debug) Debug.write("startAvBroadcast::mode ", settings);
+		if ('n' != settings) {
+			var videoWindow = getVideoObjectByPublicSID(canvas.publicSID);
+			if (videoWindow != null && videoEnabled(settings) && videoEnabled(videoWindow.clientVars.avsettings)) {
+				// audio on/off with video enabled
+				var videoview = videoWindow._chatvideoinner._videostream;
+				if (settings == 'av' && videoWindow.clientVars.avsettings == 'v') {
+					videoview.muteMicro(false);
+				} else if (settings == 'v' && videoWindow.clientVars.avsettings == 'av') {
+					videoview.muteMicro(true);
+				}
+				videoWindow.clientVars = canvas.currentClient;
+			} else {
+				videoWindow = createVideoObject(canvas.publicSID, true, canvas.currentClient.interviewPodId, canvas.currentClient);
+				if ($debug) Debug.write("startAvBroadcast::doninitalize");
+
+				var videoview = videoWindow._chatvideoinner._videostream;
+				if ($debug) Debug.write("videoWindow: ", videoWindow);
+				videoWindow.setAttribute('isremote', false);
+				var _micro = getMic(getAvSetting('mic', g, 0));
+				var _camera = getCam(getAvSetting('cam', g, 0), canvas.currentClient.VWidth, canvas.currentClient.VHeight);
+				if ($debug) Debug.write("startAvBroadcast", _camera, _micro, settings, videoview);
+
+				if ($debug) Debug.write("BroadcastId: ", canvas.currentClient.broadCastID);
+				switch (settings) {
+					case "av":
+						videoview.broadcast(canvas.currentClient.broadCastID, _camera, _micro);
+						break;
+					case "a":
+						videoview.broadcast(canvas.currentClient.broadCastID, null, _micro);
+						break;
+					case "v":
+						videoview.broadcast(canvas.currentClient.broadCastID, _camera, _micro);
+						videoview.muteMicro(true);
+						break;
+					default:
+						break;
+				}
+			}
+			videoWindow.updateAVSettingsSymbol(canvas.currentClient);
+		}
+		enableRecordingButton();
+	]]>
+	</method>
+</class>
+
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/dragHelper.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/dragHelper.lzx b/openmeetings-flash/src/main/swf/dragHelper.lzx
index 0d64aff..a879103 100644
--- a/openmeetings-flash/src/main/swf/dragHelper.lzx
+++ b/openmeetings-flash/src/main/swf/dragHelper.lzx
@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-<class name="dragHelper">
-
-    <attribute name="dragHelper" value="null" />
-
-    <method name="create">
-        if(this.dragHelper != null ) this.dragHelper.destroy();
-        this.dragHelper = new lz.view(canvas, {width:canvas.width,height:canvas.height,x:'0',y:'0', bgcolor:'0xFFFFFF', opacity:0.01,clickable:true});
-        this.dragHelper.sendInFrontOf(canvas.mainComponent);
-    </method>
-
-    <method name="remove">
-    	if (this.dragHelper) {
-	        this.dragHelper.destroy();
-	        this.dragHelper = null;
-        }
-    </method>
-
-</class>
-
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dragHelper">
+
+    <attribute name="dragHelper" value="null" />
+
+    <method name="create">
+        if(this.dragHelper != null ) this.dragHelper.destroy();
+        this.dragHelper = new lz.view(canvas, {width:canvas.width,height:canvas.height,x:'0',y:'0', bgcolor:'0xFFFFFF', opacity:0.01,clickable:true});
+        this.dragHelper.sendInFrontOf(canvas.mainComponent);
+    </method>
+
+    <method name="remove">
+    	if (this.dragHelper) {
+	        this.dragHelper.destroy();
+	        this.dragHelper = null;
+        }
+    </method>
+
+</class>
+
 </library>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/lzrecorder/library.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/lzrecorder/library.lzx b/openmeetings-flash/src/main/swf/lzrecorder/library.lzx
index 6f84e4c..ecffb6c 100644
--- a/openmeetings-flash/src/main/swf/lzrecorder/library.lzx
+++ b/openmeetings-flash/src/main/swf/lzrecorder/library.lzx
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-    <include href="playBackVideoStream.lzx" />
-    
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="playBackVideoStream.lzx" />
+    
+</library>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/lzrecorder/playBackVideoStream.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/lzrecorder/playBackVideoStream.lzx b/openmeetings-flash/src/main/swf/lzrecorder/playBackVideoStream.lzx
index b7fdfd5..5d7c731 100644
--- a/openmeetings-flash/src/main/swf/lzrecorder/playBackVideoStream.lzx
+++ b/openmeetings-flash/src/main/swf/lzrecorder/playBackVideoStream.lzx
@@ -1,71 +1,71 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-<!---
-    The playBackVideoStream is used in the recording playerback to show the video
- -->
-<class name="playBackVideoStream" extends="baseVideoStream" bgcolor="0x000000" visibility="hidden">
-    
-    <attribute name="timerDelegate" value="null"/>
-    <attribute name="timerDelegateStarted" value="false" type="boolean"/>
-    
-    <handler name="oninit">
-        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );
-    </handler>
-    
-    <handler name="onclick">
-        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'togglePlayRecordingStream');
-    </handler>
-    
-    <method name="playRecordingStream" args="streamName,delay">
-        this.playStream(streamName,delay);
-        this.timerDelegateStarted = true;
-        lz.Timer.addTimer( this.timerDelegate , 1000 );
-    </method>
-    
-    <method name="stopRecording">
-        this._stop();
-        lz.Timer.removeTimer(this.timerDelegate);
-        this.timerDelegateStarted = false;
-    </method>
-    
-    <handler name="onNetStatus" args="info">
-        if ($debug) Debug.write("onNetStatus ",info);
-        if (info.code ==  "NetStream.Play.Stop" ) {
-            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream');
-        }
-    </handler>
-    <handler name="onMetaDataEvent" args="info">
-        if ($debug) Debug.write("onMetaData ",info);
-    </handler>
-    
-    <method name="calcProgressBar" args="tObjRef">
-        if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)
-        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateRecordingStreamTime',this._ns.time);
-        if (this.timerDelegateStarted) {
-            lz.Timer.addTimer( this.timerDelegate , 1000 );
-        }
-    </method>
-    
-</class>	
-
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!---
+    The playBackVideoStream is used in the recording playerback to show the video
+ -->
+<class name="playBackVideoStream" extends="baseVideoStream" bgcolor="0x000000" visibility="hidden">
+    
+    <attribute name="timerDelegate" value="null"/>
+    <attribute name="timerDelegateStarted" value="false" type="boolean"/>
+    
+    <handler name="oninit">
+        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );
+    </handler>
+    
+    <handler name="onclick">
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'togglePlayRecordingStream');
+    </handler>
+    
+    <method name="playRecordingStream" args="streamName,delay">
+        this.playStream(streamName,delay);
+        this.timerDelegateStarted = true;
+        lz.Timer.addTimer( this.timerDelegate , 1000 );
+    </method>
+    
+    <method name="stopRecording">
+        this._stop();
+        lz.Timer.removeTimer(this.timerDelegate);
+        this.timerDelegateStarted = false;
+    </method>
+    
+    <handler name="onNetStatus" args="info">
+        if ($debug) Debug.write("onNetStatus ",info);
+        if (info.code ==  "NetStream.Play.Stop" ) {
+            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream');
+        }
+    </handler>
+    <handler name="onMetaDataEvent" args="info">
+        if ($debug) Debug.write("onMetaData ",info);
+    </handler>
+    
+    <method name="calcProgressBar" args="tObjRef">
+        if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)
+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateRecordingStreamTime',this._ns.time);
+        if (this.timerDelegateStarted) {
+            lz.Timer.addTimer( this.timerDelegate , 1000 );
+        }
+    </method>
+    
+</class>	
+
 </library>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/modules/conference/whiteboard/base/whiteBoardPointer.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/modules/conference/whiteboard/base/whiteBoardPointer.lzx b/openmeetings-flash/src/main/swf/modules/conference/whiteboard/base/whiteBoardPointer.lzx
index c95beab..b6f8674 100644
--- a/openmeetings-flash/src/main/swf/modules/conference/whiteboard/base/whiteBoardPointer.lzx
+++ b/openmeetings-flash/src/main/swf/modules/conference/whiteboard/base/whiteBoardPointer.lzx
@@ -1,38 +1,38 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<library>
-
-    <class name="whiteBoardPointer" extends="view"
-           resource="pointer_whiteboard_rsc" width="20" height="20" >
-        <attribute name="userName" value="" type="string" />
-        <attribute name="fadeDelegate" value="null" />
-        <labelText x="20" text="$once{ parent.userName }" />
-        <handler name="oninit">
-            this.play();
-            this.fadeDelegate = new LzDelegate( this, "fadeText" );
-            lz.Timer.addTimer( this.fadeDelegate, 5000 );
-        </handler>
-        <method name="fadeText" args="itemObj">
-            this.destroy();
-        </method>
-    </class>
-
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <class name="whiteBoardPointer" extends="view"
+           resource="pointer_whiteboard_rsc" width="20" height="20" >
+        <attribute name="userName" value="" type="string" />
+        <attribute name="fadeDelegate" value="null" />
+        <labelText x="20" text="$once{ parent.userName }" />
+        <handler name="oninit">
+            this.play();
+            this.fadeDelegate = new LzDelegate( this, "fadeText" );
+            lz.Timer.addTimer( this.fadeDelegate, 5000 );
+        </handler>
+        <method name="fadeText" args="itemObj">
+            this.destroy();
+        </method>
+    </class>
+
 </library>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx b/openmeetings-flash/src/main/swf/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
index b18f9f5..817b0f6 100644
--- a/openmeetings-flash/src/main/swf/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
+++ b/openmeetings-flash/src/main/swf/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<library>
-	<class name="drawDocumentPanelItem" extends="blueButton" width="26" height="26"
-			x_insetResource="2" y_insetResource="2" width_insetResource="22" height_insetResource="22">
-		<attribute name="modi" value="" type="string" />
-		<attribute name="labelid" value="0" type="number" />
-
-		<handler name="onclick">
-			var docToolbar = canvas._drawarea.getDocumentToolBar();
-			//if ($debug) Debug.write("docToolbar.parent.parent: ", docToolbar.parent.parent);
-			if (docToolbar.parent.parent.ignoreUpdates) {
-				return;
-			}
-			canvas._drawarea.setCurrentDocumentByToolBar(parent.parent.currentDocument.getValue());
-			canvas._drawarea.doDocumentAction(this.modi);
-		</handler>
-
-		<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />
-	</class>
-</library>
-
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<library>
+	<class name="drawDocumentPanelItem" extends="blueButton" width="26" height="26"
+			x_insetResource="2" y_insetResource="2" width_insetResource="22" height_insetResource="22">
+		<attribute name="modi" value="" type="string" />
+		<attribute name="labelid" value="0" type="number" />
+
+		<handler name="onclick">
+			var docToolbar = canvas._drawarea.getDocumentToolBar();
+			//if ($debug) Debug.write("docToolbar.parent.parent: ", docToolbar.parent.parent);
+			if (docToolbar.parent.parent.ignoreUpdates) {
+				return;
+			}
+			canvas._drawarea.setCurrentDocumentByToolBar(parent.parent.currentDocument.getValue());
+			canvas._drawarea.doDocumentAction(this.modi);
+		</handler>
+
+		<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />
+	</class>
+</library>
+

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/networkTesting/networktesting.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/networkTesting/networktesting.lzx b/openmeetings-flash/src/main/swf/networkTesting/networktesting.lzx
index af774bc..595b24f 100644
--- a/openmeetings-flash/src/main/swf/networkTesting/networktesting.lzx
+++ b/openmeetings-flash/src/main/swf/networkTesting/networktesting.lzx
@@ -1,147 +1,147 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<canvas width="100%" height="100%" title="NetworkTesting">
-
-	<switch>
-		<when property="$as3">
-			<passthrough>
-				import flash.external.ExternalInterface;
-			</passthrough>
-		</when>
-	</switch>
-	<switch>
-		<when property="$debug">
-			<method name="doDebugInit">
-				canvas.setAttribute('debug', true);
-			</method>
-			<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="60%" height="50%" />
-		</when>
-		<otherwise>
-			<method name="doDebugInit">
-			</method>
-		</otherwise>
-	</switch>
-	
-	<include href="testsView.lzx" />
-	<include href="../base/remote/restCall.lzx" />
-	
-	<handler name="oninit"><![CDATA[
-		flash.external.ExternalInterface.call("loadingComplete");
-		var lbls = ExternalInterface.call("getStringLabels");
-		canvas.lbls = new Array(lbls.length);
-		for (var i = 0; i < lbls.length; ++i) {
-			canvas.lbls[lbls[i].id] = lbls[i].value;
-		}
-		doDebugInit();
-	]]></handler>
-
-	<method name="lbl" args="key">
-		var s = canvas.lbls['network.test.' + key];
-		if ($debug) Debug.info("LBL ", key, s, canvas.lbls);
-		return !!s ? s : "Missing[" + key + "]";
-	</method>
-
-	<!--
-		These attributes are rewritten by values from "public/config.xml"
-	-->
-	<attribute name="rtmpProtocol" type="string" value="rtmp" />
-	<attribute name="rtmpHost" type="string" value="" />
-	<attribute name="rtmpPort" type="number" value="1935" />
-	
-	<attribute name="httpProtocol" type="string" value="http" />
-	<attribute name="httpHost" type="string" value="" />
-	<attribute name="httpPort" type="number" value="5080" />
-	<attribute name="uriContext" type="string" value="/openmeetings" />
-	<attribute name="rtmpUriPath" type="string" value="/openmeetings/hibernate" />
-
-	<method name="getBrowserHost">
-		var host:String = ExternalInterface.call("window.location.host.toString()");
-		// in case of IE or some other security issues we will fail ...
-		if (!host) {
-			var url:String = canvas.proxyurl;
-			if (url) {
-				if ($debug) Debug.write("url ", url);
-				var paramsIdx = url.indexOf("?");
-				if (paramsIdx != -1) {
-					url = url.substr(0, paramsIdx);
-				}
-				if ($debug) Debug.write("url ", url);
-				url = url.substr(url.indexOf("//") + 2);
-				var portIdx = url.indexOf(":");
-				host = url.substr(0, portIdx != -1 ? portIdx : url.indexOf("/"));
-				if ($debug) Debug.write("host ", host);
-			}
-		}
-		return host;
-	</method>
-	
-	<method name="getSettings">
-		var settingsPtr = canvas.settings.getPointer();
-		
-		var useSSL:Boolean = ("yes" == settingsPtr.xpathQuery("config/useSSL/text()"));
-		canvas.setAttribute("rtmpProtocol", useSSL ? "rtmps" : "rtmp");
-		canvas.setAttribute("proxyType", settingsPtr.xpathQuery("config/proxyType/text()"));
-		canvas.setAttribute("rtmpHost", settingsPtr.xpathQuery("config/rtmphostlocal/text()"));
-		if (!canvas.rtmpHost) {
-			canvas.rtmpHost = getBrowserHost();
-		}
-		canvas.setAttribute("rtmpPort", settingsPtr.xpathQuery("config/" + (useSSL ? "rtmpsslport" : "rtmpport") + "/text()"));
-		
-		canvas.setAttribute("httpProtocol", settingsPtr.xpathQuery("config/protocol/text()"));
-		canvas.setAttribute("httpHost", settingsPtr.xpathQuery("config/httphostlocal/text()"));
-		if (!canvas.httpHost) {
-			canvas.httpHost = rtmpHost;
-		}
-		canvas.setAttribute("httpPort", settingsPtr.xpathQuery("config/red5httpport/text()"));
-
-		canvas.setAttribute("uriContext", settingsPtr.xpathQuery("config/httpRootKey/text()"));
-		canvas.setAttribute("rtmpUriPath", canvas.uriContext + "hibernate");
-	</method>
-
-	<method name="showTests">
-		var tests = new lz.TestsView(canvas, {name:"testsView"});
-		tests.testAll();
-	</method>
-
-	<dataset type="http" name="settings" request="false" proxied="false">
-		<handler name="oninit">
-			this.setAttribute("src", "config.xml");
-			this.doRequest();
-		</handler>
-		<handler name="ondata">
-			if ($debug) Debug.write("Settings are retrieved");
-			canvas.getSettings();
-			canvas.showTests();
-		</handler>
-		<handler name="onerror" args="e">
-			if ($debug) Debug.write("Settings error [" + this.src + "]", e);
-		</handler>
-		<handler name="ontimeout" args="e">
-			if ($debug) Debug.write("Settings timeout error", e);
-		</handler>
-	</dataset>
-
-	<attribute name="busy" type="boolean" value="false"/>
-	<attribute name="log" type="string" value="" />
-
-	<attribute name="testsView" value="null"/>
-
-</canvas>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas width="100%" height="100%" title="NetworkTesting">
+
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.external.ExternalInterface;
+			</passthrough>
+		</when>
+	</switch>
+	<switch>
+		<when property="$debug">
+			<method name="doDebugInit">
+				canvas.setAttribute('debug', true);
+			</method>
+			<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="60%" height="50%" />
+		</when>
+		<otherwise>
+			<method name="doDebugInit">
+			</method>
+		</otherwise>
+	</switch>
+	
+	<include href="testsView.lzx" />
+	<include href="../base/remote/restCall.lzx" />
+	
+	<handler name="oninit"><![CDATA[
+		flash.external.ExternalInterface.call("loadingComplete");
+		var lbls = ExternalInterface.call("getStringLabels");
+		canvas.lbls = new Array(lbls.length);
+		for (var i = 0; i < lbls.length; ++i) {
+			canvas.lbls[lbls[i].id] = lbls[i].value;
+		}
+		doDebugInit();
+	]]></handler>
+
+	<method name="lbl" args="key">
+		var s = canvas.lbls['network.test.' + key];
+		if ($debug) Debug.info("LBL ", key, s, canvas.lbls);
+		return !!s ? s : "Missing[" + key + "]";
+	</method>
+
+	<!--
+		These attributes are rewritten by values from "public/config.xml"
+	-->
+	<attribute name="rtmpProtocol" type="string" value="rtmp" />
+	<attribute name="rtmpHost" type="string" value="" />
+	<attribute name="rtmpPort" type="number" value="1935" />
+	
+	<attribute name="httpProtocol" type="string" value="http" />
+	<attribute name="httpHost" type="string" value="" />
+	<attribute name="httpPort" type="number" value="5080" />
+	<attribute name="uriContext" type="string" value="/openmeetings" />
+	<attribute name="rtmpUriPath" type="string" value="/openmeetings/hibernate" />
+
+	<method name="getBrowserHost">
+		var host:String = ExternalInterface.call("window.location.host.toString()");
+		// in case of IE or some other security issues we will fail ...
+		if (!host) {
+			var url:String = canvas.proxyurl;
+			if (url) {
+				if ($debug) Debug.write("url ", url);
+				var paramsIdx = url.indexOf("?");
+				if (paramsIdx != -1) {
+					url = url.substr(0, paramsIdx);
+				}
+				if ($debug) Debug.write("url ", url);
+				url = url.substr(url.indexOf("//") + 2);
+				var portIdx = url.indexOf(":");
+				host = url.substr(0, portIdx != -1 ? portIdx : url.indexOf("/"));
+				if ($debug) Debug.write("host ", host);
+			}
+		}
+		return host;
+	</method>
+	
+	<method name="getSettings">
+		var settingsPtr = canvas.settings.getPointer();
+		
+		var useSSL:Boolean = ("yes" == settingsPtr.xpathQuery("config/useSSL/text()"));
+		canvas.setAttribute("rtmpProtocol", useSSL ? "rtmps" : "rtmp");
+		canvas.setAttribute("proxyType", settingsPtr.xpathQuery("config/proxyType/text()"));
+		canvas.setAttribute("rtmpHost", settingsPtr.xpathQuery("config/rtmphostlocal/text()"));
+		if (!canvas.rtmpHost) {
+			canvas.rtmpHost = getBrowserHost();
+		}
+		canvas.setAttribute("rtmpPort", settingsPtr.xpathQuery("config/" + (useSSL ? "rtmpsslport" : "rtmpport") + "/text()"));
+		
+		canvas.setAttribute("httpProtocol", settingsPtr.xpathQuery("config/protocol/text()"));
+		canvas.setAttribute("httpHost", settingsPtr.xpathQuery("config/httphostlocal/text()"));
+		if (!canvas.httpHost) {
+			canvas.httpHost = rtmpHost;
+		}
+		canvas.setAttribute("httpPort", settingsPtr.xpathQuery("config/red5httpport/text()"));
+
+		canvas.setAttribute("uriContext", settingsPtr.xpathQuery("config/httpRootKey/text()"));
+		canvas.setAttribute("rtmpUriPath", canvas.uriContext + "hibernate");
+	</method>
+
+	<method name="showTests">
+		var tests = new lz.TestsView(canvas, {name:"testsView"});
+		tests.testAll();
+	</method>
+
+	<dataset type="http" name="settings" request="false" proxied="false">
+		<handler name="oninit">
+			this.setAttribute("src", "config.xml");
+			this.doRequest();
+		</handler>
+		<handler name="ondata">
+			if ($debug) Debug.write("Settings are retrieved");
+			canvas.getSettings();
+			canvas.showTests();
+		</handler>
+		<handler name="onerror" args="e">
+			if ($debug) Debug.write("Settings error [" + this.src + "]", e);
+		</handler>
+		<handler name="ontimeout" args="e">
+			if ($debug) Debug.write("Settings timeout error", e);
+		</handler>
+	</dataset>
+
+	<attribute name="busy" type="boolean" value="false"/>
+	<attribute name="log" type="string" value="" />
+
+	<attribute name="testsView" value="null"/>
+
+</canvas>


[05/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
index d15eed3..8f81e1a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class MyRoomsWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-	public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";
-
-	public MyRoomsWidget() {
-		super();
-		location = new WidgetLocation(0, 1);
-		init();
-	}
-	
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString(781L);
-		id = WIDGET_ID_MY_ROOMS;
-	}
-	
-	@Override
-	public WidgetView createView(String viewId) {
-		return new MyRoomsWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class MyRoomsWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";
+
+	public MyRoomsWidget() {
+		super();
+		location = new WidgetLocation(0, 1);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(781L);
+		id = WIDGET_ID_MY_ROOMS;
+	}
+	
+	@Override
+	public WidgetView createView(String viewId) {
+		return new MyRoomsWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
index 5b65f5f..64a1a84 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class MyRoomsWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString(781L);
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString(782L);
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return MyRoomsWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.myrooms";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class MyRoomsWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString(781L);
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString(782L);
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return MyRoomsWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.myrooms";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
index c37eccc..87cfeae 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div wicket:id="rooms"></div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="rooms"></div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
index fee5901..6a9602a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
@@ -1,36 +1,36 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import static org.apache.openmeetings.web.common.UserPanel.getMyRooms;
-
-import org.apache.openmeetings.web.user.rooms.RoomsPanel;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class MyRoomsWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-
-	public MyRoomsWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-		
-		add(new RoomsPanel("rooms", getMyRooms()));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.web.common.UserPanel.getMyRooms;
+
+import org.apache.openmeetings.web.user.rooms.RoomsPanel;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class MyRoomsWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public MyRoomsWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		
+		add(new RoomsPanel("rooms", getMyRooms()));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
index 20926c3..c6151d9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div wicket:id="dashboard" class="dashboard"></div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="dashboard" class="dashboard"></div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
index 772476f..c1e291e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
@@ -1,36 +1,36 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.db.util.FormatHelper;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.web.DashboardPanel;
-
-public class OmDashboardPanel extends UserPanel {
-	private static final long serialVersionUID = 1L;
-
-	public OmDashboardPanel(String id) {
-		super(id);
-
-		boolean isRtl = FormatHelper.isRtlLanguage(WebSession.get().getLocale().toLanguageTag());
-		add(new DashboardPanel("dashboard", Model.of(WebSession.getDashboard())).setRtlModel(Model.of(isRtl)));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.db.util.FormatHelper;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.web.DashboardPanel;
+
+public class OmDashboardPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+
+	public OmDashboardPanel(String id) {
+		super(id);
+
+		boolean isRtl = FormatHelper.isRtlLanguage(WebSession.get().getLocale().toLanguageTag());
+		add(new DashboardPanel("dashboard", Model.of(WebSession.getDashboard())).setRtlModel(Model.of(isRtl)));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
index eadac94..f7353b1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class RecentRoomsWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-	public static final String WIDGET_ID_RECENT_ROOMS = "RecentRoomsWidget";
-
-	public RecentRoomsWidget() {
-		super();
-		location = new WidgetLocation(1, 1);
-		init();
-	}
-
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString("widget.recent.title");
-		id = WIDGET_ID_RECENT_ROOMS;
-	}
-
-	@Override
-	public WidgetView createView(String viewId) {
-		return new RecentRoomsWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RecentRoomsWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_RECENT_ROOMS = "RecentRoomsWidget";
+
+	public RecentRoomsWidget() {
+		super();
+		location = new WidgetLocation(1, 1);
+		init();
+	}
+
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString("widget.recent.title");
+		id = WIDGET_ID_RECENT_ROOMS;
+	}
+
+	@Override
+	public WidgetView createView(String viewId) {
+		return new RecentRoomsWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
index 010e38a..feb2e12 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class RecentRoomsWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString("widget.recent.title");
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString("widget.recent.desc");
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return RecentRoomsWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.recentrooms";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class RecentRoomsWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString("widget.recent.title");
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString("widget.recent.desc");
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return RecentRoomsWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.recentrooms";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
index c37eccc..87cfeae 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div wicket:id="rooms"></div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="rooms"></div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
index 32b967e..73a3ef9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
@@ -1,38 +1,38 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.web.user.rooms.RoomsPanel;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class RecentRoomsWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-
-	public RecentRoomsWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-
-		add(new RoomsPanel("rooms", getBean(RoomDao.class).getRecent(getUserId())));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.web.user.rooms.RoomsPanel;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RecentRoomsWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public RecentRoomsWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+
+		add(new RoomsPanel("rooms", getBean(RoomDao.class).getRecent(getUserId())));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
index aee9f3b..674c350 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class RssWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-	public static final String WIDGET_ID_RSS = "RssWidget";
-
-	public RssWidget() {
-		super();
-		location = new WidgetLocation(1, 1);
-		init();
-	}
-	
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString(277L);
-		id = WIDGET_ID_RSS;
-	}
-	
-	@Override
-	public WidgetView createView(String viewId) {
-		return new RssWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RssWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_RSS = "RssWidget";
+
+	public RssWidget() {
+		super();
+		location = new WidgetLocation(1, 1);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(277L);
+		id = WIDGET_ID_RSS;
+	}
+	
+	@Override
+	public WidgetView createView(String viewId) {
+		return new RssWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
index 09487b3..ae33186 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class RssWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString(277L);
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString(277L);
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return RssWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.rss";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class RssWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString(277L);
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString(277L);
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return RssWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.rss";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
index 6d97152..3040e0f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
@@ -1,97 +1,97 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.getFeedConnection;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED2_KEY;
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.wicket.behavior.AbstractAjaxBehavior;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
-import org.apache.wicket.request.resource.ContentDisposition;
-import org.apache.wicket.util.resource.AbstractResourceStream;
-import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class RssWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-	private RSSFeedBehavior feed1; 
-	private RSSFeedBehavior feed2; 
-
-	public RssWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-		add(feed1 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED1_KEY, String.class, "")));
-		add(feed2 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED2_KEY, String.class, "")));
-	}
-	
-	@Override
-	public void renderHead(IHeaderResponse response) {
-		super.renderHead(response);
-		response.render(OnDomReadyHeaderItem.forScript("loadRssTab('" + feed1.getCallbackUrl() + "',"
-				+ "'" + feed2.getCallbackUrl() + "');")) ;
-	}
-	
-	static class RSSFeedBehavior extends AbstractAjaxBehavior {
-		private static final long serialVersionUID = 1L;
-		private String url;
-
-		RSSFeedBehavior(String url) {
-			this.url = url;
-		}
-		
-		@Override
-		public void onRequest() {
-			ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(new AbstractResourceStream() {
-				private static final long serialVersionUID = 1L;
-				transient HttpURLConnection con;
-				
-				@Override
-				public InputStream getInputStream() throws ResourceStreamNotFoundException {
-					try {
-						con = getFeedConnection(url);
-						con.connect();
-						return con.getInputStream();
-					} catch (IOException e) {
-						throw new ResourceStreamNotFoundException();
-					}
-				}
-
-				@Override
-				public void close() throws IOException {
-					if (con != null) {
-						con.disconnect();
-					}
-				}
-			}, "feed");
-			handler.setContentDisposition(ContentDisposition.ATTACHMENT);
-			getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.getFeedConnection;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED2_KEY;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.util.resource.AbstractResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RssWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+	private RSSFeedBehavior feed1; 
+	private RSSFeedBehavior feed2; 
+
+	public RssWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		add(feed1 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED1_KEY, String.class, "")));
+		add(feed2 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED2_KEY, String.class, "")));
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(OnDomReadyHeaderItem.forScript("loadRssTab('" + feed1.getCallbackUrl() + "',"
+				+ "'" + feed2.getCallbackUrl() + "');")) ;
+	}
+	
+	static class RSSFeedBehavior extends AbstractAjaxBehavior {
+		private static final long serialVersionUID = 1L;
+		private String url;
+
+		RSSFeedBehavior(String url) {
+			this.url = url;
+		}
+		
+		@Override
+		public void onRequest() {
+			ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(new AbstractResourceStream() {
+				private static final long serialVersionUID = 1L;
+				transient HttpURLConnection con;
+				
+				@Override
+				public InputStream getInputStream() throws ResourceStreamNotFoundException {
+					try {
+						con = getFeedConnection(url);
+						con.connect();
+						return con.getInputStream();
+					} catch (IOException e) {
+						throw new ResourceStreamNotFoundException();
+					}
+				}
+
+				@Override
+				public void close() throws IOException {
+					if (con != null) {
+						con.disconnect();
+					}
+				}
+			}, "feed");
+			handler.setContentDisposition(ContentDisposition.ATTACHMENT);
+			getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
index 0591b78..df1d775 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
@@ -1,48 +1,48 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class StartWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-
-	public StartWidget() {
-		super();
-		location = new WidgetLocation(1, 0);
-		init();
-	}
-	
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString(774L);
-		id = "StartWidget";
-	}
-	
-	@Override
-	public WidgetView createView(String viewId) {
-		return new StartWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class StartWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+
+	public StartWidget() {
+		super();
+		location = new WidgetLocation(1, 0);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(774L);
+		id = "StartWidget";
+	}
+	
+	@Override
+	public WidgetView createView(String viewId) {
+		return new StartWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
index 1646202..42905b9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class StartWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString(774L);
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString(804L);
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return StartWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.start";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class StartWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString(774L);
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString(804L);
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return StartWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.start";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
index 2438949..8bda8c8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
@@ -1,38 +1,38 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<h3><wicket:message key="774"/></h3>
-		<div><div wicket:id="step1" class="clickable start_step1"><wicket:message key="768"/></div></div>
-		<div><div wicket:id="step2" class="clickable start_step2"><wicket:message key="771"/></div></div>
-		<div><div wicket:id="step3" class="clickable start_step3"><wicket:message key="772"/></div></div>
-		<div><div wicket:id="step4" class="clickable start_step4"><wicket:message key="773"/></div></div>
-		<table>
-			<tr>
-				<td><div wicket:id="123msg"></div></td>
-				<td>
-					<button wicket:id="start" type="button"><wicket:message key="788"/></button><br/>
-					<button wicket:id="calendar" type="button"><wicket:message key="291"/></button>
-				</td>
-			</tr>
-		</table>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<h3><wicket:message key="774"/></h3>
+		<div><div wicket:id="step1" class="clickable start_step1"><wicket:message key="768"/></div></div>
+		<div><div wicket:id="step2" class="clickable start_step2"><wicket:message key="771"/></div></div>
+		<div><div wicket:id="step3" class="clickable start_step3"><wicket:message key="772"/></div></div>
+		<div><div wicket:id="step4" class="clickable start_step4"><wicket:message key="773"/></div></div>
+		<table>
+			<tr>
+				<td><div wicket:id="123msg"></div></td>
+				<td>
+					<button wicket:id="start" type="button"><wicket:message key="788"/></button><br/>
+					<button wicket:id="calendar" type="button"><wicket:message key="291"/></button>
+				</td>
+			</tr>
+		</table>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
index 00d25b1..df523b1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
@@ -1,69 +1,69 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import static org.apache.openmeetings.web.util.OmUrlFragment.CALENDAR;
-import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.pages.MainPage;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-import com.googlecode.wicket.jquery.ui.form.button.Button;
-
-public class StartWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-
-	public StartWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-		add(new WebMarkupContainer("step1").add(new PublicRoomsEventBehavior()));
-		add(new WebMarkupContainer("step2").add(new PublicRoomsEventBehavior()));
-		add(new WebMarkupContainer("step3").add(new PublicRoomsEventBehavior()));
-		add(new WebMarkupContainer("step4").add(new PublicRoomsEventBehavior()));
-		add(new Label("123msg", Application.getString(804)).setEscapeModelStrings(false));
-		add(new Button("start").add(new PublicRoomsEventBehavior()));
-		add(new Button("calendar").add(new AjaxEventBehavior("click") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				((MainPage)getPage()).updateContents(CALENDAR, target);
-			}
-		}));
-	}
-	
-	private class PublicRoomsEventBehavior extends AjaxEventBehavior {
-		private static final long serialVersionUID = 1L;
-
-		public PublicRoomsEventBehavior() {
-			super("click");
-		}
-		
-		@Override
-		protected void onEvent(AjaxRequestTarget target) {
-			((MainPage)getPage()).updateContents(ROOMS_PUBLIC, target);
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.web.util.OmUrlFragment.CALENDAR;
+import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+
+public class StartWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public StartWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		add(new WebMarkupContainer("step1").add(new PublicRoomsEventBehavior()));
+		add(new WebMarkupContainer("step2").add(new PublicRoomsEventBehavior()));
+		add(new WebMarkupContainer("step3").add(new PublicRoomsEventBehavior()));
+		add(new WebMarkupContainer("step4").add(new PublicRoomsEventBehavior()));
+		add(new Label("123msg", Application.getString(804)).setEscapeModelStrings(false));
+		add(new Button("start").add(new PublicRoomsEventBehavior()));
+		add(new Button("calendar").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				((MainPage)getPage()).updateContents(CALENDAR, target);
+			}
+		}));
+	}
+	
+	private class PublicRoomsEventBehavior extends AjaxEventBehavior {
+		private static final long serialVersionUID = 1L;
+
+		public PublicRoomsEventBehavior() {
+			super("click");
+		}
+		
+		@Override
+		protected void onEvent(AjaxRequestTarget target) {
+			((MainPage)getPage()).updateContents(ROOMS_PUBLIC, target);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
index c28b4e9..b0b56be 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
@@ -1,48 +1,48 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class WelcomeWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-
-	public WelcomeWidget() {
-		super();
-		location = new WidgetLocation(0, 0);
-		init();
-	}
-	
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString(1546L);
-		id = "WelcomeWidget";
-	}
-	
-	@Override
-	public WidgetView createView(String viewId) {
-		return new WelcomeWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class WelcomeWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+
+	public WelcomeWidget() {
+		super();
+		location = new WidgetLocation(0, 0);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(1546L);
+		id = "WelcomeWidget";
+	}
+	
+	@Override
+	public WidgetView createView(String viewId) {
+		return new WelcomeWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
index 5d888e8..241ba59 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class WelcomeWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString(1546L);
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString(1547L);
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return WelcomeWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.welcome";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class WelcomeWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString(1546L);
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString(1547L);
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return WelcomeWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.welcome";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
index 5e39f51..4736e23 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
@@ -1,43 +1,43 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<table>
-		<tr>
-			<td><div wicket:id="img"></div></td>
-			<td>
-				<h3><wicket:message key="376"/>&nbsp;<span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></h3>
-				<wicket:message key="1143"/>&nbsp;<span wicket:id="tz"></span><br/>
-				<wicket:message key="378"/>&nbsp;<a wicket:id="openUnread"><span wicket:id="unread"></span></a><br/>
-				<a wicket:id="editProfile"><wicket:message key="377"/></a>
-			</td>
-		</tr>
-		<tr>
-			<td colspan="2" class="help support">
-				<h3><wicket:message key="281"/></h3>
-				<a wicket:message="href:282"><wicket:message key="286"/></a><br/>
-				<a wicket:message="href:283"><wicket:message key="287"/></a><br/>
-				<a wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a><br/>
-			</td>
-		</tr>
-	</table>
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<table>
+		<tr>
+			<td><div wicket:id="img"></div></td>
+			<td>
+				<h3><wicket:message key="376"/>&nbsp;<span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></h3>
+				<wicket:message key="1143"/>&nbsp;<span wicket:id="tz"></span><br/>
+				<wicket:message key="378"/>&nbsp;<a wicket:id="openUnread"><span wicket:id="unread"></span></a><br/>
+				<a wicket:id="editProfile"><wicket:message key="377"/></a>
+			</td>
+		</tr>
+		<tr>
+			<td colspan="2" class="help support">
+				<h3><wicket:message key="281"/></h3>
+				<a wicket:message="href:282"><wicket:message key="286"/></a><br/>
+				<a wicket:message="href:283"><wicket:message key="287"/></a><br/>
+				<a wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a><br/>
+			</td>
+		</tr>
+	</table>
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
index ba2664c..4c4543b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
@@ -1,81 +1,81 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.room.SwfPanel.SWF;
-import static org.apache.openmeetings.web.room.SwfPanel.SWF_TYPE_NETWORK;
-import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_EDIT;
-import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
-
-import org.apache.openmeetings.db.dao.user.PrivateMessageDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.common.UploadableProfileImagePanel;
-import org.apache.openmeetings.web.pages.HashPage;
-import org.apache.openmeetings.web.pages.MainPage;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class WelcomeWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-
-	public WelcomeWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-
-		User u = getBean(UserDao.class).get(getUserId());
-		add(new UploadableProfileImagePanel("img", getUserId()));
-		 //FIXME this need to be aligned according to Locale
-		add(new Label("firstname", Model.of(u.getFirstname())));
-		add(new Label("lastname", Model.of(u.getLastname())));
-		add(new Label("tz", Model.of(u.getTimeZoneId())));
-		add(new AjaxLink<Void>("openUnread") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(AjaxRequestTarget target) {
-				((MainPage)getPage()).updateContents(PROFILE_MESSAGES, target);
-			}
-		}.add(new Label("unread", Model.of("" + getBean(PrivateMessageDao.class).count(getUserId(), INBOX_FOLDER_ID, null)))));
-		add(new AjaxLink<Void>("editProfile") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(AjaxRequestTarget target) {
-				((MainPage)getPage()).updateContents(PROFILE_EDIT, target);
-			}
-		});
-		add(new Link<Void>("netTest") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick() {
-				setResponsePage(HashPage.class, new PageParameters().add(SWF, SWF_TYPE_NETWORK));
-			}
-		});
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.room.SwfPanel.SWF;
+import static org.apache.openmeetings.web.room.SwfPanel.SWF_TYPE_NETWORK;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_EDIT;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
+
+import org.apache.openmeetings.db.dao.user.PrivateMessageDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.common.UploadableProfileImagePanel;
+import org.apache.openmeetings.web.pages.HashPage;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class WelcomeWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public WelcomeWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+
+		User u = getBean(UserDao.class).get(getUserId());
+		add(new UploadableProfileImagePanel("img", getUserId()));
+		 //FIXME this need to be aligned according to Locale
+		add(new Label("firstname", Model.of(u.getFirstname())));
+		add(new Label("lastname", Model.of(u.getLastname())));
+		add(new Label("tz", Model.of(u.getTimeZoneId())));
+		add(new AjaxLink<Void>("openUnread") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				((MainPage)getPage()).updateContents(PROFILE_MESSAGES, target);
+			}
+		}.add(new Label("unread", Model.of("" + getBean(PrivateMessageDao.class).count(getUserId(), INBOX_FOLDER_ID, null)))));
+		add(new AjaxLink<Void>("editProfile") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				((MainPage)getPage()).updateContents(PROFILE_EDIT, target);
+			}
+		});
+		add(new Link<Void>("netTest") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick() {
+				setResponsePage(HashPage.class, new PageParameters().add(SWF, SWF_TYPE_NETWORK));
+			}
+		});
+	}
+}


[06/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
index 8346aa1..bb19049 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
@@ -1,157 +1,157 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.pages.auth;
-
-import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.util.NonClosableDialog;
-import org.apache.openmeetings.web.util.NonClosableMessageDialog;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxButton;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.PasswordTextField;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.Model;
-
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
-
-public class ResetPasswordDialog extends NonClosableDialog<String> {
-	private static final long serialVersionUID = 1L;
-	private DialogButton resetBtn = new DialogButton("reset", Application.getString(327));
-	private Form<String> form;
-	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
-	private PasswordTextField password;
-	private final User user;
-	final MessageDialog confirmReset;
-
-	public ResetPasswordDialog(String id, final User user) {
-		super(id, Application.getString(325));
-		this.user = user;
-		add(form = new Form<String>("form") {
-			private static final long serialVersionUID = 1L;
-			private TextField<String> login;
-			private PasswordTextField confirmPassword;
-			{
-				add(feedback.setOutputMarkupId(true));
-				add(login = new TextField<>("login", Model.of(user.getLogin())));
-				login.setOutputMarkupId(true);
-				add(password = new PasswordTextField("password", new Model<String>()));
-				password.setOutputMarkupId(true);
-				password.setLabel(Model.of(Application.getString(328)));
-				ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-				password.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));
-				add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()));
-				confirmPassword.setOutputMarkupId(true);
-				confirmPassword.setLabel(Model.of(Application.getString(329)));
-				confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao)));
-
-				add(new AjaxButton("submit") { // FAKE button so "submit-on-enter" works as expected
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onSubmit(AjaxRequestTarget target) {
-						ResetPasswordDialog.this.onSubmit(target);
-					}
-
-					@Override
-					protected void onError(AjaxRequestTarget target) {
-						ResetPasswordDialog.this.onError(target);
-					}
-				});
-			}
-
-			@Override
-			protected void onValidate() {
-				String pass = password.getConvertedInput();
-				if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) {
-					error(Application.getString(232));
-				}
-				super.onValidate();
-			}
-
-		});
-		confirmReset = new NonClosableMessageDialog("confirmReset", Application.getString(325), Application.getString(332)) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-				setResponsePage(Application.get().getSignInPageClass());
-			}
-		};
-		add(confirmReset);
-	}
-
-	@Override
-	public void onConfigure(JQueryBehavior behavior) {
-		super.onConfigure(behavior);
-		behavior.setOption("autoOpen", true);
-	}
-
-	@Override
-	protected List<DialogButton> getButtons() {
-		return Arrays.asList(resetBtn);
-	}
-
-	@Override
-	public DialogButton getSubmitButton() {
-		return resetBtn;
-	}
-
-	@Override
-	public Form<?> getForm() {
-		return form;
-	}
-
-	@Override
-	protected void onError(AjaxRequestTarget target) {
-		target.add(feedback);
-	}
-
-	@Override
-	protected void onSubmit(AjaxRequestTarget target) {
-		try {
-			getBean(UserDao.class).resetPassword(user, password.getConvertedInput());
-		} catch (Exception e) {
-			error(e.getMessage());
-		}
-	}
-
-	@Override
-	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-		if (resetBtn.equals(button)) {
-			confirmReset.open(handler);
-		} else {
-			setResponsePage(Application.get().getSignInPageClass());
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.util.NonClosableDialog;
+import org.apache.openmeetings.web.util.NonClosableMessageDialog;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class ResetPasswordDialog extends NonClosableDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private DialogButton resetBtn = new DialogButton("reset", Application.getString(327));
+	private Form<String> form;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private PasswordTextField password;
+	private final User user;
+	final MessageDialog confirmReset;
+
+	public ResetPasswordDialog(String id, final User user) {
+		super(id, Application.getString(325));
+		this.user = user;
+		add(form = new Form<String>("form") {
+			private static final long serialVersionUID = 1L;
+			private TextField<String> login;
+			private PasswordTextField confirmPassword;
+			{
+				add(feedback.setOutputMarkupId(true));
+				add(login = new TextField<>("login", Model.of(user.getLogin())));
+				login.setOutputMarkupId(true);
+				add(password = new PasswordTextField("password", new Model<String>()));
+				password.setOutputMarkupId(true);
+				password.setLabel(Model.of(Application.getString(328)));
+				ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+				password.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));
+				add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()));
+				confirmPassword.setOutputMarkupId(true);
+				confirmPassword.setLabel(Model.of(Application.getString(329)));
+				confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao)));
+
+				add(new AjaxButton("submit") { // FAKE button so "submit-on-enter" works as expected
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target) {
+						ResetPasswordDialog.this.onSubmit(target);
+					}
+
+					@Override
+					protected void onError(AjaxRequestTarget target) {
+						ResetPasswordDialog.this.onError(target);
+					}
+				});
+			}
+
+			@Override
+			protected void onValidate() {
+				String pass = password.getConvertedInput();
+				if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) {
+					error(Application.getString(232));
+				}
+				super.onValidate();
+			}
+
+		});
+		confirmReset = new NonClosableMessageDialog("confirmReset", Application.getString(325), Application.getString(332)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				setResponsePage(Application.get().getSignInPageClass());
+			}
+		};
+		add(confirmReset);
+	}
+
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("autoOpen", true);
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(resetBtn);
+	}
+
+	@Override
+	public DialogButton getSubmitButton() {
+		return resetBtn;
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		try {
+			getBean(UserDao.class).resetPassword(user, password.getConvertedInput());
+		} catch (Exception e) {
+			error(e.getMessage());
+		}
+	}
+
+	@Override
+	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+		if (resetBtn.equals(button)) {
+			confirmReset.open(handler);
+		} else {
+			setResponsePage(Application.get().getSignInPageClass());
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
index 9c025cb..a69db09 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.html
@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<table>
-		<tr>
-			<td><wicket:message key="1550" /></td>
-			<td wicket:id="name">[name]</td>
-		</tr>
-		<tr>
-			<td><wicket:message key="1551" /></td>
-			<td wicket:id="version">[version]</td>
-		</tr>
-		<tr>
-			<td><wicket:message key="1552" /></td>
-			<td wicket:id="revision">[revision]</td>
-		</tr>
-		<tr>
-			<td><wicket:message key="1553" /></td>
-			<td wicket:id="buildDate">[buildDate]</td>
-		</tr>
-	</table>		
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<table>
+		<tr>
+			<td><wicket:message key="1550" /></td>
+			<td wicket:id="name">[name]</td>
+		</tr>
+		<tr>
+			<td><wicket:message key="1551" /></td>
+			<td wicket:id="version">[version]</td>
+		</tr>
+		<tr>
+			<td><wicket:message key="1552" /></td>
+			<td wicket:id="revision">[revision]</td>
+		</tr>
+		<tr>
+			<td><wicket:message key="1553" /></td>
+			<td wicket:id="buildDate">[buildDate]</td>
+		</tr>
+	</table>		
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
index 50718e4..ab92bbe 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java
@@ -1,57 +1,57 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user;
-
-import static org.apache.openmeetings.util.Version.getBuildDate;
-import static org.apache.openmeetings.util.Version.getRevision;
-import static org.apache.openmeetings.util.Version.getVersion;
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.basic.Label;
-
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-
-public class AboutDialog extends AbstractDialog<String> {
-	private static final long serialVersionUID = 1L;
-
-	public AboutDialog(String id) {
-		super(id, Application.getString(1549));
-
-		add(new Label("name", getBean(ConfigurationDao.class).getAppName()));
-		add(new Label("version", getVersion()));
-		add(new Label("revision", getRevision()));
-		add(new Label("buildDate", getBuildDate()));
-	}
-
-	@Override
-	protected List<DialogButton> getButtons() {
-		return new ArrayList<>();
-	}
-
-	@Override
-	public void onClose(IPartialPageRequestHandler handler, DialogButton arg1) {
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user;
+
+import static org.apache.openmeetings.util.Version.getBuildDate;
+import static org.apache.openmeetings.util.Version.getRevision;
+import static org.apache.openmeetings.util.Version.getVersion;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.basic.Label;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class AboutDialog extends AbstractDialog<String> {
+	private static final long serialVersionUID = 1L;
+
+	public AboutDialog(String id) {
+		super(id, Application.getString(1549));
+
+		add(new Label("name", getBean(ConfigurationDao.class).getAppName()));
+		add(new Label("version", getVersion()));
+		add(new Label("revision", getRevision()));
+		add(new Label("buildDate", getBuildDate()));
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return new ArrayList<>();
+	}
+
+	@Override
+	public void onClose(IPartialPageRequestHandler handler, DialogButton arg1) {
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
index 42cd4b3..f450843 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.html
@@ -1,27 +1,27 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-      http://www.apache.org/licenses/LICENSE-2.0
-    	  
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-<wicket:panel>
-	<div wicket:id="container">
-		<div wicket:id="body"></div>
-	</div>
-</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="container">
+		<div wicket:id="body"></div>
+	</div>
+</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
index 0cab471..50f3472 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java
@@ -1,83 +1,83 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.user.UserContactDao;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.user.profile.UserProfilePanel;
-import org.apache.openmeetings.web.util.ContactsHelper;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-
-public class UserInfoDialog extends AbstractDialog<String> {
-	private static final long serialVersionUID = 1L;
-	private WebMarkupContainer container = new WebMarkupContainer("container");
-	private DialogButton cancel = new DialogButton("cancel", Application.getString(61));
-	private DialogButton message = new DialogButton("message", Application.getString(1253));
-	private DialogButton contacts = new DialogButton("contacts", Application.getString(1186));
-	private MessageDialog newMessage;
-	private long userId;
-	
-	public UserInfoDialog(String id, MessageDialog newMessage) {
-		super(id, Application.getString(1235));
-		add(container.add(new WebMarkupContainer("body")).setOutputMarkupId(true));
-		this.newMessage = newMessage;
-	}
-
-	public void open(IPartialPageRequestHandler handler, long userId) {
-		this.userId = userId;
-		contacts.setVisible(userId != getUserId() && getBean(UserContactDao.class).get(userId, getUserId()) == null, handler);
-		message.setVisible(userId != getUserId(), handler);
-		container.replace(new UserProfilePanel("body", userId));
-		handler.add(container);
-		open(handler);
-	}
-	
-	public WebMarkupContainer getContainer() {
-		return container;
-	}
-	
-	@Override
-	public int getWidth() {
-		return 600;
-	}
-	
-	@Override
-	protected List<DialogButton> getButtons() {
-		return Arrays.asList(contacts, message, cancel);
-	}
-	
-	@Override
-	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-		if (message.equals(button)) {
-			newMessage.reset(false).open(handler, userId);
-		} else if (contacts.equals(button)) {
-			ContactsHelper.addUserToContactList(userId);
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserContactDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.user.profile.UserProfilePanel;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class UserInfoDialog extends AbstractDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private WebMarkupContainer container = new WebMarkupContainer("container");
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(61));
+	private DialogButton message = new DialogButton("message", Application.getString(1253));
+	private DialogButton contacts = new DialogButton("contacts", Application.getString(1186));
+	private MessageDialog newMessage;
+	private long userId;
+	
+	public UserInfoDialog(String id, MessageDialog newMessage) {
+		super(id, Application.getString(1235));
+		add(container.add(new WebMarkupContainer("body")).setOutputMarkupId(true));
+		this.newMessage = newMessage;
+	}
+
+	public void open(IPartialPageRequestHandler handler, long userId) {
+		this.userId = userId;
+		contacts.setVisible(userId != getUserId() && getBean(UserContactDao.class).get(userId, getUserId()) == null, handler);
+		message.setVisible(userId != getUserId(), handler);
+		container.replace(new UserProfilePanel("body", userId));
+		handler.add(container);
+		open(handler);
+	}
+	
+	public WebMarkupContainer getContainer() {
+		return container;
+	}
+	
+	@Override
+	public int getWidth() {
+		return 600;
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(contacts, message, cancel);
+	}
+	
+	@Override
+	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+		if (message.equals(button)) {
+			newMessage.reset(false).open(handler, userId);
+		} else if (contacts.equals(button)) {
+			ContactsHelper.addUserToContactList(userId);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
index 2d5276e..6a69179 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
@@ -1,121 +1,121 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<form wicket:id="appForm" class="appointmentPopUp">
-			<span wicket:id="feedback"></span>
-			<div id="tabs">
-				<ul>
-					<li><a href="#tab1"><wicket:message key="appointment.tab.general"/></a></li>
-					<li><a href="#tab2"><wicket:message key="436"/></a></li>
-					<li><a href="#tab3"><wicket:message key="appointment.tab.advanced"/></a></li>
-				</ul>
-				<div id="tab1">
-					<div class="table">
-						<div>
-							<div class="column label"><wicket:message key="572" /></div>
-							<div class="column data"><input type="text" wicket:id="title" /></div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="570" /></div>
-							<div class="column data"><span class="date time picker" wicket:id="start"></span></div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="571" /></div>
-							<div class="column data"><span class="date time picker" wicket:id="end"></span></div>
-						</div>
-						<div wicket:id="owner-row">
-							<div class="column label"><wicket:message key="1156" /></div>
-							<div class="column data"><span wicket:id="aowner"></span></div>
-						</div>
-						<div wicket:id="inviteeType">
-							<div>
-								<div class="column label"><input type="radio" wicket:id="user"/><label wicket:for="user"><wicket:message key="803" /></label></div>
-								<div class="column data om-select2" wicket:message="title:1588"><select class="appointment attendees input" wicket:id="attendees"></select></div>
-							</div>
-							<div wicket:id="groupContainer">
-								<div class="column label"><input type="radio" wicket:id="group"/><label wicket:for="group"><wicket:message key="126" /></label></div>
-								<div class="column data om-select2"><select wicket:id="groups" class="input invitees"></select></div>
-							</div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="569" /></div>
-							<div class="column data"><input type="text" wicket:id="location" /></div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="573" /></div>
-							<div class="column data">
-								<div wicket:id="toolbarContainer"></div>
-								<div wicket:id="description"></div>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div id="tab2">
-					<div class="table">
-						<div>
-							<input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label>
-						</div>
-						<div wicket:id="create-room-block">
-							<div>
-								<div class="column label"><wicket:message key="619" /></div>
-								<div class="column data"><select wicket:id="type" ></select></div>
-							</div>
-							<div>
-								<div class="column label"><label wicket:for="moderated"><wicket:message key="640" /></label></div>
-								<div class="column data"><input type="checkbox" wicket:id="moderated" /></div>
-							</div>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="436" /></div>
-							<div class="column data"><select wicket:id="groom" ></select></div>
-						</div>
-						<div wicket:id="sip-container">
-							<div class="column label"><wicket:message key="1003"/></div>
-							<div class="column data"><span wicket:id="room.confno"></span></div>
-						</div>
-					</div>
-				</div>
-				<div id="tab3">
-					<div class="table">
-						<div>
-							<div class="column label"><wicket:message key="565" /></div>
-							<div class="column data"><select wicket:id="reminder" ></select></div>
-						</div>
-						<div>
-							<input type="checkbox" wicket:id="passwordProtected" /><label wicket:for="passwordProtected"><wicket:message key="524" /></label>
-						</div>
-						<div>
-							<div class="column label"><wicket:message key="525" /></div>
-							<div class="column data"><input type="password" wicket:id="password" /></div>
-						</div>
-						<div><wicket:message key="1445" /></div>
-						<div>
-							<div class="column label"><wicket:message key="162" /></div>
-							<div class="column data"><select wicket:id="calendar"></select></div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</form>
-		<div wicket:id="confirmDelete"></div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<form wicket:id="appForm" class="appointmentPopUp">
+			<span wicket:id="feedback"></span>
+			<div id="tabs">
+				<ul>
+					<li><a href="#tab1"><wicket:message key="appointment.tab.general"/></a></li>
+					<li><a href="#tab2"><wicket:message key="436"/></a></li>
+					<li><a href="#tab3"><wicket:message key="appointment.tab.advanced"/></a></li>
+				</ul>
+				<div id="tab1">
+					<div class="table">
+						<div>
+							<div class="column label"><wicket:message key="572" /></div>
+							<div class="column data"><input type="text" wicket:id="title" /></div>
+						</div>
+						<div>
+							<div class="column label"><wicket:message key="570" /></div>
+							<div class="column data"><span class="date time picker" wicket:id="start"></span></div>
+						</div>
+						<div>
+							<div class="column label"><wicket:message key="571" /></div>
+							<div class="column data"><span class="date time picker" wicket:id="end"></span></div>
+						</div>
+						<div wicket:id="owner-row">
+							<div class="column label"><wicket:message key="1156" /></div>
+							<div class="column data"><span wicket:id="aowner"></span></div>
+						</div>
+						<div wicket:id="inviteeType">
+							<div>
+								<div class="column label"><input type="radio" wicket:id="user"/><label wicket:for="user"><wicket:message key="803" /></label></div>
+								<div class="column data om-select2" wicket:message="title:1588"><select class="appointment attendees input" wicket:id="attendees"></select></div>
+							</div>
+							<div wicket:id="groupContainer">
+								<div class="column label"><input type="radio" wicket:id="group"/><label wicket:for="group"><wicket:message key="126" /></label></div>
+								<div class="column data om-select2"><select wicket:id="groups" class="input invitees"></select></div>
+							</div>
+						</div>
+						<div>
+							<div class="column label"><wicket:message key="569" /></div>
+							<div class="column data"><input type="text" wicket:id="location" /></div>
+						</div>
+						<div>
+							<div class="column label"><wicket:message key="573" /></div>
+							<div class="column data">
+								<div wicket:id="toolbarContainer"></div>
+								<div wicket:id="description"></div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div id="tab2">
+					<div class="table">
+						<div>
+							<input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label>
+						</div>
+						<div wicket:id="create-room-block">
+							<div>
+								<div class="column label"><wicket:message key="619" /></div>
+								<div class="column data"><select wicket:id="type" ></select></div>
+							</div>
+							<div>
+								<div class="column label"><label wicket:for="moderated"><wicket:message key="640" /></label></div>
+								<div class="column data"><input type="checkbox" wicket:id="moderated" /></div>
+							</div>
+						</div>
+						<div>
+							<div class="column label"><wicket:message key="436" /></div>
+							<div class="column data"><select wicket:id="groom" ></select></div>
+						</div>
+						<div wicket:id="sip-container">
+							<div class="column label"><wicket:message key="1003"/></div>
+							<div class="column data"><span wicket:id="room.confno"></span></div>
+						</div>
+					</div>
+				</div>
+				<div id="tab3">
+					<div class="table">
+						<div>
+							<div class="column label"><wicket:message key="565" /></div>
+							<div class="column data"><select wicket:id="reminder" ></select></div>
+						</div>
+						<div>
+							<input type="checkbox" wicket:id="passwordProtected" /><label wicket:for="passwordProtected"><wicket:message key="524" /></label>
+						</div>
+						<div>
+							<div class="column label"><wicket:message key="525" /></div>
+							<div class="column data"><input type="password" wicket:id="password" /></div>
+						</div>
+						<div><wicket:message key="1445" /></div>
+						<div>
+							<div class="column label"><wicket:message key="162" /></div>
+							<div class="column data"><select wicket:id="calendar"></select></div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</form>
+		<div wicket:id="confirmDelete"></div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
index e468e36..e721c0b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
@@ -1,510 +1,510 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.calendar;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getRights;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
-import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.user.GroupUserDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
-import org.apache.openmeetings.db.entity.calendar.MeetingMember;
-import org.apache.openmeetings.db.entity.calendar.OmCalendar;
-import org.apache.openmeetings.db.entity.room.Room;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.util.AuthLevelUtil;
-import org.apache.openmeetings.db.util.FormatHelper;
-import org.apache.openmeetings.service.calendar.caldav.AppointmentManager;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.GroupChoiceProvider;
-import org.apache.openmeetings.web.common.OmDateTimePicker;
-import org.apache.openmeetings.web.pages.MainPage;
-import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
-import org.apache.openmeetings.web.util.RoomTypeDropDown;
-import org.apache.openmeetings.web.util.UserMultiChoice;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.ChoiceRenderer;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.markup.html.form.PasswordTextField;
-import org.apache.wicket.markup.html.form.Radio;
-import org.apache.wicket.markup.html.form.RadioGroup;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.util.CollectionModel;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.wicketstuff.select2.Select2MultiChoice;
-
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.JQueryUIBehavior;
-import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
-import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
-
-public class AppointmentDialog extends AbstractFormDialog<Appointment> {
-	private static final long serialVersionUID = 1L;
-	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDialog.class, webAppRootKey);
-
-	private AppointmentForm form;
-	private DialogButton save = new DialogButton("save", Application.getString(813));
-	private DialogButton cancel = new DialogButton("cancel", Application.getString(1130));
-	private DialogButton delete = new DialogButton("delete", Application.getString(814));
-	private DialogButton enterRoom = new DialogButton("enterRoom", Application.getString(1282));
-	private final CalendarPanel calendarPanel;
-	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
-	final MessageDialog confirmDelete;
-	private final WebMarkupContainer sipContainer = new WebMarkupContainer("sip-container");
-	//FIXME TODO need to be unified with RoomInvitationForm
-	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.user));
-	private final Select2MultiChoice<Group> groups = new Select2MultiChoice<>("groups"
-			, new CollectionModel<Group>(new ArrayList<>())
-			, new GroupChoiceProvider());
-	private final UserMultiChoice attendees = new UserMultiChoice("attendees", new CollectionModel<User>(new ArrayList<>()));
-	private enum InviteeType {
-		user
-		, group
-	}
-
-	@Override
-	public int getWidth() {
-		return 650;
-	}
-
-	@Override
-	public void onConfigure(JQueryBehavior behavior) {
-		super.onConfigure(behavior);
-		behavior.setOption("classes", "{'ui-dialog': 'ui-corner-all appointment'}");
-	}
-
-	public void setModelObjectWithAjaxTarget(Appointment a, AjaxRequestTarget target) {
-		form.setModelObject(a);
-		form.start.setModelObject(getDateTime(a.getStart()));
-		form.end.setModelObject(getDateTime(a.getEnd()));
-		form.setEnabled(isOwner(a));
-		log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + a);
-		if (a.getId() != null) {
-			delete.setVisible(isOwner(a), target);
-			enterRoom.setVisible(a.getRoom() != null, target);
-		} else {
-			delete.setVisible(false, target);
-			enterRoom.setVisible(false, target);
-		}
-		if (a.getRoom() != null) {
-			target.add(sipContainer.replace(new Label("room.confno", a.getRoom().getConfno())).setVisible(a.getRoom().isSipEnabled()));
-		}
-		save.setVisible(isOwner(a), target);
-		super.setModelObject(a);
-	}
-
-	public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, CompoundPropertyModel<Appointment> model) {
-		super(id, title, model, true);
-		log.debug(" -- AppointmentDialog -- Current model " + getModel().getObject());
-		this.calendarPanel = calendarPanel;
-		setOutputMarkupId(true);
-		form = new AppointmentForm("appForm", model);
-		add(form);
-		confirmDelete = new MessageDialog("confirmDelete", Application.getString(814), Application.getString(833), DialogButtons.OK_CANCEL, DialogIcon.WARN){
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-				if (button != null && button.match(AbstractDialog.OK)){
-					deleteAppointment(handler);
-				}
-			}
-		};
-		add(confirmDelete);
-	}
-
-	protected void deleteAppointment(IPartialPageRequestHandler handler) {
-		Appointment a = getModelObject();
-		getBean(AppointmentDao.class).delete(a, getUserId());
-		calendarPanel.refresh(handler);
-		if (a.getCalendar() != null && a.getHref() != null) {
-			calendarPanel.updatedeleteAppointment(handler, CalendarDialog.DIALOG_TYPE.DELETE_APPOINTMENT, a);
-		}
-	}
-
-	@Override
-	protected List<DialogButton> getButtons() {
-		return Arrays.asList(enterRoom, save, delete, cancel);
-	}
-
-	@Override
-	public DialogButton getSubmitButton() {
-		return save;
-	}
-
-	@Override
-	public Form<?> getForm() {
-		return form;
-	}
-
-	@Override
-	protected void onOpen(IPartialPageRequestHandler handler) {
-		handler.add(form.add(new JQueryUIBehavior("#tabs", "tabs")));
-	}
-
-	@Override
-	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-		if (delete.equals(button)) {
-			confirmDelete.open(handler);
-		} else if (enterRoom.equals(button)) {
-			RoomEnterBehavior.roomEnter((MainPage)getPage(), handler, getModelObject().getRoom().getId());
-		}
-	}
-
-	@Override
-	protected void onError(AjaxRequestTarget target) {
-		target.add(feedback);
-	}
-
-	@Override
-	protected void onSubmit(AjaxRequestTarget target) {
-		Appointment a = form.getModelObject();
-		a.setRoom(form.createRoom ? form.appRoom : form.groom.getModelObject());
-		final List<MeetingMember> mms = a.getMeetingMembers() == null ? new ArrayList<>() : a.getMeetingMembers();
-		Set<Long> currentIds = new HashSet<>();
-		List<User> users = new ArrayList<>();
-		if (InviteeType.group == rdi.getModelObject()) {
-			//lets iterate through all group users
-			for (Group g : groups.getModelObject()) {
-				for (GroupUser gu : getBean(GroupUserDao.class).get(g.getId(), 0, Integer.MAX_VALUE)) {
-					User u = gu.getUser();
-					if (!currentIds.contains(u.getId())) {
-						users.add(u);
-						currentIds.add(u.getId());
-					}
-				}
-			}
-		} else {
-			users = new ArrayList<>(attendees.getModelObject());
-			for (User u : users) {
-				if (u.getId() != null) {
-					currentIds.add(u.getId());
-				}
-			}
-		}
-
-		//remove users
-		for (Iterator<MeetingMember> i = mms.iterator(); i.hasNext();) {
-			MeetingMember m = i.next();
-			if (!currentIds.contains(m.getUser().getId())) {
-				i.remove();
-			}
-		}
-		Set<Long> originalIds = new HashSet<>();
-		for (MeetingMember m : mms) {
-			originalIds.add(m.getUser().getId());
-		}
-		//add users
-		for (User u : users) {
-			if (u.getId() == null || !originalIds.contains(u.getId())) {
-				MeetingMember mm = new MeetingMember();
-				mm.setUser(u);
-				mm.setDeleted(false);
-				mm.setInserted(a.getInserted());
-				mm.setUpdated(a.getUpdated());
-				mm.setAppointment(a);
-				mms.add(mm);
-			}
-		}
-		a.setMeetingMembers(mms);
-		a.setStart(getDate(form.start.getModelObject()));
-		a.setEnd(getDate(form.end.getModelObject()));
-		a.setCalendar(form.cals.getModelObject());
-		getBean(AppointmentDao.class).update(a, getUserId());
-		if (a.getCalendar() != null) {
-			calendarPanel.updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
-		}
-		target.add(feedback);
-		calendarPanel.refresh(target);
-	}
-
-	public static boolean isOwner(Appointment object) {
-		return object.getOwner() != null && getUserId().equals(object.getOwner().getId());
-	}
-
-	private class AppointmentForm extends Form<Appointment> {
-		private static final long serialVersionUID = 1L;
-		private boolean createRoom = true;
-		private Room appRoom = null;
-		private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));
-		private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));
-		private final PasswordTextField pwd = new PasswordTextField("password");
-		private final Label owner = new Label("aowner", Model.of(""));
-		private final WebMarkupContainer ownerPanel = new WebMarkupContainer("owner-row");
-		private final WebMarkupContainer createRoomBlock = new WebMarkupContainer("create-room-block", new CompoundPropertyModel<>(appRoom));
-		private final DropDownChoice<Room.Type> roomType = new RoomTypeDropDown("type");
-		private final DropDownChoice<Room> groom = new DropDownChoice<>(
-				"groom"
-				, Model.of(new Room())
-				, getRoomList()
-				, new ChoiceRenderer<Room>("name", "id"));
-		private DropDownChoice<OmCalendar> cals = new DropDownChoice<>(
-				"calendar",
-				new LoadableDetachableModel<List<? extends OmCalendar>>() {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected List<? extends OmCalendar> load() {
-						return getCalendarList();
-					}
-				},
-				new ChoiceRenderer<OmCalendar>("title", "id")
-		);
-		private final WebMarkupContainer groupContainer = new WebMarkupContainer("groupContainer");
-
-		private Room createAppRoom() {
-			Room r = new Room();
-			r.setAppointment(true);
-			if (r.getType() == null) {
-				r.setType(Room.Type.conference);
-			}
-			return r;
-		}
-
-		@Override
-		protected void onModelChanged() {
-			super.onModelChanged();
-
-			Appointment a = getModelObject();
-			if (a.getReminder() == null) {
-				a.setReminder(Reminder.none);
-			}
-			if (a.getRoom() == null) {
-				a.setRoom(createAppRoom());
-			}
-			createRoom = a.getRoom().isAppointment();
-			if (createRoom) {
-				appRoom = a.getRoom();
-			} else {
-				groom.setModelObject(a.getRoom());
-				appRoom = createAppRoom();
-			}
-			createRoomBlock.setDefaultModelObject(appRoom);
-			createRoomBlock.setEnabled(createRoom);
-			groom.setEnabled(!createRoom);
-			if (a.getId() == null) {
-				java.util.Calendar start = WebSession.getCalendar();
-				start.setTime(a.getStart());
-				java.util.Calendar end = WebSession.getCalendar();
-				end.setTime(a.getEnd());
-
-				if (start.equals(end)) {
-					end.add(java.util.Calendar.HOUR_OF_DAY, 1);
-					a.setEnd(end.getTime());
-				}
-				cals.setEnabled(true);
-			} else {
-				cals.setEnabled(false);
-			}
-
-			rdi.setModelObject(InviteeType.user);
-			attendees.setModelObject(new ArrayList<>());
-			if (a.getMeetingMembers() != null) {
-				for (MeetingMember mm : a.getMeetingMembers()) {
-					attendees.getModelObject().add(mm.getUser());
-				}
-			}
-			pwd.setEnabled(a.isPasswordProtected());
-			owner.setDefaultModel(Model.of(FormatHelper.formatUser(a.getOwner())));
-			ownerPanel.setVisible(!isOwner(a));
-		}
-
-		public AppointmentForm(String id, CompoundPropertyModel<Appointment> model) {
-			super(id, model);
-			setOutputMarkupId(true);
-
-			add(feedback.setOutputMarkupId(true));
-			//General
-			add(new RequiredTextField<String>("title").setLabel(Model.of(Application.getString(572))));
-			add(ownerPanel.add(owner));
-			boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights());
-			add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onUpdate(AjaxRequestTarget target) {
-					boolean groupsEnabled = InviteeType.group == rdi.getModelObject();
-					target.add(groups.setEnabled(groupsEnabled), attendees.setEnabled(!groupsEnabled));
-				}
-			}));
-			groupContainer.add(
-				groups.setLabel(Model.of(Application.getString(126))).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)
-				, new Radio<>("group", Model.of(InviteeType.group))
-			);
-			if (showGroups) {
-				groups.add(new AjaxFormComponentUpdatingBehavior("change") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onUpdate(AjaxRequestTarget target) {
-						// added to update model
-					}
-				}).setEnabled(false);
-			}
-			rdi.add(attendees.add(new AjaxFormComponentUpdatingBehavior("change") {
-						private static final long serialVersionUID = 1L;
-
-						@Override
-						protected void onUpdate(AjaxRequestTarget target) {
-							// added to update model
-						}
-					})
-					, groupContainer.setVisible(showGroups)
-				);
-			rdi.add(new Radio<>("user", Model.of(InviteeType.user)));
-
-			add(new TextField<String>("location"));
-			DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");
-			add(toolbar);
-			add(new WysiwygEditor("description", toolbar));
-
-			//room
-			add(new AjaxCheckBox("createRoom", new PropertyModel<Boolean>(this, "createRoom")) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onUpdate(AjaxRequestTarget target) {
-					createRoom = getConvertedInput();
-					target.add(createRoomBlock.setEnabled(createRoom), groom.setEnabled(!createRoom));
-				}
-			});
-			add(createRoomBlock.add(roomType, new CheckBox("moderated")).setEnabled(createRoom).setOutputMarkupId(true));
-			add(groom.setRequired(true).setLabel(Model.of(Application.getString(406))).setEnabled(!createRoom).setOutputMarkupId(true));
-			add(sipContainer.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true));
-			sipContainer.add(new Label("room.confno", "")).setVisible(false);
-
-			//Advanced
-			add(new DropDownChoice<>(
-					"reminder"
-					, Arrays.asList(Reminder.values())
-					, new IChoiceRenderer<Reminder>() {
-						private static final long serialVersionUID = 1L;
-
-						@Override
-						public Object getDisplayValue(Reminder art) {
-							return getString("appointment.reminder." + art.name());
-						}
-
-						@Override
-						public String getIdValue(Reminder art, int index) {
-							return art.name();
-						}
-
-						@Override
-						public Reminder getObject(String id, IModel<? extends List<? extends Reminder>> choices) {
-							for (Reminder art : choices.getObject()) {
-								if (art.name().equals(id)) {
-									return art;
-								}
-							}
-							return null;
-						}
-					}));
-			add(new AjaxCheckBox("passwordProtected") {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onUpdate(AjaxRequestTarget target) {
-					AppointmentForm.this.getModelObject().setPasswordProtected(getConvertedInput());
-					pwd.setEnabled(AppointmentForm.this.getModelObject().isPasswordProtected());
-					target.add(pwd);
-				}
-			});
-			pwd.setEnabled(getModelObject().isPasswordProtected());
-			pwd.setOutputMarkupId(true);
-			add(pwd);
-			add(cals.setNullValid(true).setLabel(Model.of("calendar")).setOutputMarkupId(true));
-		}
-
-		@Override
-		protected void onInitialize() {
-			super.onInitialize();
-			add(start.setLabel(Model.of(getString("570"))).setRequired(true)
-					, end.setLabel(Model.of(getString("571"))).setRequired(true));
-		}
-
-		private List<Room> getRoomList() {
-			//FIXME need to be reviewed
-			List<Room> result = new ArrayList<>();
-			RoomDao dao = getBean(RoomDao.class);
-			result.addAll(dao.getPublicRooms());
-			for (GroupUser ou : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-				result.addAll(dao.getGroupRooms(ou.getGroup().getId()));
-			}
-			if (getModelObject().getRoom() != null && getModelObject().getRoom().isAppointment()) { //FIXME review
-				result.add(getModelObject().getRoom());
-			}
-			return result;
-		}
-
-		private List<OmCalendar> getCalendarList(){
-			return getBean(AppointmentManager.class).getCalendars(getUserId());
-		}
-
-		@Override
-		protected void onValidate() {
-			if (null != start.getConvertedInput() && null != end.getConvertedInput() && end.getConvertedInput().isBefore(start.getConvertedInput())) {
-				error(Application.getString(1592));
-			}
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.GroupUserDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.calendar.OmCalendar;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.AuthLevelUtil;
+import org.apache.openmeetings.db.util.FormatHelper;
+import org.apache.openmeetings.service.calendar.caldav.AppointmentManager;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.GroupChoiceProvider;
+import org.apache.openmeetings.web.common.OmDateTimePicker;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.openmeetings.web.util.UserMultiChoice;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.CollectionModel;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.wicketstuff.select2.Select2MultiChoice;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.JQueryUIBehavior;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class AppointmentDialog extends AbstractFormDialog<Appointment> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDialog.class, webAppRootKey);
+
+	private AppointmentForm form;
+	private DialogButton save = new DialogButton("save", Application.getString(813));
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(1130));
+	private DialogButton delete = new DialogButton("delete", Application.getString(814));
+	private DialogButton enterRoom = new DialogButton("enterRoom", Application.getString(1282));
+	private final CalendarPanel calendarPanel;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	final MessageDialog confirmDelete;
+	private final WebMarkupContainer sipContainer = new WebMarkupContainer("sip-container");
+	//FIXME TODO need to be unified with RoomInvitationForm
+	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.user));
+	private final Select2MultiChoice<Group> groups = new Select2MultiChoice<>("groups"
+			, new CollectionModel<Group>(new ArrayList<>())
+			, new GroupChoiceProvider());
+	private final UserMultiChoice attendees = new UserMultiChoice("attendees", new CollectionModel<User>(new ArrayList<>()));
+	private enum InviteeType {
+		user
+		, group
+	}
+
+	@Override
+	public int getWidth() {
+		return 650;
+	}
+
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("classes", "{'ui-dialog': 'ui-corner-all appointment'}");
+	}
+
+	public void setModelObjectWithAjaxTarget(Appointment a, AjaxRequestTarget target) {
+		form.setModelObject(a);
+		form.start.setModelObject(getDateTime(a.getStart()));
+		form.end.setModelObject(getDateTime(a.getEnd()));
+		form.setEnabled(isOwner(a));
+		log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + a);
+		if (a.getId() != null) {
+			delete.setVisible(isOwner(a), target);
+			enterRoom.setVisible(a.getRoom() != null, target);
+		} else {
+			delete.setVisible(false, target);
+			enterRoom.setVisible(false, target);
+		}
+		if (a.getRoom() != null) {
+			target.add(sipContainer.replace(new Label("room.confno", a.getRoom().getConfno())).setVisible(a.getRoom().isSipEnabled()));
+		}
+		save.setVisible(isOwner(a), target);
+		super.setModelObject(a);
+	}
+
+	public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, CompoundPropertyModel<Appointment> model) {
+		super(id, title, model, true);
+		log.debug(" -- AppointmentDialog -- Current model " + getModel().getObject());
+		this.calendarPanel = calendarPanel;
+		setOutputMarkupId(true);
+		form = new AppointmentForm("appForm", model);
+		add(form);
+		confirmDelete = new MessageDialog("confirmDelete", Application.getString(814), Application.getString(833), DialogButtons.OK_CANCEL, DialogIcon.WARN){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				if (button != null && button.match(AbstractDialog.OK)){
+					deleteAppointment(handler);
+				}
+			}
+		};
+		add(confirmDelete);
+	}
+
+	protected void deleteAppointment(IPartialPageRequestHandler handler) {
+		Appointment a = getModelObject();
+		getBean(AppointmentDao.class).delete(a, getUserId());
+		calendarPanel.refresh(handler);
+		if (a.getCalendar() != null && a.getHref() != null) {
+			calendarPanel.updatedeleteAppointment(handler, CalendarDialog.DIALOG_TYPE.DELETE_APPOINTMENT, a);
+		}
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(enterRoom, save, delete, cancel);
+	}
+
+	@Override
+	public DialogButton getSubmitButton() {
+		return save;
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onOpen(IPartialPageRequestHandler handler) {
+		handler.add(form.add(new JQueryUIBehavior("#tabs", "tabs")));
+	}
+
+	@Override
+	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+		if (delete.equals(button)) {
+			confirmDelete.open(handler);
+		} else if (enterRoom.equals(button)) {
+			RoomEnterBehavior.roomEnter((MainPage)getPage(), handler, getModelObject().getRoom().getId());
+		}
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		Appointment a = form.getModelObject();
+		a.setRoom(form.createRoom ? form.appRoom : form.groom.getModelObject());
+		final List<MeetingMember> mms = a.getMeetingMembers() == null ? new ArrayList<>() : a.getMeetingMembers();
+		Set<Long> currentIds = new HashSet<>();
+		List<User> users = new ArrayList<>();
+		if (InviteeType.group == rdi.getModelObject()) {
+			//lets iterate through all group users
+			for (Group g : groups.getModelObject()) {
+				for (GroupUser gu : getBean(GroupUserDao.class).get(g.getId(), 0, Integer.MAX_VALUE)) {
+					User u = gu.getUser();
+					if (!currentIds.contains(u.getId())) {
+						users.add(u);
+						currentIds.add(u.getId());
+					}
+				}
+			}
+		} else {
+			users = new ArrayList<>(attendees.getModelObject());
+			for (User u : users) {
+				if (u.getId() != null) {
+					currentIds.add(u.getId());
+				}
+			}
+		}
+
+		//remove users
+		for (Iterator<MeetingMember> i = mms.iterator(); i.hasNext();) {
+			MeetingMember m = i.next();
+			if (!currentIds.contains(m.getUser().getId())) {
+				i.remove();
+			}
+		}
+		Set<Long> originalIds = new HashSet<>();
+		for (MeetingMember m : mms) {
+			originalIds.add(m.getUser().getId());
+		}
+		//add users
+		for (User u : users) {
+			if (u.getId() == null || !originalIds.contains(u.getId())) {
+				MeetingMember mm = new MeetingMember();
+				mm.setUser(u);
+				mm.setDeleted(false);
+				mm.setInserted(a.getInserted());
+				mm.setUpdated(a.getUpdated());
+				mm.setAppointment(a);
+				mms.add(mm);
+			}
+		}
+		a.setMeetingMembers(mms);
+		a.setStart(getDate(form.start.getModelObject()));
+		a.setEnd(getDate(form.end.getModelObject()));
+		a.setCalendar(form.cals.getModelObject());
+		getBean(AppointmentDao.class).update(a, getUserId());
+		if (a.getCalendar() != null) {
+			calendarPanel.updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
+		}
+		target.add(feedback);
+		calendarPanel.refresh(target);
+	}
+
+	public static boolean isOwner(Appointment object) {
+		return object.getOwner() != null && getUserId().equals(object.getOwner().getId());
+	}
+
+	private class AppointmentForm extends Form<Appointment> {
+		private static final long serialVersionUID = 1L;
+		private boolean createRoom = true;
+		private Room appRoom = null;
+		private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));
+		private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));
+		private final PasswordTextField pwd = new PasswordTextField("password");
+		private final Label owner = new Label("aowner", Model.of(""));
+		private final WebMarkupContainer ownerPanel = new WebMarkupContainer("owner-row");
+		private final WebMarkupContainer createRoomBlock = new WebMarkupContainer("create-room-block", new CompoundPropertyModel<>(appRoom));
+		private final DropDownChoice<Room.Type> roomType = new RoomTypeDropDown("type");
+		private final DropDownChoice<Room> groom = new DropDownChoice<>(
+				"groom"
+				, Model.of(new Room())
+				, getRoomList()
+				, new ChoiceRenderer<Room>("name", "id"));
+		private DropDownChoice<OmCalendar> cals = new DropDownChoice<>(
+				"calendar",
+				new LoadableDetachableModel<List<? extends OmCalendar>>() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected List<? extends OmCalendar> load() {
+						return getCalendarList();
+					}
+				},
+				new ChoiceRenderer<OmCalendar>("title", "id")
+		);
+		private final WebMarkupContainer groupContainer = new WebMarkupContainer("groupContainer");
+
+		private Room createAppRoom() {
+			Room r = new Room();
+			r.setAppointment(true);
+			if (r.getType() == null) {
+				r.setType(Room.Type.conference);
+			}
+			return r;
+		}
+
+		@Override
+		protected void onModelChanged() {
+			super.onModelChanged();
+
+			Appointment a = getModelObject();
+			if (a.getReminder() == null) {
+				a.setReminder(Reminder.none);
+			}
+			if (a.getRoom() == null) {
+				a.setRoom(createAppRoom());
+			}
+			createRoom = a.getRoom().isAppointment();
+			if (createRoom) {
+				appRoom = a.getRoom();
+			} else {
+				groom.setModelObject(a.getRoom());
+				appRoom = createAppRoom();
+			}
+			createRoomBlock.setDefaultModelObject(appRoom);
+			createRoomBlock.setEnabled(createRoom);
+			groom.setEnabled(!createRoom);
+			if (a.getId() == null) {
+				java.util.Calendar start = WebSession.getCalendar();
+				start.setTime(a.getStart());
+				java.util.Calendar end = WebSession.getCalendar();
+				end.setTime(a.getEnd());
+
+				if (start.equals(end)) {
+					end.add(java.util.Calendar.HOUR_OF_DAY, 1);
+					a.setEnd(end.getTime());
+				}
+				cals.setEnabled(true);
+			} else {
+				cals.setEnabled(false);
+			}
+
+			rdi.setModelObject(InviteeType.user);
+			attendees.setModelObject(new ArrayList<>());
+			if (a.getMeetingMembers() != null) {
+				for (MeetingMember mm : a.getMeetingMembers()) {
+					attendees.getModelObject().add(mm.getUser());
+				}
+			}
+			pwd.setEnabled(a.isPasswordProtected());
+			owner.setDefaultModel(Model.of(FormatHelper.formatUser(a.getOwner())));
+			ownerPanel.setVisible(!isOwner(a));
+		}
+
+		public AppointmentForm(String id, CompoundPropertyModel<Appointment> model) {
+			super(id, model);
+			setOutputMarkupId(true);
+
+			add(feedback.setOutputMarkupId(true));
+			//General
+			add(new RequiredTextField<String>("title").setLabel(Model.of(Application.getString(572))));
+			add(ownerPanel.add(owner));
+			boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights());
+			add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					boolean groupsEnabled = InviteeType.group == rdi.getModelObject();
+					target.add(groups.setEnabled(groupsEnabled), attendees.setEnabled(!groupsEnabled));
+				}
+			}));
+			groupContainer.add(
+				groups.setLabel(Model.of(Application.getString(126))).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)
+				, new Radio<>("group", Model.of(InviteeType.group))
+			);
+			if (showGroups) {
+				groups.add(new AjaxFormComponentUpdatingBehavior("change") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						// added to update model
+					}
+				}).setEnabled(false);
+			}
+			rdi.add(attendees.add(new AjaxFormComponentUpdatingBehavior("change") {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						protected void onUpdate(AjaxRequestTarget target) {
+							// added to update model
+						}
+					})
+					, groupContainer.setVisible(showGroups)
+				);
+			rdi.add(new Radio<>("user", Model.of(InviteeType.user)));
+
+			add(new TextField<String>("location"));
+			DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");
+			add(toolbar);
+			add(new WysiwygEditor("description", toolbar));
+
+			//room
+			add(new AjaxCheckBox("createRoom", new PropertyModel<Boolean>(this, "createRoom")) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					createRoom = getConvertedInput();
+					target.add(createRoomBlock.setEnabled(createRoom), groom.setEnabled(!createRoom));
+				}
+			});
+			add(createRoomBlock.add(roomType, new CheckBox("moderated")).setEnabled(createRoom).setOutputMarkupId(true));
+			add(groom.setRequired(true).setLabel(Model.of(Application.getString(406))).setEnabled(!createRoom).setOutputMarkupId(true));
+			add(sipContainer.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true));
+			sipContainer.add(new Label("room.confno", "")).setVisible(false);
+
+			//Advanced
+			add(new DropDownChoice<>(
+					"reminder"
+					, Arrays.asList(Reminder.values())
+					, new IChoiceRenderer<Reminder>() {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public Object getDisplayValue(Reminder art) {
+							return getString("appointment.reminder." + art.name());
+						}
+
+						@Override
+						public String getIdValue(Reminder art, int index) {
+							return art.name();
+						}
+
+						@Override
+						public Reminder getObject(String id, IModel<? extends List<? extends Reminder>> choices) {
+							for (Reminder art : choices.getObject()) {
+								if (art.name().equals(id)) {
+									return art;
+								}
+							}
+							return null;
+						}
+					}));
+			add(new AjaxCheckBox("passwordProtected") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					AppointmentForm.this.getModelObject().setPasswordProtected(getConvertedInput());
+					pwd.setEnabled(AppointmentForm.this.getModelObject().isPasswordProtected());
+					target.add(pwd);
+				}
+			});
+			pwd.setEnabled(getModelObject().isPasswordProtected());
+			pwd.setOutputMarkupId(true);
+			add(pwd);
+			add(cals.setNullValid(true).setLabel(Model.of("calendar")).setOutputMarkupId(true));
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(start.setLabel(Model.of(getString("570"))).setRequired(true)
+					, end.setLabel(Model.of(getString("571"))).setRequired(true));
+		}
+
+		private List<Room> getRoomList() {
+			//FIXME need to be reviewed
+			List<Room> result = new ArrayList<>();
+			RoomDao dao = getBean(RoomDao.class);
+			result.addAll(dao.getPublicRooms());
+			for (GroupUser ou : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
+				result.addAll(dao.getGroupRooms(ou.getGroup().getId()));
+			}
+			if (getModelObject().getRoom() != null && getModelObject().getRoom().isAppointment()) { //FIXME review
+				result.add(getModelObject().getRoom());
+			}
+			return result;
+		}
+
+		private List<OmCalendar> getCalendarList(){
+			return getBean(AppointmentManager.class).getCalendars(getUserId());
+		}
+
+		@Override
+		protected void onValidate() {
+			if (null != start.getConvertedInput() && null != end.getConvertedInput() && end.getConvertedInput().isBefore(start.getConvertedInput())) {
+				error(Application.getString(1592));
+			}
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
index 3e5cc63..5819d24 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.calendar;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.entity.calendar.Appointment;
-
-import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
-import com.googlecode.wicket.jquery.ui.calendar.CalendarModel;
-import com.googlecode.wicket.jquery.ui.calendar.ICalendarVisitor;
-
-public class AppointmentModel extends CalendarModel implements ICalendarVisitor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public void visit(CalendarEvent event) {
-		//every event can be customized
-	}
-
-	@Override
-	protected List<? extends CalendarEvent> load() {
-		List<CalendarEvent> list = new ArrayList<>();
-		for (Appointment a : getBean(AppointmentDao.class).getInRange(getUserId(), getDate(getStart()), getDate(getEnd()))) {
-			list.add(new OmCalendarEvent(a));
-		}
-		return list;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+
+import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
+import com.googlecode.wicket.jquery.ui.calendar.CalendarModel;
+import com.googlecode.wicket.jquery.ui.calendar.ICalendarVisitor;
+
+public class AppointmentModel extends CalendarModel implements ICalendarVisitor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public void visit(CalendarEvent event) {
+		//every event can be customized
+	}
+
+	@Override
+	protected List<? extends CalendarEvent> load() {
+		List<CalendarEvent> list = new ArrayList<>();
+		for (Appointment a : getBean(AppointmentDao.class).getInRange(getUserId(), getDate(getStart()), getDate(getEnd()))) {
+			list.add(new OmCalendarEvent(a));
+		}
+		return list;
+	}
+}


[26/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
Normalize all the line endings


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/1cb3518f
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/1cb3518f
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/1cb3518f

Branch: refs/heads/3.3.x
Commit: 1cb3518f0d7622145f37ecb62d14f56e7126cc3d
Parents: 11e8d9d
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu May 18 12:35:51 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu May 18 12:35:51 2017 +0700

----------------------------------------------------------------------
 NOTICE                                          |   28 +-
 README                                          |  248 +--
 .../record/listener/async/BaseStreamWriter.java |  400 ++---
 .../data/record/listener/async/CachedEvent.java |  152 +-
 .../listener/async/StreamAudioWriter.java       |  456 ++---
 .../listener/async/StreamVideoWriter.java       |  196 +--
 .../openmeetings/core/mail/SMSHandler.java      |  236 +--
 .../core/session/SessionManager.java            |  730 ++++----
 openmeetings-core/src/site/site.xml             |   80 +-
 .../test/rtmp/LoadTestRtmpClient.java           |  344 ++--
 .../openmeetings/test/rtmp/SimulateLoad.java    |  184 +-
 .../openmeetings/db/dao/IDataProviderDao.java   |  188 +-
 .../db/dao/basic/MailMessageDao.java            |  270 +--
 .../openmeetings/db/dao/label/LabelDao.java     |  642 +++----
 .../apache/openmeetings/db/dao/room/SipDao.java |  382 ++--
 .../db/dao/server/ISessionManager.java          |  412 ++---
 .../openmeetings/db/dao/server/ServerDao.java   |  444 ++---
 .../openmeetings/db/dao/user/GroupDao.java      |  292 ++--
 .../openmeetings/db/dao/user/GroupUserDao.java  |  248 +--
 .../db/entity/basic/MailMessage.java            |  398 ++---
 .../openmeetings/db/entity/server/Server.java   |  608 +++----
 .../openmeetings/db/util/FormatHelper.java      |  162 +-
 openmeetings-db/src/site/site.xml               |   80 +-
 .../src/main/swf/base/components/miniIcons.lzx  |  132 +-
 .../main/swf/base/components/miniIconsNew.lzx   |   92 +-
 .../src/main/swf/base/components/omImage.lzx    |  104 +-
 .../src/main/swf/base/components/omMiniIcon.lzx |   74 +-
 .../swf/base/components/scrollbars/library.lzx  |   88 +-
 .../scrollbars/scrollbar_yresources.lzx         |   48 +-
 .../main/swf/base/remote/baseVideoStream.lzx    |  770 ++++-----
 .../swf/base/remote/baseVideoStreamDevice.lzx   |  344 ++--
 .../src/main/swf/base/remote/baseVideoView.lzx  |  208 +--
 .../main/swf/commonVideoViewContentSWF10.lzx    | 1630 +++++++++---------
 openmeetings-flash/src/main/swf/dragHelper.lzx  |   82 +-
 .../src/main/swf/lzrecorder/library.lzx         |   50 +-
 .../main/swf/lzrecorder/playBackVideoStream.lzx |  140 +-
 .../whiteboard/base/whiteBoardPointer.lzx       |   74 +-
 .../propertypanel/drawDocumentPanelItem.lzx     |   80 +-
 .../main/swf/networkTesting/networktesting.lzx  |  294 ++--
 .../networkTesting/tests/BaseURLLoadTest.lzx    |  292 ++--
 .../networkTesting/tests/DownloadSpeedTest.lzx  |  100 +-
 .../swf/networkTesting/tests/JitterTest.lzx     |  114 +-
 .../swf/networkTesting/tests/NetworkTest.lzx    |  256 +--
 .../main/swf/networkTesting/tests/PingTest.lzx  |   86 +-
 .../tests/PortAvailabilityTest.lzx              |  180 +-
 .../networkTesting/tests/UploadSpeedTest.lzx    |  248 +--
 .../main/swf/networkTesting/tests/library.lzx   |   74 +-
 .../src/main/swf/networkTesting/testsView.lzx   |  210 +--
 .../src/main/swf/video/baseVideoObject.lzx      | 1442 ++++++++--------
 .../main/swf/video/editRecordStreamSWF10.lzx    |  998 +++++------
 .../src/main/swf/video/library.lzx              |  140 +-
 .../main/swf/video/videoObjectPlayBroadcast.lzx |  162 +-
 .../swf/video/videoObjectPlayTestBroadcast.lzx  |   82 +-
 .../main/swf/video/videoObjectTestBroadcast.lzx |  110 +-
 .../main/swf/video/videoUserProfilePicSWF10.lzx |   72 +-
 .../src/main/swf/video/volumeSlider.lzx         |  136 +-
 openmeetings-flash/src/site/site.xml            |   78 +-
 .../backup/AppointmentConverter.java            |  108 +-
 .../AppointmentReminderTypeConverter.java       |   78 +-
 .../openmeetings/backup/DateConverter.java      |   80 +-
 .../openmeetings/backup/GroupConverter.java     |  108 +-
 .../openmeetings/backup/InlineConverter.java    |   58 +-
 .../openmeetings/backup/IntegerTransform.java   |   68 +-
 .../openmeetings/backup/LongTransform.java      |   66 +-
 .../backup/OmCalendarConverter.java             |  110 +-
 .../apache/openmeetings/backup/OmConverter.java |  112 +-
 .../openmeetings/backup/PollTypeConverter.java  |   74 +-
 .../backup/RecordingStatusConverter.java        |   94 +-
 .../openmeetings/backup/RoomConverter.java      |  108 +-
 .../openmeetings/backup/RoomTypeConverter.java  |   74 +-
 .../backup/SalutationConverter.java             |   70 +-
 .../openmeetings/backup/UserConverter.java      |  108 +-
 .../cli/ConnectionPropertiesPatcher.java        |  378 ++--
 .../org/apache/openmeetings/cli/Db2Patcher.java |   56 +-
 .../apache/openmeetings/cli/DerbyPatcher.java   |   66 +-
 .../apache/openmeetings/cli/MssqlPatcher.java   |   56 +-
 .../apache/openmeetings/cli/MysqlPatcher.java   |   58 +-
 .../apache/openmeetings/cli/OraclePatcher.java  |   64 +-
 .../openmeetings/cli/PostgresPatcher.java       |   56 +-
 .../installation/InstallationConfig.java        |  200 +--
 openmeetings-install/src/site/site.xml          |   78 +-
 .../openmeetings/screenshare/CaptureScreen.java |  474 ++---
 .../screenshare/IScreenEncoder.java             |   66 +-
 .../screenshare/RTMPClientPublish.java          |  204 +--
 .../screenshare/ScreenV1Encoder.java            |  404 ++---
 .../screenshare/gui/MouseListenerable.java      |   62 +-
 .../screenshare/gui/NumberSpinner.java          |   70 +-
 .../src/main/resources/logback.xsd              |  218 +--
 openmeetings-screenshare/src/site/site.xml      |   78 +-
 .../src/main/assembly/jrebel/red5-debug.bat     |   38 +-
 .../src/main/assembly/scripts/admin.bat         |   42 +-
 openmeetings-server/src/site/site.xml           |  280 +--
 .../src/site/stylesheets/errortable.xsl         |  134 +-
 .../src/site/xdoc/ApacheDerbyConfig.xml         |  114 +-
 .../src/site/xdoc/BitrixPlugin.xml              |   96 +-
 .../src/site/xdoc/BuildInstructions.xml         |  208 +--
 .../src/site/xdoc/BuildInstructions_3.0.x.xml   |  608 +++----
 .../src/site/xdoc/CalendarAndTimezone.xml       |  134 +-
 .../src/site/xdoc/CallForLogo.xml               |  486 +++---
 .../src/site/xdoc/Clustering.xml                |  278 +--
 .../src/site/xdoc/CommandLineAdmin.xml          |  200 +--
 .../site/xdoc/ConferenceRoomLayoutOptions.xml   |  174 +-
 .../src/site/xdoc/ConfluencePlugin.xml          |   98 +-
 .../src/site/xdoc/CustomCryptMechanism.xml      |  206 +--
 .../src/site/xdoc/CustomRoomTypeHowTo.xml       |  206 +--
 openmeetings-server/src/site/xdoc/Dashboard.xml |  138 +-
 .../src/site/xdoc/DrupalPlugin.xml              |  150 +-
 .../src/site/xdoc/EditTemplates.xml             |  128 +-
 .../src/site/xdoc/GeneralConfiguration.xml      |  626 +++----
 .../src/site/xdoc/GetVersionInfo.xml            |  144 +-
 openmeetings-server/src/site/xdoc/HotKeys.xml   |  106 +-
 .../src/site/xdoc/IBMDB2Config.xml              |  146 +-
 .../src/site/xdoc/Internationalisation.xml      |   96 +-
 .../src/site/xdoc/JUnitTesting.xml              |  170 +-
 .../src/site/xdoc/JVMPerformanceTuning.xml      |  132 +-
 .../src/site/xdoc/JiraPlugin.xml                |  102 +-
 .../src/site/xdoc/JoomlaPlugin.xml              |  118 +-
 .../src/site/xdoc/LanguageEditor.xml            |  116 +-
 .../src/site/xdoc/LdapAndADS.xml                |  190 +-
 .../src/site/xdoc/MSSQLConfig.xml               |  152 +-
 .../src/site/xdoc/ManualTesting.xml             | 1002 +++++------
 .../src/site/xdoc/MoodlePlugin.xml              |  152 +-
 .../src/site/xdoc/MySQLConfig.xml               |  152 +-
 .../src/site/xdoc/Navigation.xml                |   86 +-
 .../src/site/xdoc/OpenOfficeConverter.xml       |  108 +-
 .../src/site/xdoc/OracleConfig.xml              |  122 +-
 .../src/site/xdoc/PortSettings.xml              |  172 +-
 .../src/site/xdoc/PostgresConfig.xml            |  144 +-
 .../src/site/xdoc/RTMPSAndHTTPS.xml             |  434 ++---
 .../src/site/xdoc/RecommendedHardwareList.xml   |  118 +-
 .../src/site/xdoc/RedminePlugin.xml             |   68 +-
 .../src/site/xdoc/ReleaseGuide.xml              |  628 +++----
 .../src/site/xdoc/RestAPISample.xml             |  278 +--
 .../src/site/xdoc/RestrictedAccess.xml          |  144 +-
 .../src/site/xdoc/SakaiPlugin.xml               |  220 +--
 .../src/site/xdoc/SugarCRMPlugin.xml            |  146 +-
 .../src/site/xdoc/TimeZoneHandling.xml          |   78 +-
 openmeetings-server/src/site/xdoc/Upgrade.xml   |  192 +--
 .../src/site/xdoc/WebappNamePath.xml            |  302 ++--
 .../src/site/xdoc/WebcamResolutions.xml         |  118 +-
 .../src/site/xdoc/WebsiteGuide.xml              |  160 +-
 .../src/site/xdoc/commercial-support.xml        |  112 +-
 .../src/site/xdoc/installation.xml              |  568 +++---
 .../src/site/xdoc/red5sip-integration_2.0.xml   |  356 ++--
 .../src/site/xdoc/themes-and-branding.xml       |  122 +-
 .../src/site/xdoc/voip-sip-integration.xml      |  136 +-
 .../service/quartz/scheduler/CleanupJob.java    |  358 ++--
 openmeetings-service/src/site/site.xml          |   80 +-
 .../openmeetings/util/ConnectionProperties.java |  172 +-
 .../org/apache/openmeetings/util/DaoHelper.java |  214 +--
 .../apache/openmeetings/util/OmFileHelper.java  |  630 +++----
 .../org/apache/openmeetings/util/Version.java   |  196 +--
 .../apache/openmeetings/util/mail/MailUtil.java |   68 +-
 .../util/process/ProcessHelper.java             |  232 +--
 openmeetings-util/src/site/site.xml             |   80 +-
 .../openmeetings/web/admin/AdminBaseForm.java   |  362 ++--
 .../web/admin/SearchableDataView.java           |   90 +-
 .../web/admin/backup/BackupPanel.java           |  484 +++---
 .../web/admin/configurations/ConfigForm.java    |  286 +--
 .../web/admin/configurations/ConfigsPanel.java  |  188 +-
 .../web/admin/groups/GroupForm.java             |  500 +++---
 .../web/admin/groups/GroupUsersPanel.html       |   90 +-
 .../web/admin/groups/GroupUsersPanel.java       |  318 ++--
 .../web/admin/groups/GroupsPanel.java           |  198 +--
 .../web/admin/labels/AddLanguageDialog.java     |  230 +--
 .../web/admin/labels/LabelsForm.java            |  224 +--
 .../openmeetings/web/admin/labels/LangForm.java |  206 +--
 .../openmeetings/web/admin/ldaps/LdapForm.java  |  260 +--
 .../web/admin/ldaps/LdapsPanel.java             |  186 +-
 .../openmeetings/web/admin/rooms/RoomForm.java  |  824 ++++-----
 .../web/admin/rooms/RoomsPanel.java             |  182 +-
 .../web/admin/servers/ServerForm.java           |  280 +--
 .../web/admin/servers/ServersPanel.java         |  190 +-
 .../openmeetings/web/admin/users/UserForm.java  |  628 +++----
 .../web/app/LabelResourceLoader.java            |  130 +-
 .../web/common/ConfirmableAjaxBorder.java       |  354 ++--
 .../openmeetings/web/common/HeaderPanel.html    |   52 +-
 .../openmeetings/web/common/HeaderPanel.java    |   64 +-
 .../web/common/OmPagingNavigator.html           |   54 +-
 .../web/common/OmPagingNavigator.java           |   64 +-
 .../openmeetings/web/common/menu/MenuPanel.html |   50 +-
 .../openmeetings/web/common/menu/MenuPanel.java |  138 +-
 .../web/data/DataViewContainer.java             |  106 +-
 .../openmeetings/web/data/OmOrderByBorder.java  |   90 +-
 .../web/data/SearchableDataProvider.java        |  184 +-
 .../openmeetings/web/pages/ActivatePage.java    |  102 +-
 .../openmeetings/web/pages/NotInitedPage.html   |   64 +-
 .../openmeetings/web/pages/NotInitedPage.java   |   80 +-
 .../openmeetings/web/pages/ResetPage.html       |   50 +-
 .../openmeetings/web/pages/ResetPage.java       |   88 +-
 .../web/pages/auth/KickMessageDialog.html       |   56 +-
 .../web/pages/auth/KickMessageDialog.java       |  116 +-
 .../web/pages/auth/ResetPasswordDialog.html     |   84 +-
 .../web/pages/auth/ResetPasswordDialog.java     |  314 ++--
 .../openmeetings/web/user/AboutDialog.html      |   84 +-
 .../openmeetings/web/user/AboutDialog.java      |  114 +-
 .../openmeetings/web/user/UserInfoDialog.html   |   54 +-
 .../openmeetings/web/user/UserInfoDialog.java   |  166 +-
 .../web/user/calendar/AppointmentDialog.html    |  242 +--
 .../web/user/calendar/AppointmentDialog.java    | 1020 +++++------
 .../web/user/calendar/AppointmentModel.java     |  102 +-
 .../web/user/dashboard/MyRoomsWidget.java       |   98 +-
 .../user/dashboard/MyRoomsWidgetDescriptor.java |  102 +-
 .../web/user/dashboard/MyRoomsWidgetView.html   |   50 +-
 .../web/user/dashboard/MyRoomsWidgetView.java   |   72 +-
 .../web/user/dashboard/OmDashboardPanel.html    |   50 +-
 .../web/user/dashboard/OmDashboardPanel.java    |   72 +-
 .../web/user/dashboard/RecentRoomsWidget.java   |   98 +-
 .../dashboard/RecentRoomsWidgetDescriptor.java  |  102 +-
 .../user/dashboard/RecentRoomsWidgetView.html   |   50 +-
 .../user/dashboard/RecentRoomsWidgetView.java   |   76 +-
 .../web/user/dashboard/RssWidget.java           |   98 +-
 .../web/user/dashboard/RssWidgetDescriptor.java |  102 +-
 .../web/user/dashboard/RssWidgetView.java       |  194 +--
 .../web/user/dashboard/StartWidget.java         |   96 +-
 .../user/dashboard/StartWidgetDescriptor.java   |  102 +-
 .../web/user/dashboard/StartWidgetView.html     |   76 +-
 .../web/user/dashboard/StartWidgetView.java     |  138 +-
 .../web/user/dashboard/WelcomeWidget.java       |   96 +-
 .../user/dashboard/WelcomeWidgetDescriptor.java |  102 +-
 .../web/user/dashboard/WelcomeWidgetView.html   |   86 +-
 .../web/user/dashboard/WelcomeWidgetView.java   |  162 +-
 .../web/user/dashboard/admin/AdminWidget.java   |   98 +-
 .../dashboard/admin/AdminWidgetDescriptor.java  |  102 +-
 .../user/dashboard/admin/AdminWidgetView.html   |   58 +-
 .../user/dashboard/admin/AdminWidgetView.java   |  108 +-
 .../web/user/profile/UserProfilePanel.html      |  174 +-
 .../web/user/profile/UserProfilePanel.java      |  146 +-
 .../web/user/profile/UserSearchPanel.html       |  136 +-
 .../web/user/profile/UserSearchPanel.java       |  308 ++--
 .../openmeetings/web/user/rooms/RoomsPanel.html |  124 +-
 .../openmeetings/web/user/rooms/RoomsPanel.java |  274 +--
 .../web/user/rooms/RoomsSelectorPanel.html      |   54 +-
 .../web/user/rooms/RoomsSelectorPanel.java      |  112 +-
 .../web/user/rooms/RoomsTabbedPanel.html        |   60 +-
 .../web/user/rooms/RoomsTabbedPanel.java        |  140 +-
 .../openmeetings/web/util/AjaxDownload.java     |  256 +--
 .../src/main/webapp/conf/om_ldap.cfg            |  218 +--
 .../main/webapp/js/openmeetings_functions.js    |  128 +-
 .../src/main/webapp/languages/errorvalues.xsd   |   82 +-
 .../src/main/webapp/public/config.xsd           |  262 +--
 .../src/main/webapp/public/theme.xml            |  660 +++----
 .../src/main/webapp/public/theme.xsd            |   90 +-
 .../src/main/webapp/upload/library.xsd          |  136 +-
 openmeetings-web/src/site/site.xml              |   78 +-
 .../openmeetings/test/AbstractWicketTester.java |  154 +-
 .../test/backup/TestOldBackups.java             |  256 +--
 .../openmeetings/test/user/TestUserContact.java |  210 +--
 .../openmeetings/test/user/TestUserCount.java   |  116 +-
 .../webservice/ServerWebService.java            |  360 ++--
 .../cluster/SlaveHTTPConnectionManager.java     |  198 +--
 openmeetings-webservice/src/site/site.xml       |   80 +-
 src/site/site.xml                               |  154 +-
 253 files changed, 25570 insertions(+), 25570 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
index 6685a3f..eddf910 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,14 +1,14 @@
-Apache OpenMeetings
-Copyright 2011-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-This product includes icons from FamFamFam Icon Set Silk.
-http://www.famfamfam.com/lab/icons/silk/
-
-This product includes icons from Yusuke Kamiyamane.
-http://p.yusukekamiyamane.com/
-
-This product includes free icons from FatCow.
-http://www.fatcow.com/free-icons
+Apache OpenMeetings
+Copyright 2011-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes icons from FamFamFam Icon Set Silk.
+http://www.famfamfam.com/lab/icons/silk/
+
+This product includes icons from Yusuke Kamiyamane.
+http://p.yusukekamiyamane.com/
+
+This product includes free icons from FatCow.
+http://www.fatcow.com/free-icons

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/README
----------------------------------------------------------------------
diff --git a/README b/README
index 6747d28..fb4c599 100644
--- a/README
+++ b/README
@@ -1,124 +1,124 @@
-Apache OpenMeetings - README
-Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
---------------------------------------------------------------------------------
-
-About
-=====
-Apache OpenMeetings provides video conferencing, instant messaging, white board,
-collaborative document editing and other groupware tools using API functions of 
-the Red5 Streaming Server for Remoting and Streaming. 
-
-Release Notes 3.2.1
-=============
-see CHANGELOG file for detailed log
-
-Service release 1 for 3.2.0, provides following improvements:
-
-Room
-* Video is more stable
-* Office files download is fixed
-* Multi-upload is added
-* External video works as expected
-* WB drawing on slides works as expected
-
-Chat
-* chat is made resizable
-* multiple issues in chat are fixed
-* typing indicator is added
-
-Calendar
-* date/time validator is improved
-* whole group can be invited by admin to event
-
-Other fixes and improvements, 49 issues were fixed
-
-
-=============
-_Integration with Asterisk_
-SIP/VOIP integration with Asterisk was refactored. 
-Confbridge application is now used instead of Meetme for the conferences.
-Sound quality and SIP transport stability was significantly improved.
-Basic support for video is added (is unstable and in beta version stage now).
-See also: http://openmeetings.apache.org/red5sip-integration_2.1.html
-
-_Improving the sound and video quality_
-All the audio/video related components now use SWF11 for broadcasting and 
-receiving audio and video signals. 
-Echo cancellation can be enabled in the config. 
-H264 video codec is now used instead of H263 to enable SIP video support.
-
-_Private and moderated chat_
-Ability to send private chat messages in the room is added as well as the chat 
-moderation funmctionality.
-
-_SMS sending module_
-Possibility to send SMS message as a meeting reminder is added.
-See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/SMS+Sending+Module
-
-_Network testing tool/script_
-Network testing tool is implemented and its link is added to the login page.
-See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/Connection+testing+tool
-
-_Improvements in the mail sending process_
-Now e-mails are re-send again in case of unsuccessfull result at the first 
-attempt or OpenMeetings re-start before the sending. 
-SMTP setting updates now takes effect just after they saving whereas previously 
-they started to work after the OpenMeetings re-start only.
-
-_Calendar_
-Messages about the meeting updates are sent only when substantial changes were made. 
-Multiple external attendees can be added as one operation, it's now possible to 
-specify user name for external guests (user will appear with this name in the user 
-list in the room). 
-
-_Room Interface_
-Possibility to get invitation link without sending an e-mail was added. 
-Confirmation dialog for exclusive audio no longer appears.
-Hot key is added to be able to "rearrange" video windows in the room. 
-Volume slider on the video pod toolbar was added.
-
-_Recordings and screen sharing improvements_
-Some improvements for the screen sharing and recordings quality and stability 
-were made.
-
-_Cluster capabilities_
-In the beta stage: OpenMeetings  can be configured in the cluster environment and 
-is ready for the testing, but development has not been fnished yet. 
-See also: http://openmeetings.apache.org/Clustering.html,
-https://cwiki.apache.org/confluence/display/OPENMEETINGS/Cluster+Master-Slave+overview
-
-_Admin/Calendar HTML5 UI_
-Additional HTML5 Wicket based UI (fully customizable with CSS) is added for 
-static screens as a proof of the concept.
-
-Getting Started
-===============
-Please visit the project website for the latest information:
-    http://openmeetings.apache.org/
-    
-Documentation for Installation and Upgrade:
-    http://openmeetings.apache.org/installation.html
-    http://openmeetings.apache.org/Upgrade.html
-
-Along with the developer mailing list archive:
-    http://openmeetings.apache.org/mail-lists.html
-    
-    
-System Requirements
-===================
-You need a platform that supports Sun Java SE 6.
-
-
-Building and running
-====================
-To build from source code:
-
-  - Requirements:
-    Sources compilation require Sun Java SE 8.
-    The project is built with Apache Maven 3.3.9 or later.
-  
-  - To build the OpenMeetings project run ant in the root directory:
-     ant
-    
-For a detailed documentation on how to build from source and options see:
-    http://openmeetings.apache.org/BuildInstructions.html
+Apache OpenMeetings - README
+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
+--------------------------------------------------------------------------------
+
+About
+=====
+Apache OpenMeetings provides video conferencing, instant messaging, white board,
+collaborative document editing and other groupware tools using API functions of 
+the Red5 Streaming Server for Remoting and Streaming. 
+
+Release Notes 3.2.1
+=============
+see CHANGELOG file for detailed log
+
+Service release 1 for 3.2.0, provides following improvements:
+
+Room
+* Video is more stable
+* Office files download is fixed
+* Multi-upload is added
+* External video works as expected
+* WB drawing on slides works as expected
+
+Chat
+* chat is made resizable
+* multiple issues in chat are fixed
+* typing indicator is added
+
+Calendar
+* date/time validator is improved
+* whole group can be invited by admin to event
+
+Other fixes and improvements, 49 issues were fixed
+
+
+=============
+_Integration with Asterisk_
+SIP/VOIP integration with Asterisk was refactored. 
+Confbridge application is now used instead of Meetme for the conferences.
+Sound quality and SIP transport stability was significantly improved.
+Basic support for video is added (is unstable and in beta version stage now).
+See also: http://openmeetings.apache.org/red5sip-integration_2.1.html
+
+_Improving the sound and video quality_
+All the audio/video related components now use SWF11 for broadcasting and 
+receiving audio and video signals. 
+Echo cancellation can be enabled in the config. 
+H264 video codec is now used instead of H263 to enable SIP video support.
+
+_Private and moderated chat_
+Ability to send private chat messages in the room is added as well as the chat 
+moderation funmctionality.
+
+_SMS sending module_
+Possibility to send SMS message as a meeting reminder is added.
+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/SMS+Sending+Module
+
+_Network testing tool/script_
+Network testing tool is implemented and its link is added to the login page.
+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/Connection+testing+tool
+
+_Improvements in the mail sending process_
+Now e-mails are re-send again in case of unsuccessfull result at the first 
+attempt or OpenMeetings re-start before the sending. 
+SMTP setting updates now takes effect just after they saving whereas previously 
+they started to work after the OpenMeetings re-start only.
+
+_Calendar_
+Messages about the meeting updates are sent only when substantial changes were made. 
+Multiple external attendees can be added as one operation, it's now possible to 
+specify user name for external guests (user will appear with this name in the user 
+list in the room). 
+
+_Room Interface_
+Possibility to get invitation link without sending an e-mail was added. 
+Confirmation dialog for exclusive audio no longer appears.
+Hot key is added to be able to "rearrange" video windows in the room. 
+Volume slider on the video pod toolbar was added.
+
+_Recordings and screen sharing improvements_
+Some improvements for the screen sharing and recordings quality and stability 
+were made.
+
+_Cluster capabilities_
+In the beta stage: OpenMeetings  can be configured in the cluster environment and 
+is ready for the testing, but development has not been fnished yet. 
+See also: http://openmeetings.apache.org/Clustering.html,
+https://cwiki.apache.org/confluence/display/OPENMEETINGS/Cluster+Master-Slave+overview
+
+_Admin/Calendar HTML5 UI_
+Additional HTML5 Wicket based UI (fully customizable with CSS) is added for 
+static screens as a proof of the concept.
+
+Getting Started
+===============
+Please visit the project website for the latest information:
+    http://openmeetings.apache.org/
+    
+Documentation for Installation and Upgrade:
+    http://openmeetings.apache.org/installation.html
+    http://openmeetings.apache.org/Upgrade.html
+
+Along with the developer mailing list archive:
+    http://openmeetings.apache.org/mail-lists.html
+    
+    
+System Requirements
+===================
+You need a platform that supports Sun Java SE 6.
+
+
+Building and running
+====================
+To build from source code:
+
+  - Requirements:
+    Sources compilation require Sun Java SE 8.
+    The project is built with Apache Maven 3.3.9 or later.
+  
+  - To build the OpenMeetings project run ant in the root directory:
+     ant
+    
+For a detailed documentation on how to build from source and options see:
+    http://openmeetings.apache.org/BuildInstructions.html

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
index de93393..1520204 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/BaseStreamWriter.java
@@ -1,200 +1,200 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Date;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.red5.io.IStreamableFile;
-import org.red5.io.ITagWriter;
-import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.scope.IScope;
-import org.red5.server.api.service.IStreamableFileService;
-import org.red5.server.api.stream.IStreamableFileFactory;
-import org.red5.server.stream.StreamableFileFactory;
-import org.red5.server.util.ScopeUtils;
-import org.slf4j.Logger;
-
-public abstract class BaseStreamWriter implements Runnable {
-	private static final Logger log = Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
-	private final static int MINUTE_MULTIPLIER = 60 * 1000;
-	public final static int TIME_TO_WAIT_FOR_FRAME = 15 * MINUTE_MULTIPLIER;
-	protected int startTimeStamp = -1;
-	protected long initialDelta = 0;
-
-	// thread is running
-	private boolean running = false;
-	// thread is stopped
-	private boolean stopping = false;
-	// thread will be stopped as soon as the queue is empty
-	private boolean dostopping = false;
-
-	protected ITagWriter writer = null;
-
-	protected Long metaDataId = null;
-
-	protected Date startedSessionTimeDate = null;
-
-	protected File file;
-
-	protected IScope scope;
-
-	protected boolean isScreenData = false;
-
-	protected String streamName = "";
-	protected final RecordingMetaDataDao metaDataDao;
-	private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<>();
-
-	public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData, RecordingMetaDataDao metaDataDao) {
-		startedSessionTimeDate = new Date();
-		this.isScreenData = isScreenData;
-		this.streamName = streamName;
-		this.metaDataId = metaDataId;
-		this.metaDataDao = metaDataDao;
-		this.scope = scope;
-		try {
-			init();
-		} catch (IOException ex) {
-			log.error("##REC:: [BaseStreamWriter] Could not init Thread", ex);
-		}
-		RecordingMetaData metaData = metaDataDao.get(metaDataId);
-		metaData.setStreamStatus(Status.STARTED);
-		metaDataDao.update(metaData);
-
-		open();
-	}
-
-	/**
-	 * Initialization
-	 *
-	 * @throws IOException
-	 *             I/O exception
-	 */
-	private void init() throws IOException {
-		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), OmFileHelper.getName(streamName, EXTENSION_FLV));
-
-		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
-				StreamableFileFactory.class);
-
-		if (!file.isFile()) {
-			// Maybe the (previously existing) file has been deleted
-			file.createNewFile();
-
-		} else if (!file.canWrite()) {
-			throw new IOException("The file is read-only");
-		}
-
-		IStreamableFileService service = factory.getService(file);
-		IStreamableFile flv = service.getStreamableFile(file);
-		writer = flv.getWriter();
-	}
-
-	private void open() {
-		running = true;
-		new Thread(this, "Recording " + file.getName()).start();
-	}
-
-	public void stop() {
-		dostopping = true;
-	}
-
-	@Override
-	public void run() {
-		log.debug("##REC:: stream writer started");
-		long lastPackedRecieved = System.currentTimeMillis() + TIME_TO_WAIT_FOR_FRAME;
-		long counter = 0;
-		while (!stopping) {
-			try {
-				CachedEvent item = queue.poll(100, TimeUnit.MICROSECONDS);
-				if (item != null) {
-					log.trace("##REC:: got packet");
-					lastPackedRecieved = System.currentTimeMillis();
-					if (dostopping) {
-						log.trace("metadatId: {} :: Recording stopped but still packets to write to file!", metaDataId);
-					}
-
-					packetReceived(item);
-				} else if (dostopping || lastPackedRecieved + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
-					log.debug(String.format("##REC:: none packets received for: %s minutes, exiting", (System.currentTimeMillis() - lastPackedRecieved) / MINUTE_MULTIPLIER));
-					stopping = true;
-					closeStream();
-				}
-				if (++counter % 5000 == 0) {
-					log.debug("##REC:: Stream writer is still listening:: " + file.getName());
-				}
-			} catch (InterruptedException e) {
-				log.error("##REC:: [run]", e);
-			}
-		}
-		log.debug("##REC:: stream writer stopped");
-	}
-
-	/**
-	 * Write the actual packet data to the disk and do calculate any needed additional information
-	 *
-	 * @param streampacket
-	 */
-	public abstract void packetReceived(CachedEvent streampacket);
-
-	protected abstract void internalCloseStream();
-	/**
-	 * called when the stream is finished written on the disk
-	 */
-	public void closeStream() {
-		try {
-			writer.close();
-		} catch (Exception err) {
-			log.error("[closeStream, close writer]", err);
-		}
-		internalCloseStream();
-		// Write the complete Bit to the meta data, the converter task will wait for this bit!
-		try {
-			RecordingMetaData metaData = metaDataDao.get(metaDataId);
-			log.debug("##REC:: Stream Status was: {} has been written for: {}", metaData.getStreamStatus(), metaDataId);
-			metaData.setStreamStatus(Status.STOPPED);
-			metaDataDao.update(metaData);
-		} catch (Exception err) {
-			log.error("##REC:: [closeStream, complete Bit]", err);
-		}
-	}
-
-	public void append(CachedEvent streampacket) {
-		if (!running) {
-			throw new IllegalStateException("Append called before the Thread was started!");
-		}
-		try {
-			queue.put(streampacket);
-			log.trace("##REC:: Q put, successful: " + queue.size());
-		} catch (InterruptedException ignored) {
-			log.error("##REC:: [append]", ignored);
-		}
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.io.IStreamableFile;
+import org.red5.io.ITagWriter;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.service.IStreamableFileService;
+import org.red5.server.api.stream.IStreamableFileFactory;
+import org.red5.server.stream.StreamableFileFactory;
+import org.red5.server.util.ScopeUtils;
+import org.slf4j.Logger;
+
+public abstract class BaseStreamWriter implements Runnable {
+	private static final Logger log = Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);
+	private final static int MINUTE_MULTIPLIER = 60 * 1000;
+	public final static int TIME_TO_WAIT_FOR_FRAME = 15 * MINUTE_MULTIPLIER;
+	protected int startTimeStamp = -1;
+	protected long initialDelta = 0;
+
+	// thread is running
+	private boolean running = false;
+	// thread is stopped
+	private boolean stopping = false;
+	// thread will be stopped as soon as the queue is empty
+	private boolean dostopping = false;
+
+	protected ITagWriter writer = null;
+
+	protected Long metaDataId = null;
+
+	protected Date startedSessionTimeDate = null;
+
+	protected File file;
+
+	protected IScope scope;
+
+	protected boolean isScreenData = false;
+
+	protected String streamName = "";
+	protected final RecordingMetaDataDao metaDataDao;
+	private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<>();
+
+	public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData, RecordingMetaDataDao metaDataDao) {
+		startedSessionTimeDate = new Date();
+		this.isScreenData = isScreenData;
+		this.streamName = streamName;
+		this.metaDataId = metaDataId;
+		this.metaDataDao = metaDataDao;
+		this.scope = scope;
+		try {
+			init();
+		} catch (IOException ex) {
+			log.error("##REC:: [BaseStreamWriter] Could not init Thread", ex);
+		}
+		RecordingMetaData metaData = metaDataDao.get(metaDataId);
+		metaData.setStreamStatus(Status.STARTED);
+		metaDataDao.update(metaData);
+
+		open();
+	}
+
+	/**
+	 * Initialization
+	 *
+	 * @throws IOException
+	 *             I/O exception
+	 */
+	private void init() throws IOException {
+		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), OmFileHelper.getName(streamName, EXTENSION_FLV));
+
+		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,
+				StreamableFileFactory.class);
+
+		if (!file.isFile()) {
+			// Maybe the (previously existing) file has been deleted
+			file.createNewFile();
+
+		} else if (!file.canWrite()) {
+			throw new IOException("The file is read-only");
+		}
+
+		IStreamableFileService service = factory.getService(file);
+		IStreamableFile flv = service.getStreamableFile(file);
+		writer = flv.getWriter();
+	}
+
+	private void open() {
+		running = true;
+		new Thread(this, "Recording " + file.getName()).start();
+	}
+
+	public void stop() {
+		dostopping = true;
+	}
+
+	@Override
+	public void run() {
+		log.debug("##REC:: stream writer started");
+		long lastPackedRecieved = System.currentTimeMillis() + TIME_TO_WAIT_FOR_FRAME;
+		long counter = 0;
+		while (!stopping) {
+			try {
+				CachedEvent item = queue.poll(100, TimeUnit.MICROSECONDS);
+				if (item != null) {
+					log.trace("##REC:: got packet");
+					lastPackedRecieved = System.currentTimeMillis();
+					if (dostopping) {
+						log.trace("metadatId: {} :: Recording stopped but still packets to write to file!", metaDataId);
+					}
+
+					packetReceived(item);
+				} else if (dostopping || lastPackedRecieved + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
+					log.debug(String.format("##REC:: none packets received for: %s minutes, exiting", (System.currentTimeMillis() - lastPackedRecieved) / MINUTE_MULTIPLIER));
+					stopping = true;
+					closeStream();
+				}
+				if (++counter % 5000 == 0) {
+					log.debug("##REC:: Stream writer is still listening:: " + file.getName());
+				}
+			} catch (InterruptedException e) {
+				log.error("##REC:: [run]", e);
+			}
+		}
+		log.debug("##REC:: stream writer stopped");
+	}
+
+	/**
+	 * Write the actual packet data to the disk and do calculate any needed additional information
+	 *
+	 * @param streampacket
+	 */
+	public abstract void packetReceived(CachedEvent streampacket);
+
+	protected abstract void internalCloseStream();
+	/**
+	 * called when the stream is finished written on the disk
+	 */
+	public void closeStream() {
+		try {
+			writer.close();
+		} catch (Exception err) {
+			log.error("[closeStream, close writer]", err);
+		}
+		internalCloseStream();
+		// Write the complete Bit to the meta data, the converter task will wait for this bit!
+		try {
+			RecordingMetaData metaData = metaDataDao.get(metaDataId);
+			log.debug("##REC:: Stream Status was: {} has been written for: {}", metaData.getStreamStatus(), metaDataId);
+			metaData.setStreamStatus(Status.STOPPED);
+			metaDataDao.update(metaData);
+		} catch (Exception err) {
+			log.error("##REC:: [closeStream, complete Bit]", err);
+		}
+	}
+
+	public void append(CachedEvent streampacket) {
+		if (!running) {
+			throw new IllegalStateException("Append called before the Thread was started!");
+		}
+		try {
+			queue.put(streampacket);
+			log.trace("##REC:: Q put, successful: " + queue.size());
+		} catch (InterruptedException ignored) {
+			log.error("##REC:: [append]", ignored);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
index 433cf80..4184290 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/CachedEvent.java
@@ -1,76 +1,76 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import java.util.Date;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.red5.server.api.stream.IStreamPacket;
-import org.red5.server.net.rtmp.event.VideoData.FrameType;
-
-public class CachedEvent implements IStreamPacket {
-	private byte dataType;
-	private int timestamp; //this is the timeStamp, showing the time elapsed since the microphone was turned on
-	private IoBuffer data;
-	private Date currentTime; //this is the actually current timeStamp when the packet with audio data did enter the server
-	private FrameType frameType = FrameType.UNKNOWN;
-
-	public Date getCurrentTime() {
-		return currentTime;
-	}
-
-	public void setCurrentTime(Date currentTime) {
-		this.currentTime = currentTime;
-	}
-
-	public void setDataType(byte dataType) {
-		this.dataType = dataType;
-	}
-
-	public void setTimestamp(int timestamp) {
-		this.timestamp = timestamp;
-	}
-
-	public void setData(IoBuffer data) {
-		this.data = data;
-	}
-
-	@Override
-	public byte getDataType() {
-		return dataType;
-	}
-
-	@Override
-	public int getTimestamp() {
-		return timestamp;
-	}
-
-	@Override
-	public IoBuffer getData() {
-		return data;
-	}
-
-	public FrameType getFrameType() {
-		return frameType;
-	}
-
-	public void setFrameType(FrameType frameType) {
-		this.frameType = frameType;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.red5.server.api.stream.IStreamPacket;
+import org.red5.server.net.rtmp.event.VideoData.FrameType;
+
+public class CachedEvent implements IStreamPacket {
+	private byte dataType;
+	private int timestamp; //this is the timeStamp, showing the time elapsed since the microphone was turned on
+	private IoBuffer data;
+	private Date currentTime; //this is the actually current timeStamp when the packet with audio data did enter the server
+	private FrameType frameType = FrameType.UNKNOWN;
+
+	public Date getCurrentTime() {
+		return currentTime;
+	}
+
+	public void setCurrentTime(Date currentTime) {
+		this.currentTime = currentTime;
+	}
+
+	public void setDataType(byte dataType) {
+		this.dataType = dataType;
+	}
+
+	public void setTimestamp(int timestamp) {
+		this.timestamp = timestamp;
+	}
+
+	public void setData(IoBuffer data) {
+		this.data = data;
+	}
+
+	@Override
+	public byte getDataType() {
+		return dataType;
+	}
+
+	@Override
+	public int getTimestamp() {
+		return timestamp;
+	}
+
+	@Override
+	public IoBuffer getData() {
+		return data;
+	}
+
+	public FrameType getFrameType() {
+		return frameType;
+	}
+
+	public void setFrameType(FrameType frameType) {
+		this.frameType = frameType;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
index a7391a6..736fea6 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamAudioWriter.java
@@ -1,228 +1,228 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.red5.io.IoConstants.TYPE_AUDIO;
-import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
-
-import java.util.Date;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
-import org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData;
-import org.apache.openmeetings.db.entity.record.RecordingMetaDelta;
-import org.red5.io.ITag;
-import org.red5.io.flv.impl.Tag;
-import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.scope.IScope;
-import org.slf4j.Logger;
-
-public class StreamAudioWriter extends BaseStreamWriter {
-	private static final Logger log = Red5LoggerFactory.getLogger(StreamAudioWriter.class, webAppRootKey);
-
-	private int duration = 0;
-
-	private Integer lastTimeStamp = -1;
-	private Date lastcurrentTime = null;
-
-	private int lastStreamPacketTimeStamp = -1;
-
-	private long byteCount = 0;
-
-	// Autowire is not possible
-	protected final RecordingMetaDeltaDao metaDeltaDao;
-
-	private boolean isInterview = false;
-
-	public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
-			boolean isInterview, RecordingMetaDataDao metaDataDao, RecordingMetaDeltaDao metaDeltaDao) {
-		super(streamName, scope, metaDataId, isScreenData, metaDataDao);
-
-		this.metaDeltaDao = metaDeltaDao;
-		this.isInterview = isInterview;
-	}
-
-	@Override
-	public void packetReceived(CachedEvent streampacket) {
-		try {
-			// We only care about audio at this moment
-			if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {
-				if (streampacket.getTimestamp() <= 0) {
-					log.warn("##REC:: Negative TimeStamp");
-					return;
-				}
-				// we should not skip audio data in case it is Audio only interview
-				if (isInterview && isScreenData && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
-					//skip until keyframe
-					log.trace("##REC:: no KEYFRAME, skipping");
-					return;
-				}
-				IoBuffer data = streampacket.getData().asReadOnlyBuffer();
-				if (data.limit() == 0) {
-					log.trace("##REC:: data.limit() == 0 ");
-					return;
-				}
-
-				byteCount += data.limit();
-
-				lastcurrentTime = streampacket.getCurrentTime();
-				int timeStamp = streampacket.getTimestamp();
-				Date virtualTime = streampacket.getCurrentTime();
-
-				if (startTimeStamp == -1) {
-					// Calculate the delta between the initial start and the first audio-packet data
-
-					initialDelta = virtualTime.getTime() - startedSessionTimeDate.getTime();
-
-					RecordingMetaDelta metaDelta = new RecordingMetaDelta();
-
-					metaDelta.setDeltaTime(initialDelta);
-					metaDelta.setMetaDataId(metaDataId);
-					metaDelta.setTimeStamp(0);
-					metaDelta.setDebugStatus("INIT AUDIO");
-					metaDelta.setStartPadding(true);
-					metaDelta.setEndPadding(false);
-					metaDelta.setDataLengthPacket(data.limit());
-					metaDelta.setReceivedAudioDataLength(byteCount);
-					metaDelta.setStartTime(startedSessionTimeDate);
-					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
-
-					Long deltaTimeStamp = virtualTime.getTime() - startedSessionTimeDate.getTime();
-
-					metaDelta.setDuration(0);
-
-					Long missingTime = deltaTimeStamp - 0;
-
-					metaDelta.setMissingTime(missingTime);
-
-					metaDelta.setCurrentTime(virtualTime);
-					metaDelta.setDeltaTimeStamp(deltaTimeStamp);
-					metaDelta.setStartTimeStamp(startTimeStamp);
-
-					metaDeltaDao.add(metaDelta);
-
-					// That will be not bigger then long value
-					startTimeStamp = streampacket.getTimestamp();
-				
-					RecordingMetaData metaData = metaDataDao.get(metaDataId);
-					metaData.setRecordStart(virtualTime);
-					metaDataDao.update(metaData);
-				}
-
-				lastStreamPacketTimeStamp = streampacket.getTimestamp();
-
-				timeStamp -= startTimeStamp;
-
-				// Offset at the beginning is calculated above
-				long deltaTime = lastTimeStamp == -1 ? 0 : timeStamp - lastTimeStamp;
-
-				Long preLastTimeStamp = Long.parseLong(lastTimeStamp.toString());
-
-				lastTimeStamp = timeStamp;
-
-				if (deltaTime > 75) {
-					RecordingMetaDelta metaDelta = new RecordingMetaDelta();
-
-					metaDelta.setDeltaTime(deltaTime);
-					metaDelta.setMetaDataId(metaDataId);
-					metaDelta.setTimeStamp(timeStamp);
-					metaDelta.setDebugStatus("RUN AUDIO");
-					metaDelta.setStartPadding(false);
-					metaDelta.setLastTimeStamp(preLastTimeStamp);
-					metaDelta.setEndPadding(false);
-					metaDelta.setDataLengthPacket(data.limit());
-					metaDelta.setReceivedAudioDataLength(byteCount);
-					metaDelta.setStartTime(startedSessionTimeDate);
-					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
-
-					Date current_date = new Date();
-					Long deltaTimeStamp = current_date.getTime() - startedSessionTimeDate.getTime();
-
-					duration = Math.max(duration, timeStamp + writer.getOffset());
-					metaDelta.setDuration(duration);
-
-					Long missingTime = deltaTimeStamp - timeStamp;
-
-					metaDelta.setMissingTime(missingTime);
-
-					metaDelta.setCurrentTime(current_date);
-					metaDelta.setDeltaTimeStamp(deltaTimeStamp);
-					metaDelta.setStartTimeStamp(startTimeStamp);
-
-					metaDeltaDao.add(metaDelta);
-				}
-
-				log.trace("##REC:: timeStamp :: " + timeStamp);
-				ITag tag = new Tag();
-				tag.setDataType(streampacket.getDataType());
-
-				// log.debug("data.limit() :: "+data.limit());
-				tag.setBodySize(data.limit());
-				tag.setTimestamp(timeStamp);
-				tag.setBody(data);
-
-				writer.writeTag(tag);
-
-			}
-		} catch (Exception e) {
-			log.error("##REC:: [packetReceived]", e);
-		}
-	}
-
-	@Override
-	protected void internalCloseStream() {
-		try {
-			// We do not add any End Padding or count the gaps for the
-			// Screen Data, cause there is no!
-
-			Date virtualTime = lastcurrentTime;
-			log.debug("##REC:: virtualTime: " + virtualTime);
-			log.debug("##REC:: startedSessionTimeDate: " + startedSessionTimeDate);
-
-			long deltaRecordingTime = virtualTime == null ? 0 : virtualTime.getTime() - startedSessionTimeDate.getTime();
-
-			log.debug("##REC:: lastTimeStamp :closeStream: " + lastTimeStamp);
-			log.debug("##REC:: lastStreamPacketTimeStamp :closeStream: " + lastStreamPacketTimeStamp);
-			log.debug("##REC:: deltaRecordingTime :closeStream: " + deltaRecordingTime);
-
-			long deltaTimePaddingEnd = deltaRecordingTime - lastTimeStamp - initialDelta;
-
-			log.debug("##REC:: deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
-
-			RecordingMetaDelta metaDelta = new RecordingMetaDelta();
-
-			metaDelta.setDeltaTime(deltaTimePaddingEnd);
-			metaDelta.setMetaDataId(metaDataId);
-			metaDelta.setTimeStamp(lastTimeStamp);
-			metaDelta.setDebugStatus("END AUDIO");
-			metaDelta.setStartPadding(false);
-			metaDelta.setEndPadding(true);
-			metaDelta.setDataLengthPacket(null);
-			metaDelta.setReceivedAudioDataLength(byteCount);
-			metaDelta.setStartTime(startedSessionTimeDate);
-			metaDelta.setCurrentTime(new Date());
-
-			metaDeltaDao.add(metaDelta);
-		} catch (Exception err) {
-			log.error("##REC:: [internalCloseStream]", err);
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.io.IoConstants.TYPE_AUDIO;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData;
+import org.apache.openmeetings.db.entity.record.RecordingMetaDelta;
+import org.red5.io.ITag;
+import org.red5.io.flv.impl.Tag;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+
+public class StreamAudioWriter extends BaseStreamWriter {
+	private static final Logger log = Red5LoggerFactory.getLogger(StreamAudioWriter.class, webAppRootKey);
+
+	private int duration = 0;
+
+	private Integer lastTimeStamp = -1;
+	private Date lastcurrentTime = null;
+
+	private int lastStreamPacketTimeStamp = -1;
+
+	private long byteCount = 0;
+
+	// Autowire is not possible
+	protected final RecordingMetaDeltaDao metaDeltaDao;
+
+	private boolean isInterview = false;
+
+	public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
+			boolean isInterview, RecordingMetaDataDao metaDataDao, RecordingMetaDeltaDao metaDeltaDao) {
+		super(streamName, scope, metaDataId, isScreenData, metaDataDao);
+
+		this.metaDeltaDao = metaDeltaDao;
+		this.isInterview = isInterview;
+	}
+
+	@Override
+	public void packetReceived(CachedEvent streampacket) {
+		try {
+			// We only care about audio at this moment
+			if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {
+				if (streampacket.getTimestamp() <= 0) {
+					log.warn("##REC:: Negative TimeStamp");
+					return;
+				}
+				// we should not skip audio data in case it is Audio only interview
+				if (isInterview && isScreenData && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
+					//skip until keyframe
+					log.trace("##REC:: no KEYFRAME, skipping");
+					return;
+				}
+				IoBuffer data = streampacket.getData().asReadOnlyBuffer();
+				if (data.limit() == 0) {
+					log.trace("##REC:: data.limit() == 0 ");
+					return;
+				}
+
+				byteCount += data.limit();
+
+				lastcurrentTime = streampacket.getCurrentTime();
+				int timeStamp = streampacket.getTimestamp();
+				Date virtualTime = streampacket.getCurrentTime();
+
+				if (startTimeStamp == -1) {
+					// Calculate the delta between the initial start and the first audio-packet data
+
+					initialDelta = virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+					RecordingMetaDelta metaDelta = new RecordingMetaDelta();
+
+					metaDelta.setDeltaTime(initialDelta);
+					metaDelta.setMetaDataId(metaDataId);
+					metaDelta.setTimeStamp(0);
+					metaDelta.setDebugStatus("INIT AUDIO");
+					metaDelta.setStartPadding(true);
+					metaDelta.setEndPadding(false);
+					metaDelta.setDataLengthPacket(data.limit());
+					metaDelta.setReceivedAudioDataLength(byteCount);
+					metaDelta.setStartTime(startedSessionTimeDate);
+					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+
+					Long deltaTimeStamp = virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+					metaDelta.setDuration(0);
+
+					Long missingTime = deltaTimeStamp - 0;
+
+					metaDelta.setMissingTime(missingTime);
+
+					metaDelta.setCurrentTime(virtualTime);
+					metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+					metaDelta.setStartTimeStamp(startTimeStamp);
+
+					metaDeltaDao.add(metaDelta);
+
+					// That will be not bigger then long value
+					startTimeStamp = streampacket.getTimestamp();
+				
+					RecordingMetaData metaData = metaDataDao.get(metaDataId);
+					metaData.setRecordStart(virtualTime);
+					metaDataDao.update(metaData);
+				}
+
+				lastStreamPacketTimeStamp = streampacket.getTimestamp();
+
+				timeStamp -= startTimeStamp;
+
+				// Offset at the beginning is calculated above
+				long deltaTime = lastTimeStamp == -1 ? 0 : timeStamp - lastTimeStamp;
+
+				Long preLastTimeStamp = Long.parseLong(lastTimeStamp.toString());
+
+				lastTimeStamp = timeStamp;
+
+				if (deltaTime > 75) {
+					RecordingMetaDelta metaDelta = new RecordingMetaDelta();
+
+					metaDelta.setDeltaTime(deltaTime);
+					metaDelta.setMetaDataId(metaDataId);
+					metaDelta.setTimeStamp(timeStamp);
+					metaDelta.setDebugStatus("RUN AUDIO");
+					metaDelta.setStartPadding(false);
+					metaDelta.setLastTimeStamp(preLastTimeStamp);
+					metaDelta.setEndPadding(false);
+					metaDelta.setDataLengthPacket(data.limit());
+					metaDelta.setReceivedAudioDataLength(byteCount);
+					metaDelta.setStartTime(startedSessionTimeDate);
+					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());
+
+					Date current_date = new Date();
+					Long deltaTimeStamp = current_date.getTime() - startedSessionTimeDate.getTime();
+
+					duration = Math.max(duration, timeStamp + writer.getOffset());
+					metaDelta.setDuration(duration);
+
+					Long missingTime = deltaTimeStamp - timeStamp;
+
+					metaDelta.setMissingTime(missingTime);
+
+					metaDelta.setCurrentTime(current_date);
+					metaDelta.setDeltaTimeStamp(deltaTimeStamp);
+					metaDelta.setStartTimeStamp(startTimeStamp);
+
+					metaDeltaDao.add(metaDelta);
+				}
+
+				log.trace("##REC:: timeStamp :: " + timeStamp);
+				ITag tag = new Tag();
+				tag.setDataType(streampacket.getDataType());
+
+				// log.debug("data.limit() :: "+data.limit());
+				tag.setBodySize(data.limit());
+				tag.setTimestamp(timeStamp);
+				tag.setBody(data);
+
+				writer.writeTag(tag);
+
+			}
+		} catch (Exception e) {
+			log.error("##REC:: [packetReceived]", e);
+		}
+	}
+
+	@Override
+	protected void internalCloseStream() {
+		try {
+			// We do not add any End Padding or count the gaps for the
+			// Screen Data, cause there is no!
+
+			Date virtualTime = lastcurrentTime;
+			log.debug("##REC:: virtualTime: " + virtualTime);
+			log.debug("##REC:: startedSessionTimeDate: " + startedSessionTimeDate);
+
+			long deltaRecordingTime = virtualTime == null ? 0 : virtualTime.getTime() - startedSessionTimeDate.getTime();
+
+			log.debug("##REC:: lastTimeStamp :closeStream: " + lastTimeStamp);
+			log.debug("##REC:: lastStreamPacketTimeStamp :closeStream: " + lastStreamPacketTimeStamp);
+			log.debug("##REC:: deltaRecordingTime :closeStream: " + deltaRecordingTime);
+
+			long deltaTimePaddingEnd = deltaRecordingTime - lastTimeStamp - initialDelta;
+
+			log.debug("##REC:: deltaTimePaddingEnd :: " + deltaTimePaddingEnd);
+
+			RecordingMetaDelta metaDelta = new RecordingMetaDelta();
+
+			metaDelta.setDeltaTime(deltaTimePaddingEnd);
+			metaDelta.setMetaDataId(metaDataId);
+			metaDelta.setTimeStamp(lastTimeStamp);
+			metaDelta.setDebugStatus("END AUDIO");
+			metaDelta.setStartPadding(false);
+			metaDelta.setEndPadding(true);
+			metaDelta.setDataLengthPacket(null);
+			metaDelta.setReceivedAudioDataLength(byteCount);
+			metaDelta.setStartTime(startedSessionTimeDate);
+			metaDelta.setCurrentTime(new Date());
+
+			metaDeltaDao.add(metaDelta);
+		} catch (Exception err) {
+			log.error("##REC:: [internalCloseStream]", err);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
index 169379d..8596042 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/listener/async/StreamVideoWriter.java
@@ -1,98 +1,98 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.data.record.listener.async;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
-
-import java.util.Date;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
-import org.apache.openmeetings.db.entity.record.RecordingMetaData;
-import org.red5.io.ITag;
-import org.red5.io.flv.impl.Tag;
-import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.scope.IScope;
-import org.slf4j.Logger;
-
-public class StreamVideoWriter extends BaseStreamWriter {
-	private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);
-	private Date startedSessionScreenTimeDate = null;
-
-	public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
-			RecordingMetaDataDao metaDataDao) {
-
-		super(streamName, scope, metaDataId, isScreenData, metaDataDao);
-	}
-
-	@Override
-	public void packetReceived(CachedEvent streampacket) {
-		try {
-			int timeStamp = streampacket.getTimestamp();
-			log.trace("incoming timeStamp :: " + timeStamp);
-			if (startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
-				//skip until keyframe
-				log.trace("no KEYFRAME, skipping ::" + streampacket.getFrameType());
-				return;
-			}
-			if (timeStamp <= 0) {
-				log.warn("Negative TimeStamp");
-				return;
-			}
-			IoBuffer data = streampacket.getData().asReadOnlyBuffer();
-			if (data.limit() == 0) {
-				log.trace("Data.limit() == 0");
-				return;
-			}
-			Date virtualTime = streampacket.getCurrentTime();
-
-			if (startedSessionScreenTimeDate == null) {
-				startedSessionScreenTimeDate = virtualTime;
-
-				RecordingMetaData metaData = metaDataDao.get(metaDataId);
-				metaData.setRecordStart(virtualTime);
-				metaDataDao.update(metaData);
-			}
-
-			if (startTimeStamp == -1) {
-				// That will be not bigger then long value
-				startTimeStamp = timeStamp;
-			}
-
-			timeStamp -= startTimeStamp;
-
-			log.trace("timeStamp :: " + timeStamp);
-			ITag tag = new Tag();
-			tag.setDataType(streampacket.getDataType());
-
-			tag.setBodySize(data.limit());
-			tag.setTimestamp(timeStamp);
-			tag.setBody(data);
-
-			writer.writeTag(tag);
-		} catch (Exception e) {
-			log.error("[packetReceived]", e);
-		}
-	}
-
-	@Override
-	protected void internalCloseStream() {
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.data.record.listener.async;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;
+
+import java.util.Date;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.RecordingMetaData;
+import org.red5.io.ITag;
+import org.red5.io.flv.impl.Tag;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+
+public class StreamVideoWriter extends BaseStreamWriter {
+	private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);
+	private Date startedSessionScreenTimeDate = null;
+
+	public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,
+			RecordingMetaDataDao metaDataDao) {
+
+		super(streamName, scope, metaDataId, isScreenData, metaDataDao);
+	}
+
+	@Override
+	public void packetReceived(CachedEvent streampacket) {
+		try {
+			int timeStamp = streampacket.getTimestamp();
+			log.trace("incoming timeStamp :: " + timeStamp);
+			if (startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {
+				//skip until keyframe
+				log.trace("no KEYFRAME, skipping ::" + streampacket.getFrameType());
+				return;
+			}
+			if (timeStamp <= 0) {
+				log.warn("Negative TimeStamp");
+				return;
+			}
+			IoBuffer data = streampacket.getData().asReadOnlyBuffer();
+			if (data.limit() == 0) {
+				log.trace("Data.limit() == 0");
+				return;
+			}
+			Date virtualTime = streampacket.getCurrentTime();
+
+			if (startedSessionScreenTimeDate == null) {
+				startedSessionScreenTimeDate = virtualTime;
+
+				RecordingMetaData metaData = metaDataDao.get(metaDataId);
+				metaData.setRecordStart(virtualTime);
+				metaDataDao.update(metaData);
+			}
+
+			if (startTimeStamp == -1) {
+				// That will be not bigger then long value
+				startTimeStamp = timeStamp;
+			}
+
+			timeStamp -= startTimeStamp;
+
+			log.trace("timeStamp :: " + timeStamp);
+			ITag tag = new Tag();
+			tag.setDataType(streampacket.getDataType());
+
+			tag.setBodySize(data.limit());
+			tag.setTimestamp(timeStamp);
+			tag.setBody(data);
+
+			writer.writeTag(tag);
+		} catch (Exception e) {
+			log.error("[packetReceived]", e);
+		}
+	}
+
+	@Override
+	protected void internalCloseStream() {
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
index 89d62b4..bf17d61 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
@@ -1,118 +1,118 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.mail;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.smslib.Message.MessageEncodings;
-import org.smslib.OutboundMessage;
-import org.smslib.Service;
-import org.smslib.http.BulkSmsHTTPGateway;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.task.TaskExecutor;
-
-/**
- * 
- * @author iarkh
- * 
- */
-
-public class SMSHandler {
-
-	private static final Logger log = Red5LoggerFactory.getLogger(
-			SMSHandler.class, OpenmeetingsVariables.webAppRootKey);
-
-	@Autowired
-	protected ConfigurationDao configurationDao;
-	@Autowired
-	protected TaskExecutor taskExecutor;
-
-	private BulkSmsHTTPGateway gateway = null;
-	
-	private boolean checkBalance() throws Exception {
-		if (gateway == null) {
-			String smsProvider = configurationDao.getConfValue("sms.provider", String.class, null);
-			String smsUsername = configurationDao.getConfValue("sms.username", String.class, null);
-			String smsUserpass = configurationDao.getConfValue("sms.userpass", String.class, null);
-
-			if (smsProvider == null || smsProvider.length() == 0 ||
-					smsUsername == null || smsUsername.length() == 0) {
-				log.error("SMS Provider is not configured properly!");
-				return false;
-			}
-			gateway = new BulkSmsHTTPGateway(smsProvider, smsUsername, smsUserpass);
-			gateway.setOutbound(true);
-			Service.getInstance().addGateway(gateway);
-			Service.getInstance().startService();
-		}
-		return gateway.queryBalance() >= 1; 
-	}
-	
-	public boolean sendSMS(String phone, String subj, long languageId) {
-		try {
-			taskExecutor.execute(new SMSSenderTask(phone, subj, languageId));
-			return true;
-		} catch (Exception ex) {
-			log.error("sendSMS", ex);
-			return false;
-		}
-	}
-	
-	protected class SMSSenderTask implements Runnable {
-		private final String phone;
-		private final String subject;
-		private long languageId;
-
-		public SMSSenderTask(String phone, String subject, long languageId) {
-			this.phone = phone;
-			this.subject = subject;
-			this.languageId = languageId;
-		}
-
-		@Override
-		public void run() {
-			this.send();
-		}
-
-		/**
-		 * Sending an SMS with the given values.
-		 * @return <code>true</code> if sms was sent successfully, <code>false</code> otherwise.
-		 */
-		public boolean send() {
-			try {
-				log.debug("SMS sending to: " + phone + ", subject is: " + subject);
-				if (checkBalance()) {
-					OutboundMessage msg = new OutboundMessage(phone, subject);
-					if (languageId != 1) {
-						msg.setEncoding(MessageEncodings.ENCUCS2);
-					}
-					return Service.getInstance().sendMessage(msg);
-				} else {
-					log.error("Error: insufficient funds on SMS provider account!");
-					return false; 
-				}
-			} catch (Exception ex) {
-				log.error("Error sending sms: ", ex);
-				return false;
-			} 
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.mail;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.smslib.Message.MessageEncodings;
+import org.smslib.OutboundMessage;
+import org.smslib.Service;
+import org.smslib.http.BulkSmsHTTPGateway;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+/**
+ * 
+ * @author iarkh
+ * 
+ */
+
+public class SMSHandler {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			SMSHandler.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	protected ConfigurationDao configurationDao;
+	@Autowired
+	protected TaskExecutor taskExecutor;
+
+	private BulkSmsHTTPGateway gateway = null;
+	
+	private boolean checkBalance() throws Exception {
+		if (gateway == null) {
+			String smsProvider = configurationDao.getConfValue("sms.provider", String.class, null);
+			String smsUsername = configurationDao.getConfValue("sms.username", String.class, null);
+			String smsUserpass = configurationDao.getConfValue("sms.userpass", String.class, null);
+
+			if (smsProvider == null || smsProvider.length() == 0 ||
+					smsUsername == null || smsUsername.length() == 0) {
+				log.error("SMS Provider is not configured properly!");
+				return false;
+			}
+			gateway = new BulkSmsHTTPGateway(smsProvider, smsUsername, smsUserpass);
+			gateway.setOutbound(true);
+			Service.getInstance().addGateway(gateway);
+			Service.getInstance().startService();
+		}
+		return gateway.queryBalance() >= 1; 
+	}
+	
+	public boolean sendSMS(String phone, String subj, long languageId) {
+		try {
+			taskExecutor.execute(new SMSSenderTask(phone, subj, languageId));
+			return true;
+		} catch (Exception ex) {
+			log.error("sendSMS", ex);
+			return false;
+		}
+	}
+	
+	protected class SMSSenderTask implements Runnable {
+		private final String phone;
+		private final String subject;
+		private long languageId;
+
+		public SMSSenderTask(String phone, String subject, long languageId) {
+			this.phone = phone;
+			this.subject = subject;
+			this.languageId = languageId;
+		}
+
+		@Override
+		public void run() {
+			this.send();
+		}
+
+		/**
+		 * Sending an SMS with the given values.
+		 * @return <code>true</code> if sms was sent successfully, <code>false</code> otherwise.
+		 */
+		public boolean send() {
+			try {
+				log.debug("SMS sending to: " + phone + ", subject is: " + subject);
+				if (checkBalance()) {
+					OutboundMessage msg = new OutboundMessage(phone, subject);
+					if (languageId != 1) {
+						msg.setEncoding(MessageEncodings.ENCUCS2);
+					}
+					return Service.getInstance().sendMessage(msg);
+				} else {
+					log.error("Error: insufficient funds on SMS provider account!");
+					return false; 
+				}
+			} catch (Exception ex) {
+				log.error("Error sending sms: ", ex);
+				return false;
+			} 
+		}
+	}
+}


[25/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
index cc3121f..6a51b5b 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
@@ -1,365 +1,365 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.session;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.UUID;
-
-import org.apache.openmeetings.core.session.store.IClientPersistenceStore;
-import org.apache.openmeetings.db.dao.server.ISessionManager;
-import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.wicket.util.string.Strings;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Handle {@link Client} objects.
- *
- * Use a kind of decorator pattern to inject the {@link Server} into every call.
- *
- * @author sebawagner
- *
- */
-public class SessionManager implements ISessionManager {
-	protected static final Logger log = Red5LoggerFactory.getLogger(SessionManager.class, webAppRootKey);
-
-	@Autowired
-	private ServerUtil serverUtil;
-
-	/**
-	 * Injected via Spring, needs a getter/setter because it can be configured
-	 * Autowired will not suit here as there are multiple implementations of the
-	 * {@link IClientPersistenceStore}
-	 */
-	private IClientPersistenceStore cache;
-
-	public IClientPersistenceStore getCache() {
-		return cache;
-	}
-
-	public void setCache(IClientPersistenceStore cache) {
-		this.cache = cache;
-	}
-
-	@Override
-	public void clearCache() {
-		cache.clear();
-	}
-
-	@Override
-	public Client add(Client c, Server server) {
-		if (c == null) {
-			return null;
-		}
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		c.setConnectedSince(new Date());
-		c.setRoomEnter(new Date());
-		if (Strings.isEmpty(c.getPublicSID())) {
-			c.setPublicSID(UUID.randomUUID().toString());
-		}
-		c.setServer(server);
-
-		if (cache.containsKey(null, c.getStreamid())) {
-			log.error("Tried to add an existing Client " + c.getStreamid());
-			return null;
-		}
-
-		cache.put(c.getStreamid(), c);
-		return c;
-	}
-
-	@Override
-	public Client addClientListItem(String streamId, String scopeName,
-			int remotePort, String remoteAddress, String swfUrl, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-
-			// Store the Connection into a bean and add it to the HashMap
-			Client rcm = new Client();
-			rcm.setConnectedSince(new Date());
-			rcm.setStreamid(streamId);
-			rcm.setScope(scopeName);
-			rcm.setPublicSID(UUID.randomUUID().toString());
-			rcm.setServer(server);
-			rcm.setUserport(remotePort);
-			rcm.setUserip(remoteAddress);
-			rcm.setSwfurl(swfUrl);
-			rcm.setIsMod(false);
-			rcm.setCanDraw(false);
-
-			if (cache.containsKey(null, streamId)) {
-				log.error("Tried to add an existing Client " + streamId);
-				return null;
-			}
-
-			cache.put(rcm.getStreamid(), rcm);
-
-			return rcm;
-		} catch (Exception err) {
-			log.error("[addClientListItem]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public Collection<Client> getClients() {
-		return cache.getClients();
-	}
-
-	@Override
-	public Collection<Client> getClientsWithServer() {
-		return cache.getClientsWithServer();
-	}
-
-	@Override
-	public Client getClientByStreamId(String streamId, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			if (!cache.containsKey(server, streamId)) {
-				log.debug("Tried to get a non existing Client " + streamId + " server " + server);
-				return null;
-			}
-			return cache.get(server, streamId);
-		} catch (Exception err) {
-			log.error("[getClientByStreamId]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public Client getClientByPublicSID(String publicSID, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			List<Client> list = cache.getClientsByPublicSID(server, publicSID);
-			return list == null || list.isEmpty() ? null : list.get(0);
-		} catch (Exception err) {
-			log.error("[getClientByPublicSID]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID) {
-		try {
-			for (Entry<Long,List<Client>> entry : cache.getClientsByPublicSID(publicSID).entrySet()) {
-				for (Client rcl : entry.getValue()) {
-					return new ClientSessionInfo(rcl, entry.getKey());
-				}
-			}
-		} catch (Exception err) {
-			log.error("[getClientByPublicSIDAnyServer]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public Client getClientByUserId(Long userId) {
-		try {
-			for (Client rcl : cache.getClientsByUserId(null, userId)) {
-				if (rcl.isScreenClient()) {
-					continue;
-				}
-
-				return rcl;
-			}
-		} catch (Exception err) {
-			log.error("[getClientByUserId]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public boolean updateAVClientByStreamId(String streamId, Client rcm, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			// get the corresponding user session object and update the settings
-			Client rclUsual = getClientByPublicSID(rcm.getPublicSID(), server);
-			if (rclUsual != null) {
-				rclUsual.setBroadCastID(rcm.getBroadCastID());
-				rclUsual.setAvsettings(rcm.getAvsettings());
-				rclUsual.setVHeight(rcm.getVHeight());
-				rclUsual.setVWidth(rcm.getVWidth());
-				rclUsual.setVX(rcm.getVX());
-				rclUsual.setVY(rcm.getVY());
-				Client rclSaved = cache.get(server, rclUsual.getStreamid());
-				if (rclSaved != null) {
-					cache.put(rclUsual.getStreamid(), rclUsual);
-				} else {
-					log.debug("Tried to update a non existing Client " + rclUsual.getStreamid());
-				}
-			}
-
-			updateClientByStreamId(streamId, rcm, false, server);
-			return true;
-		} catch (Exception err) {
-			log.error("[updateAVClientByStreamId]", err);
-		}
-		return false;
-	}
-
-	@Override
-	public boolean updateClientByStreamId(String streamId, Client rcm, boolean updateRoomCount, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			Client rclSaved = cache.get(server, streamId);
-
-			if (rclSaved != null) {
-				cache.put(streamId, rcm);
-				return true;
-			} else {
-				log.debug("Tried to update a non existing Client " + streamId);
-			}
-		} catch (Exception err) {
-			log.error("[updateClientByStreamId]", err);
-		}
-		return false;
-	}
-
-	@Override
-	public boolean removeClient(String streamId, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			if (cache.containsKey(server,streamId)) {
-				cache.remove(server,streamId);
-				return true;
-			} else {
-				log.debug("Tried to remove a non existing Client " + streamId);
-			}
-		} catch (Exception err) {
-			log.error("[removeClient]", err);
-		}
-		return false;
-	}
-
-	@Override
-	public List<Client> getClientListByRoom(Long roomId) {
-		List<Client> roomClientList = new ArrayList<>();
-		try {
-			for (Client rcl : cache.getClientsByRoomId(roomId)) {
-				if (rcl.isScreenClient()) {
-					continue;
-				}
-
-				// Only parse really those users out that are really a full session object
-				// and no pseudo session object like the audio/video or screen
-				// sharing connection
-				roomClientList.add(rcl);
-			}
-		} catch (Exception err) {
-			log.error("[getClientListByRoom]", err);
-		}
-		return roomClientList;
-	}
-
-	@Override
-	public Collection<Client> getClientListByRoomAll(Long roomId) {
-		try {
-			return cache.getClientsByRoomId(roomId);
-		} catch (Exception err) {
-			log.error("[getClientListByRoomAll]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public List<Client> getCurrentModeratorByRoom(Long roomId) {
-		List<Client> rclList = new LinkedList<>();
-		List<Client> currentClients = this.getClientListByRoom(roomId);
-		for (Client rcl : currentClients) {
-			if (rcl.getIsMod()) {
-				rclList.add(rcl);
-			}
-		}
-		return rclList;
-	}
-
-	@Override
-	public SearchResult<Client> getListByStartAndMax(int start, int max, String orderby, boolean asc) {
-		SearchResult<Client> sResult = new SearchResult<>();
-		sResult.setObjectName(Client.class.getName());
-		sResult.setRecords(Long.valueOf(cache.size()));
-		sResult.setResult(cache.getClientsWithServer());
-		return sResult;
-	}
-
-	@Override
-	public long getRecordingCount(long roomId) {
-		List<Client> currentClients = this.getClientListByRoom(roomId);
-		int numberOfRecordingUsers = 0;
-		for (Client rcl : currentClients) {
-			if (rcl.isStartRecording()) {
-				numberOfRecordingUsers++;
-			}
-		}
-		return numberOfRecordingUsers;
-	}
-
-	@Override
-	public long getPublishingCount(long roomId) {
-		List<Client> currentClients = this.getClientListByRoom(roomId);
-		int numberOfPublishingUsers = 0;
-		for (Client rcl : currentClients) {
-			if (rcl.isStreamPublishStarted()) {
-				numberOfPublishingUsers++;
-			}
-		}
-		return numberOfPublishingUsers;
-	}
-
-	@Override
-	public List<Long> getActiveRoomIdsByServer(Server server) {
-		return cache.getRoomsIdsByServer(server == null ? serverUtil.getCurrentServer() : server);
-	}
-
-	@Override
-	public String getSessionStatistics() {
-		return cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
-	}
-
-	@Override
-	public void sessionStart() {
-		// TODO Auto-generated method stub
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.session;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.UUID;
+
+import org.apache.openmeetings.core.session.store.IClientPersistenceStore;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Handle {@link Client} objects.
+ *
+ * Use a kind of decorator pattern to inject the {@link Server} into every call.
+ *
+ * @author sebawagner
+ *
+ */
+public class SessionManager implements ISessionManager {
+	protected static final Logger log = Red5LoggerFactory.getLogger(SessionManager.class, webAppRootKey);
+
+	@Autowired
+	private ServerUtil serverUtil;
+
+	/**
+	 * Injected via Spring, needs a getter/setter because it can be configured
+	 * Autowired will not suit here as there are multiple implementations of the
+	 * {@link IClientPersistenceStore}
+	 */
+	private IClientPersistenceStore cache;
+
+	public IClientPersistenceStore getCache() {
+		return cache;
+	}
+
+	public void setCache(IClientPersistenceStore cache) {
+		this.cache = cache;
+	}
+
+	@Override
+	public void clearCache() {
+		cache.clear();
+	}
+
+	@Override
+	public Client add(Client c, Server server) {
+		if (c == null) {
+			return null;
+		}
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		c.setConnectedSince(new Date());
+		c.setRoomEnter(new Date());
+		if (Strings.isEmpty(c.getPublicSID())) {
+			c.setPublicSID(UUID.randomUUID().toString());
+		}
+		c.setServer(server);
+
+		if (cache.containsKey(null, c.getStreamid())) {
+			log.error("Tried to add an existing Client " + c.getStreamid());
+			return null;
+		}
+
+		cache.put(c.getStreamid(), c);
+		return c;
+	}
+
+	@Override
+	public Client addClientListItem(String streamId, String scopeName,
+			int remotePort, String remoteAddress, String swfUrl, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+
+			// Store the Connection into a bean and add it to the HashMap
+			Client rcm = new Client();
+			rcm.setConnectedSince(new Date());
+			rcm.setStreamid(streamId);
+			rcm.setScope(scopeName);
+			rcm.setPublicSID(UUID.randomUUID().toString());
+			rcm.setServer(server);
+			rcm.setUserport(remotePort);
+			rcm.setUserip(remoteAddress);
+			rcm.setSwfurl(swfUrl);
+			rcm.setIsMod(false);
+			rcm.setCanDraw(false);
+
+			if (cache.containsKey(null, streamId)) {
+				log.error("Tried to add an existing Client " + streamId);
+				return null;
+			}
+
+			cache.put(rcm.getStreamid(), rcm);
+
+			return rcm;
+		} catch (Exception err) {
+			log.error("[addClientListItem]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public Collection<Client> getClients() {
+		return cache.getClients();
+	}
+
+	@Override
+	public Collection<Client> getClientsWithServer() {
+		return cache.getClientsWithServer();
+	}
+
+	@Override
+	public Client getClientByStreamId(String streamId, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			if (!cache.containsKey(server, streamId)) {
+				log.debug("Tried to get a non existing Client " + streamId + " server " + server);
+				return null;
+			}
+			return cache.get(server, streamId);
+		} catch (Exception err) {
+			log.error("[getClientByStreamId]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public Client getClientByPublicSID(String publicSID, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			List<Client> list = cache.getClientsByPublicSID(server, publicSID);
+			return list == null || list.isEmpty() ? null : list.get(0);
+		} catch (Exception err) {
+			log.error("[getClientByPublicSID]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID) {
+		try {
+			for (Entry<Long,List<Client>> entry : cache.getClientsByPublicSID(publicSID).entrySet()) {
+				for (Client rcl : entry.getValue()) {
+					return new ClientSessionInfo(rcl, entry.getKey());
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getClientByPublicSIDAnyServer]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public Client getClientByUserId(Long userId) {
+		try {
+			for (Client rcl : cache.getClientsByUserId(null, userId)) {
+				if (rcl.isScreenClient()) {
+					continue;
+				}
+
+				return rcl;
+			}
+		} catch (Exception err) {
+			log.error("[getClientByUserId]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public boolean updateAVClientByStreamId(String streamId, Client rcm, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			// get the corresponding user session object and update the settings
+			Client rclUsual = getClientByPublicSID(rcm.getPublicSID(), server);
+			if (rclUsual != null) {
+				rclUsual.setBroadCastID(rcm.getBroadCastID());
+				rclUsual.setAvsettings(rcm.getAvsettings());
+				rclUsual.setVHeight(rcm.getVHeight());
+				rclUsual.setVWidth(rcm.getVWidth());
+				rclUsual.setVX(rcm.getVX());
+				rclUsual.setVY(rcm.getVY());
+				Client rclSaved = cache.get(server, rclUsual.getStreamid());
+				if (rclSaved != null) {
+					cache.put(rclUsual.getStreamid(), rclUsual);
+				} else {
+					log.debug("Tried to update a non existing Client " + rclUsual.getStreamid());
+				}
+			}
+
+			updateClientByStreamId(streamId, rcm, false, server);
+			return true;
+		} catch (Exception err) {
+			log.error("[updateAVClientByStreamId]", err);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean updateClientByStreamId(String streamId, Client rcm, boolean updateRoomCount, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			Client rclSaved = cache.get(server, streamId);
+
+			if (rclSaved != null) {
+				cache.put(streamId, rcm);
+				return true;
+			} else {
+				log.debug("Tried to update a non existing Client " + streamId);
+			}
+		} catch (Exception err) {
+			log.error("[updateClientByStreamId]", err);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean removeClient(String streamId, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			if (cache.containsKey(server,streamId)) {
+				cache.remove(server,streamId);
+				return true;
+			} else {
+				log.debug("Tried to remove a non existing Client " + streamId);
+			}
+		} catch (Exception err) {
+			log.error("[removeClient]", err);
+		}
+		return false;
+	}
+
+	@Override
+	public List<Client> getClientListByRoom(Long roomId) {
+		List<Client> roomClientList = new ArrayList<>();
+		try {
+			for (Client rcl : cache.getClientsByRoomId(roomId)) {
+				if (rcl.isScreenClient()) {
+					continue;
+				}
+
+				// Only parse really those users out that are really a full session object
+				// and no pseudo session object like the audio/video or screen
+				// sharing connection
+				roomClientList.add(rcl);
+			}
+		} catch (Exception err) {
+			log.error("[getClientListByRoom]", err);
+		}
+		return roomClientList;
+	}
+
+	@Override
+	public Collection<Client> getClientListByRoomAll(Long roomId) {
+		try {
+			return cache.getClientsByRoomId(roomId);
+		} catch (Exception err) {
+			log.error("[getClientListByRoomAll]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public List<Client> getCurrentModeratorByRoom(Long roomId) {
+		List<Client> rclList = new LinkedList<>();
+		List<Client> currentClients = this.getClientListByRoom(roomId);
+		for (Client rcl : currentClients) {
+			if (rcl.getIsMod()) {
+				rclList.add(rcl);
+			}
+		}
+		return rclList;
+	}
+
+	@Override
+	public SearchResult<Client> getListByStartAndMax(int start, int max, String orderby, boolean asc) {
+		SearchResult<Client> sResult = new SearchResult<>();
+		sResult.setObjectName(Client.class.getName());
+		sResult.setRecords(Long.valueOf(cache.size()));
+		sResult.setResult(cache.getClientsWithServer());
+		return sResult;
+	}
+
+	@Override
+	public long getRecordingCount(long roomId) {
+		List<Client> currentClients = this.getClientListByRoom(roomId);
+		int numberOfRecordingUsers = 0;
+		for (Client rcl : currentClients) {
+			if (rcl.isStartRecording()) {
+				numberOfRecordingUsers++;
+			}
+		}
+		return numberOfRecordingUsers;
+	}
+
+	@Override
+	public long getPublishingCount(long roomId) {
+		List<Client> currentClients = this.getClientListByRoom(roomId);
+		int numberOfPublishingUsers = 0;
+		for (Client rcl : currentClients) {
+			if (rcl.isStreamPublishStarted()) {
+				numberOfPublishingUsers++;
+			}
+		}
+		return numberOfPublishingUsers;
+	}
+
+	@Override
+	public List<Long> getActiveRoomIdsByServer(Server server) {
+		return cache.getRoomsIdsByServer(server == null ? serverUtil.getCurrentServer() : server);
+	}
+
+	@Override
+	public String getSessionStatistics() {
+		return cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
+	}
+
+	@Override
+	public void sessionStart() {
+		// TODO Auto-generated method stub
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/site/site.xml
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/site/site.xml b/openmeetings-core/src/site/site.xml
index c26954e..0d9f35c 100644
--- a/openmeetings-core/src/site/site.xml
+++ b/openmeetings-core/src/site/site.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
-  name="Apache OpenMeetings Project">
-
-	<body>
-		<menu ref="parent"/>
-		<menu name="Project">
-			<item name="About" href="/index.html" />
-			<item name="Info" href="/project-info.html" />
-			<item name="Summary" href="/project-summary.html" />
-			<item name="License" href="/license.html" />
-			<item name="Dependencies" href="/dependencies.html" />
-			<item name="Dependency Convergence" href="/dependency-convergence.html" />
-			<item name="RAT Report" href="/rat-report.html" />
-			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
-		</menu>
-	</body>
-	<custom>
-		<reflowSkin>
-			<bottomNav maxSpan="12">
-				<column>Parent Project</column>
-				<column>Project</column>
-			</bottomNav>
-		</reflowSkin>
-	</custom>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd"
+  name="Apache OpenMeetings Project">
+
+	<body>
+		<menu ref="parent"/>
+		<menu name="Project">
+			<item name="About" href="/index.html" />
+			<item name="Info" href="/project-info.html" />
+			<item name="Summary" href="/project-summary.html" />
+			<item name="License" href="/license.html" />
+			<item name="Dependencies" href="/dependencies.html" />
+			<item name="Dependency Convergence" href="/dependency-convergence.html" />
+			<item name="RAT Report" href="/rat-report.html" />
+			<item name="JavaDoc" href="/apidocs/index.html" target="_blank" />
+		</menu>
+	</body>
+	<custom>
+		<reflowSkin>
+			<bottomNav maxSpan="12">
+				<column>Parent Project</column>
+				<column>Project</column>
+			</bottomNav>
+		</reflowSkin>
+	</custom>
+</project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java b/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
index 4247263..3a2a886 100644
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
@@ -1,172 +1,172 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.test.rtmp;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.red5.client.net.rtmp.ClientExceptionHandler;
-import org.red5.client.net.rtmp.INetStreamEventHandler;
-import org.red5.client.net.rtmp.RTMPClient;
-import org.red5.server.api.service.IPendingServiceCall;
-import org.red5.server.api.service.IPendingServiceCallback;
-import org.red5.server.net.rtmp.event.Notify;
-
-public class LoadTestRtmpClient extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, ClientExceptionHandler {
-
-	private class CallObject {
-		Date started;
-		Date ended;
-
-		public CallObject(Date started) {
-			super();
-			this.started = started;
-		}
-
-		public Date getStarted() {
-			return started;
-		}
-
-		public Date getEnded() {
-			return ended;
-		}
-
-		public void setEnded(Date ended) {
-			this.ended = ended;
-		}
-	}
-
-	private int counterCalls = 0; // a call is always 2 steps
-	private Map<Integer, CallObject> calls = new HashMap<>();
-	private boolean isConnected = false;
-	private final int instanceId;
-
-	public LoadTestRtmpClient(int instanceId) {
-		this.instanceId = instanceId;
-	}
-
-	public boolean performCall() {
-
-		// System.err.println("performCall " + isConnected);
-
-		if (!isConnected) {
-			return false;
-		}
-
-		if (counterCalls % 2 == 0) {
-
-			if (counterCalls > 10) {
-
-				return true;
-
-			}
-
-			System.err.println("Rest o do new call " + counterCalls);
-			counterCalls++;
-
-			Map<String, Integer> map = new HashMap<>();
-			map.put("instanceId", instanceId);
-			map.put("count", counterCalls);
-			calls.put(counterCalls, new CallObject(new Date()));
-			invoke("loadTestSyncMessage", new Object[] {"syncMessageToCurrentScopeResult", map, true }, this);
-
-		} else {
-			System.err.println("Call running " + counterCalls);
-		}
-
-
-
-		return false;
-	}
-
-	public double getAverageTime() {
-		long overallTime = 0L;
-
-		for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {
-
-			long deltaTime = tCallObjectEntry.getValue().getEnded().getTime()
-					- tCallObjectEntry.getValue().getStarted().getTime();
-
-			// System.err.println("Key " + tCallObjectEntry.getKey()
-			// + "deltaTime " + deltaTime);
-
-			overallTime += deltaTime;
-
-		}
-
-		double averageTime = Long.valueOf(overallTime).doubleValue()
-				/ Integer.valueOf(calls.size()).doubleValue();
-
-		return averageTime;
-	}
-
-	@Override
-	public void resultReceived(IPendingServiceCall call) {
-		String method = call == null ? null : call.getServiceMethodName();
-		System.err.println("method "+method);
-		if (method == null) {
-			return;
-		}
-		if ("connect".equals(method)) {
-			isConnected = true;
-		}
-
-		if ("loadTestSyncMessage".equals(method)) {
-
-			CallObject tCallObject = calls.get(counterCalls);
-			if (tCallObject == null) {
-
-				for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {
-
-					System.err.println("Key " + tCallObjectEntry.getKey()
-							+ "tCallObjectEntry "
-							+ tCallObjectEntry.getValue().getStarted());
-
-				}
-
-				throw new RuntimeException(
-						"tCallObject is null currentCountReturn "
-								+ counterCalls + " list size "
-								+ calls.size());
-			}
-			tCallObject.setEnded(new Date());
-			calls.put(counterCalls, tCallObject);
-
-			System.err.println("Call received " + counterCalls
-					+ " instanceId: " + instanceId);
-
-			counterCalls++;
-		}
-
-	}
-
-
-	@Override
-	public void onStreamEvent(Notify notify) {
-		// TODO Auto-generated method stub
-
-	}
-
-	public int getNumberOfCalls() {
-		return calls.size();
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rtmp;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.red5.client.net.rtmp.ClientExceptionHandler;
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.client.net.rtmp.RTMPClient;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.rtmp.event.Notify;
+
+public class LoadTestRtmpClient extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, ClientExceptionHandler {
+
+	private class CallObject {
+		Date started;
+		Date ended;
+
+		public CallObject(Date started) {
+			super();
+			this.started = started;
+		}
+
+		public Date getStarted() {
+			return started;
+		}
+
+		public Date getEnded() {
+			return ended;
+		}
+
+		public void setEnded(Date ended) {
+			this.ended = ended;
+		}
+	}
+
+	private int counterCalls = 0; // a call is always 2 steps
+	private Map<Integer, CallObject> calls = new HashMap<>();
+	private boolean isConnected = false;
+	private final int instanceId;
+
+	public LoadTestRtmpClient(int instanceId) {
+		this.instanceId = instanceId;
+	}
+
+	public boolean performCall() {
+
+		// System.err.println("performCall " + isConnected);
+
+		if (!isConnected) {
+			return false;
+		}
+
+		if (counterCalls % 2 == 0) {
+
+			if (counterCalls > 10) {
+
+				return true;
+
+			}
+
+			System.err.println("Rest o do new call " + counterCalls);
+			counterCalls++;
+
+			Map<String, Integer> map = new HashMap<>();
+			map.put("instanceId", instanceId);
+			map.put("count", counterCalls);
+			calls.put(counterCalls, new CallObject(new Date()));
+			invoke("loadTestSyncMessage", new Object[] {"syncMessageToCurrentScopeResult", map, true }, this);
+
+		} else {
+			System.err.println("Call running " + counterCalls);
+		}
+
+
+
+		return false;
+	}
+
+	public double getAverageTime() {
+		long overallTime = 0L;
+
+		for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {
+
+			long deltaTime = tCallObjectEntry.getValue().getEnded().getTime()
+					- tCallObjectEntry.getValue().getStarted().getTime();
+
+			// System.err.println("Key " + tCallObjectEntry.getKey()
+			// + "deltaTime " + deltaTime);
+
+			overallTime += deltaTime;
+
+		}
+
+		double averageTime = Long.valueOf(overallTime).doubleValue()
+				/ Integer.valueOf(calls.size()).doubleValue();
+
+		return averageTime;
+	}
+
+	@Override
+	public void resultReceived(IPendingServiceCall call) {
+		String method = call == null ? null : call.getServiceMethodName();
+		System.err.println("method "+method);
+		if (method == null) {
+			return;
+		}
+		if ("connect".equals(method)) {
+			isConnected = true;
+		}
+
+		if ("loadTestSyncMessage".equals(method)) {
+
+			CallObject tCallObject = calls.get(counterCalls);
+			if (tCallObject == null) {
+
+				for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {
+
+					System.err.println("Key " + tCallObjectEntry.getKey()
+							+ "tCallObjectEntry "
+							+ tCallObjectEntry.getValue().getStarted());
+
+				}
+
+				throw new RuntimeException(
+						"tCallObject is null currentCountReturn "
+								+ counterCalls + " list size "
+								+ calls.size());
+			}
+			tCallObject.setEnded(new Date());
+			calls.put(counterCalls, tCallObject);
+
+			System.err.println("Call received " + counterCalls
+					+ " instanceId: " + instanceId);
+
+			counterCalls++;
+		}
+
+	}
+
+
+	@Override
+	public void onStreamEvent(Notify notify) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getNumberOfCalls() {
+		return calls.size();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java b/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
index fd95155..b68aa0f 100644
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
@@ -1,92 +1,92 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.test.rtmp;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-public class SimulateLoad extends Thread {
-	private static final Logger log = Red5LoggerFactory.getLogger(SimulateLoad.class, webAppRootKey);
-
-	private LoadTestRtmpClient loadTestRtmpClient;
-	private boolean testRunning = true;
-
-	public double getAverageTime() {
-		return loadTestRtmpClient.getAverageTime();
-	}
-
-	public boolean isTestRunning() {
-		return testRunning;
-	}
-
-	public static void main(String... args) {
-		try {
-			if (args.length != 4) {
-				throw new RuntimeException("4 args needed, host, port, context, instanceId");
-			}
-			for (String arg : args) {
-				System.err.println("arg: " + arg);
-			}
-			SimulateLoad simulateLoad = new SimulateLoad(args[0], Integer
-					.valueOf(args[1]).intValue(), args[2], Integer.valueOf(
-					args[3]).intValue());
-			simulateLoad.start();
-			System.err.println("started ");
-
-		} catch (Exception er) {
-			log.error("Error", er);
-		}
-	}
-
-	public SimulateLoad(String host, int port, String applicationContext,
-			int instanceId) {
-		super();
-
-		loadTestRtmpClient = new LoadTestRtmpClient(instanceId);
-		loadTestRtmpClient.connect(host, port, applicationContext,
-				loadTestRtmpClient);
-	}
-
-	@Override
-	public void run() {
-		try {
-
-			System.err.println("######### start client");
-
-			while (testRunning) {
-				testRunning = !loadTestRtmpClient.performCall();
-				try {
-					Thread.sleep(200);
-				} catch (InterruptedException e) {
-					log.error("Error", e);
-				}
-			}
-
-		} catch (Exception e) {
-			log.error("Error", e);
-		}
-	}
-
-	public int getNumberOfCalls() {
-		return loadTestRtmpClient.getNumberOfCalls();
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rtmp;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class SimulateLoad extends Thread {
+	private static final Logger log = Red5LoggerFactory.getLogger(SimulateLoad.class, webAppRootKey);
+
+	private LoadTestRtmpClient loadTestRtmpClient;
+	private boolean testRunning = true;
+
+	public double getAverageTime() {
+		return loadTestRtmpClient.getAverageTime();
+	}
+
+	public boolean isTestRunning() {
+		return testRunning;
+	}
+
+	public static void main(String... args) {
+		try {
+			if (args.length != 4) {
+				throw new RuntimeException("4 args needed, host, port, context, instanceId");
+			}
+			for (String arg : args) {
+				System.err.println("arg: " + arg);
+			}
+			SimulateLoad simulateLoad = new SimulateLoad(args[0], Integer
+					.valueOf(args[1]).intValue(), args[2], Integer.valueOf(
+					args[3]).intValue());
+			simulateLoad.start();
+			System.err.println("started ");
+
+		} catch (Exception er) {
+			log.error("Error", er);
+		}
+	}
+
+	public SimulateLoad(String host, int port, String applicationContext,
+			int instanceId) {
+		super();
+
+		loadTestRtmpClient = new LoadTestRtmpClient(instanceId);
+		loadTestRtmpClient.connect(host, port, applicationContext,
+				loadTestRtmpClient);
+	}
+
+	@Override
+	public void run() {
+		try {
+
+			System.err.println("######### start client");
+
+			while (testRunning) {
+				testRunning = !loadTestRtmpClient.performCall();
+				try {
+					Thread.sleep(200);
+				} catch (InterruptedException e) {
+					log.error("Error", e);
+				}
+			}
+
+		} catch (Exception e) {
+			log.error("Error", e);
+		}
+	}
+
+	public int getNumberOfCalls() {
+		return loadTestRtmpClient.getNumberOfCalls();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/IDataProviderDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
index f82f93b..e55e270 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
@@ -1,94 +1,94 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao;
-
-import java.util.List;
-
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-
-/**
- * General interface to perform CRUD operations on entities
- * 
- * @author solomax, swagner
- * 
- * @param <T>
- */
-public interface IDataProviderDao<T extends IDataProviderEntity> {
-
-	/**
-	 * Get an instance of an {@link T}
-	 * 
-	 * @param id - id of instance to retrieve
-	 * @return instance with the id gived
-	 */
-	T get(Long id);
-
-	T get(long id);
-	
-	/**
-	 * Get a list of instances of {@link T}
-	 * 
-	 * @param start - the start to range to retrieve
-	 * @param count - maximum instance count to retrieve
-	 * @return list of instances in the range specified
-	 */
-	List<T> get(int start, int count);
-
-	/**
-	 * Get a list of instances of {@link T}
-	 * 
-	 * @param search - string search criteria to filter entities
-	 * @param start - the start to range to retrieve
-	 * @param count - maximum instance count to retrieve
-	 * @param order - column and sort order
-	 * @return list of instances in the range specified
-	 */
-	List<T> get(String search, int start, int count, String order);
-
-	/**
-	 * Count the number of instances of {@link T}
-	 * 
-	 * @return count of instances
-	 */
-	long count();
-
-	/**
-	 * Count the number of instances of {@link T}
-	 * 
-	 * @param search - string search criteria to filter entities
-	 * @return count of instances satisfying given search criteria
-	 */
-	long count(String search);
-
-	/**
-	 * Update an instance of {@link T}
-	 * 
-	 * @param entity - entity to be updated
-	 * @param userId - user performed update
-	 */
-	T update(T entity, Long userId);
-
-	/**
-	 * Delete an instance of {@link T}
-	 * 
-	 * @param entity - entity to be deleted
-	 * @param userId - user performed delete
-	 */
-	void delete(T entity, Long userId);
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+/**
+ * General interface to perform CRUD operations on entities
+ * 
+ * @author solomax, swagner
+ * 
+ * @param <T>
+ */
+public interface IDataProviderDao<T extends IDataProviderEntity> {
+
+	/**
+	 * Get an instance of an {@link T}
+	 * 
+	 * @param id - id of instance to retrieve
+	 * @return instance with the id gived
+	 */
+	T get(Long id);
+
+	T get(long id);
+	
+	/**
+	 * Get a list of instances of {@link T}
+	 * 
+	 * @param start - the start to range to retrieve
+	 * @param count - maximum instance count to retrieve
+	 * @return list of instances in the range specified
+	 */
+	List<T> get(int start, int count);
+
+	/**
+	 * Get a list of instances of {@link T}
+	 * 
+	 * @param search - string search criteria to filter entities
+	 * @param start - the start to range to retrieve
+	 * @param count - maximum instance count to retrieve
+	 * @param order - column and sort order
+	 * @return list of instances in the range specified
+	 */
+	List<T> get(String search, int start, int count, String order);
+
+	/**
+	 * Count the number of instances of {@link T}
+	 * 
+	 * @return count of instances
+	 */
+	long count();
+
+	/**
+	 * Count the number of instances of {@link T}
+	 * 
+	 * @param search - string search criteria to filter entities
+	 * @return count of instances satisfying given search criteria
+	 */
+	long count(String search);
+
+	/**
+	 * Update an instance of {@link T}
+	 * 
+	 * @param entity - entity to be updated
+	 * @param userId - user performed update
+	 */
+	T update(T entity, Long userId);
+
+	/**
+	 * Delete an instance of {@link T}
+	 * 
+	 * @param entity - entity to be deleted
+	 * @param userId - user performed delete
+	 */
+	void delete(T entity, Long userId);
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
index 2f62dbb..aed66db 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
@@ -1,135 +1,135 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao.basic;
-
-import java.util.Calendar;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.entity.basic.MailMessage;
-import org.apache.openmeetings.db.entity.basic.MailMessage.Status;
-import org.apache.wicket.util.string.Strings;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-public class MailMessageDao  implements IDataProviderDao<MailMessage> {
-	@PersistenceContext
-	private EntityManager em;
-
-	@Override
-	public MailMessage get(long id) {
-		return get(Long.valueOf(id));
-	}
-
-	@Override
-	public MailMessage get(Long id) {
-		return em.createNamedQuery("getMailMessageById", MailMessage.class).setParameter("id", id).getSingleResult();
-	}
-
-	@Override
-	public List<MailMessage> get(int start, int count) {
-		return em.createNamedQuery("getMailMessages", MailMessage.class)
-				.setFirstResult(start).setMaxResults(count).getResultList();
-	}
-
-	public List<MailMessage> get(int start, int count, Status status) {
-		return em.createNamedQuery("getMailMessagesByStatus", MailMessage.class).setParameter("status", status)
-				.setFirstResult(start).setMaxResults(count).getResultList();
-	}
-
-	private <T> TypedQuery<T> getQuery(boolean isCount, String search, String order, Class<T> clazz) {
-		StringBuilder sb = new StringBuilder("SELECT ");
-		sb.append(isCount ? "COUNT(m)" : "m")
-			.append(" FROM MailMessage m");
-		if (!Strings.isEmpty(search)) {
-			sb.append(" WHERE m.recipients LIKE :search OR m.subject LIKE :search OR m.body LIKE :search OR m.lastError LIKE :search");
-		}
-		if (!Strings.isEmpty(order)) {
-			sb.append(" ORDER BY m.").append(order);
-		}
-		TypedQuery<T> q = em.createQuery(sb.toString(), clazz);
-		if (!Strings.isEmpty(search)) {
-			q.setParameter("search", String.format("%%%s%%", search));
-		}
-		return q;
-	}
-
-	@Override
-	public List<MailMessage> get(String search, int start, int count, String order) {
-		return getQuery(false, search, order, MailMessage.class).setFirstResult(start).setMaxResults(count).getResultList();
-	}
-
-	@Override
-	public long count() {
-		return em.createNamedQuery("countMailMessages", Long.class).getSingleResult();
-	}
-
-	@Override
-	public long count(String search) {
-		return getQuery(true, search, null, Long.class).getSingleResult();
-	}
-
-	public void resetSendingStatus(Calendar date) {
-		em.createNamedQuery("resetMailStatusByDate")
-			.setParameter("noneStatus", Status.NONE)
-			.setParameter("sendingStatus", Status.SENDING)
-			.setParameter("date", date)
-			.executeUpdate();
-	}
-
-	public void resetSendingStatus(Long id) {
-		em.createNamedQuery("resetMailStatusById")
-			.setParameter("noneStatus", Status.NONE)
-			.setParameter("id", id)
-			.executeUpdate();
-	}
-
-	@Override
-	public MailMessage update(MailMessage m, Long userId) {
-		if (m.getId() == null) {
-			m.setInserted(Calendar.getInstance());
-			em.persist(m);
-		} else {
-			m.setUpdated(Calendar.getInstance());
-			m =	em.merge(m);
-		}
-		return m;
-	}
-
-	@Override
-	public void delete(MailMessage m, Long userId) {
-		if (m != null) {
-			delete(m.getId(), userId);
-		}
-	}
-
-	/**
-	 * @param id - entity id
-	 * @param userId - unused
-	 */
-	public void delete(Long id, Long userId) {
-		if (id != null) {
-			em.remove(get(id));
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import java.util.Calendar;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.basic.MailMessage;
+import org.apache.openmeetings.db.entity.basic.MailMessage.Status;
+import org.apache.wicket.util.string.Strings;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class MailMessageDao  implements IDataProviderDao<MailMessage> {
+	@PersistenceContext
+	private EntityManager em;
+
+	@Override
+	public MailMessage get(long id) {
+		return get(Long.valueOf(id));
+	}
+
+	@Override
+	public MailMessage get(Long id) {
+		return em.createNamedQuery("getMailMessageById", MailMessage.class).setParameter("id", id).getSingleResult();
+	}
+
+	@Override
+	public List<MailMessage> get(int start, int count) {
+		return em.createNamedQuery("getMailMessages", MailMessage.class)
+				.setFirstResult(start).setMaxResults(count).getResultList();
+	}
+
+	public List<MailMessage> get(int start, int count, Status status) {
+		return em.createNamedQuery("getMailMessagesByStatus", MailMessage.class).setParameter("status", status)
+				.setFirstResult(start).setMaxResults(count).getResultList();
+	}
+
+	private <T> TypedQuery<T> getQuery(boolean isCount, String search, String order, Class<T> clazz) {
+		StringBuilder sb = new StringBuilder("SELECT ");
+		sb.append(isCount ? "COUNT(m)" : "m")
+			.append(" FROM MailMessage m");
+		if (!Strings.isEmpty(search)) {
+			sb.append(" WHERE m.recipients LIKE :search OR m.subject LIKE :search OR m.body LIKE :search OR m.lastError LIKE :search");
+		}
+		if (!Strings.isEmpty(order)) {
+			sb.append(" ORDER BY m.").append(order);
+		}
+		TypedQuery<T> q = em.createQuery(sb.toString(), clazz);
+		if (!Strings.isEmpty(search)) {
+			q.setParameter("search", String.format("%%%s%%", search));
+		}
+		return q;
+	}
+
+	@Override
+	public List<MailMessage> get(String search, int start, int count, String order) {
+		return getQuery(false, search, order, MailMessage.class).setFirstResult(start).setMaxResults(count).getResultList();
+	}
+
+	@Override
+	public long count() {
+		return em.createNamedQuery("countMailMessages", Long.class).getSingleResult();
+	}
+
+	@Override
+	public long count(String search) {
+		return getQuery(true, search, null, Long.class).getSingleResult();
+	}
+
+	public void resetSendingStatus(Calendar date) {
+		em.createNamedQuery("resetMailStatusByDate")
+			.setParameter("noneStatus", Status.NONE)
+			.setParameter("sendingStatus", Status.SENDING)
+			.setParameter("date", date)
+			.executeUpdate();
+	}
+
+	public void resetSendingStatus(Long id) {
+		em.createNamedQuery("resetMailStatusById")
+			.setParameter("noneStatus", Status.NONE)
+			.setParameter("id", id)
+			.executeUpdate();
+	}
+
+	@Override
+	public MailMessage update(MailMessage m, Long userId) {
+		if (m.getId() == null) {
+			m.setInserted(Calendar.getInstance());
+			em.persist(m);
+		} else {
+			m.setUpdated(Calendar.getInstance());
+			m =	em.merge(m);
+		}
+		return m;
+	}
+
+	@Override
+	public void delete(MailMessage m, Long userId) {
+		if (m != null) {
+			delete(m.getId(), userId);
+		}
+	}
+
+	/**
+	 * @param id - entity id
+	 * @param userId - unused
+	 */
+	public void delete(Long id, Long userId) {
+		if (id != null) {
+			em.remove(get(id));
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
index 4a51331..efcdaaa 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
@@ -1,321 +1,321 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.db.dao.label;
-
-import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.InvalidPropertiesFormatException;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.entity.label.StringLabel;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.util.XmlExport;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
-import org.apache.wicket.util.string.Strings;
-import org.dom4j.Document;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-/**
- *
- * CRUD operations for {@link StringLabel}
- *
- * @author solomax, swagner
- *
- */
-public class LabelDao implements IDataProviderDao<StringLabel>{
-	private static final Logger log = Red5LoggerFactory.getLogger(LabelDao.class, webAppRootKey);
-	private static final String ENTRY_ELEMENT = "entry";
-	private static final String KEY_ATTR = "key";
-	public static final String APP_RESOURCES_EN = "Application.properties.xml";
-	public static final String APP_RESOURCES = "Application_%s.properties.xml";
-	public static final LinkedHashMap<Long, Locale> languages = new LinkedHashMap<>(); //TODO hide it and return unmodifiable map
-	public static final ConcurrentHashMap<Locale, List<StringLabel>> labelCache = new ConcurrentHashMap<>();
-	public static final Set<String> keys = new HashSet<>();
-	private static Class<?> APP = null;
-
-	public List<Map<String, Object>> getStrings(Long language_id, int start, int count) {
-		List<Map<String, Object>> result = new ArrayList<>();
-		for (int i = 0; i < count; ++i) {
-			Map<String, Object> map = new HashMap<>();
-			map.put("id", start + i);
-			map.put("value", getString(start + i, language_id));
-			result.add(map);
-		}
-		return result;
-	}
-
-	private static void storeLanguages() throws Exception {
-		Document d = XmlExport.createDocument();
-		Element r = XmlExport.createRoot(d, "language");
-		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
-			r.addElement("lang").addAttribute("id", "" + e.getKey()).addAttribute("code", e.getValue().toLanguageTag());
-		}
-		XmlExport.toXml(getLangFile(), d);
-	}
-
-	public static void add(Locale l) throws Exception {
-		long id = 0L;
-		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
-			id = e.getKey();
-		}
-		languages.put(id + 1, l);
-		storeLanguages();
-		labelCache.put(l, new ArrayList<StringLabel>());
-	}
-
-	public String getString(long fieldValuesId, long langId) {
-		return ensureApplication(langId).getOmString(fieldValuesId, langId);
-	}
-
-	public String getString(String key, long langId) {
-		return ensureApplication(langId).getOmString(key, langId);
-	}
-
-	private static File getLangFile() {
-		return new File(OmFileHelper.getLanguagesDir(), OmFileHelper.nameOfLanguageFile);
-	}
-
-	public static synchronized Class<?> getAppClass() throws ClassNotFoundException {
-		if (APP == null) {
-			//FIXME HACK to resolve package dependencies
-			APP = Class.forName("org.apache.openmeetings.web.app.Application");
-		}
-		return APP;
-	}
-
-	public static void initLanguageMap() {
-		SAXReader reader = new SAXReader();
-		try {
-			getAppClass();
-			Document document = reader.read(getLangFile());
-			Element root = document.getRootElement();
-			languages.clear();
-			for (@SuppressWarnings("unchecked")Iterator<Element> it = root.elementIterator("lang"); it.hasNext();) {
-				Element item = it.next();
-				Long id = Long.valueOf(item.attributeValue("id"));
-				String code = item.attributeValue("code");
-				if (id == 3L) {
-					continue;
-				}
-				languages.put(id, Locale.forLanguageTag(code));
-			}
-		} catch (Exception e) {
-			log.error("Error while building language map");
-		}
-	}
-
-	public static String getLabelFileName(Locale l) {
-		String name = APP_RESOURCES_EN;
-		if (!Locale.ENGLISH.equals(l)) {
-			name = String.format(APP_RESOURCES, l.toLanguageTag().replace('-', '_'));
-		}
-		return name;
-	}
-
-	private static void storeLabels(Locale l) throws Exception {
-		Document d = XmlExport.createDocument();
-		Element r = XmlExport.createRoot(d);
-		List<StringLabel> labels = labelCache.get(l);
-		for (StringLabel sl : labels) {
-			r.addElement(ENTRY_ELEMENT).addAttribute(KEY_ATTR, sl.getKey()).addCDATA(sl.getValue());
-		}
-		URL u = APP.getResource(getLabelFileName(l));
-		XmlExport.toXml(new File(u.toURI()), d);
-	}
-
-	public static void upload(Locale l, InputStream is) throws Exception {
-		List<StringLabel> labels = getLabels(is);
-		URL u = APP.getResource(getLabelFileName(Locale.ENGLISH)); //get the URL of existing resource
-		File el = new File(u.toURI());
-		File f = new File(el.getParentFile(), getLabelFileName(l));
-		if (!f.exists()) {
-			f.createNewFile();
-		}
-		labelCache.put(l, labels);
-		storeLabels(l);
-	}
-
-	private static List<StringLabel> getLabels(Locale l) {
-		List<StringLabel> labels = new ArrayList<>();
-		try (InputStream is = APP.getResourceAsStream(getLabelFileName(l))) {
-			labels = getLabels(is);
-		} catch (Exception e) {
-			log.error("Error reading resources document", e);
-		}
-		return labels;
-	}
-
-	private static List<StringLabel> getLabels(InputStream is) throws InvalidPropertiesFormatException, IOException {
-		final List<StringLabel> labels = new ArrayList<>();
-		Properties props = new Properties();
-		props.loadFromXML(is);
-		props.forEach((k, v) -> labels.add(new StringLabel((String)k, (String)v)));
-		return labels;
-	}
-
-	private static List<StringLabel> getLabels(Locale l, final String search) {
-		if (!labelCache.containsKey(l)) {
-			List<StringLabel> ll = getLabels(l);
-			if (ll != null) {
-				labelCache.putIfAbsent(l, ll);
-			}
-		}
-		List<StringLabel> result = new ArrayList<>(labelCache.containsKey(l) ? labelCache.get(l) : new ArrayList<StringLabel>());
-		if (!Strings.isEmpty(search)) {
-			CollectionUtils.filter(result, new Predicate<StringLabel>() {
-				@Override
-				public boolean evaluate(StringLabel o) {
-					return o != null && (o.getKey().contains(search) || o.getValue().contains(search));
-				}
-			});
-		}
-		return result;
-	}
-
-	@Override
-	public StringLabel get(long id) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	@Override
-	public StringLabel get(Long id) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	@Override
-	public List<StringLabel> get(int start, int count) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	@Override
-	public List<StringLabel> get(String search, int start, int count, String order) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	public List<StringLabel> get(Locale l, final String search, int start, int count, final SortParam<String> sort) {
-		List<StringLabel> result = getLabels(l, search);
-		if (sort != null) {
-			Collections.sort(result, new Comparator<StringLabel>() {
-				@Override
-				public int compare(StringLabel o1, StringLabel o2) {
-					int val = 0;
-					if (KEY_ATTR.equals(sort.getProperty())) {
-						try {
-							int i1 = Integer.parseInt(o1.getKey()), i2 = Integer.parseInt(o2.getKey());
-							val = i1 - i2;
-						} catch (Exception e) {
-							val = o1.getKey().compareTo(o2.getKey());
-						}
-					} else {
-						val = o1.getValue().compareTo(o2.getValue());
-					}
-					return (sort.isAscending() ? 1 : -1) * val;
-				}
-			});
-		}
-		return result.subList(start, start + count > result.size() ? result.size() : start + count);
-	}
-
-	@Override
-	public long count() {
-		throw new RuntimeException("Should not be used");
-	}
-
-	@Override
-	public long count(String search) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	public long count(Locale l, final String search) {
-		return getLabels(l, search).size();
-	}
-
-	@Override
-	public StringLabel update(StringLabel entity, Long userId) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	public StringLabel update(Locale l, StringLabel entity) throws Exception {
-		List<StringLabel> labels = labelCache.get(l);
-		if (!labels.contains(entity)) {
-			labels.add(entity);
-			keys.add(entity.getKey());
-		}
-		storeLabels(l);
-		return entity;
-	}
-
-	@Override
-	public void delete(StringLabel entity, Long userId) {
-		throw new RuntimeException("Should not be used");
-	}
-
-	public void delete(Locale l, StringLabel entity) throws Exception {
-		List<StringLabel> labels = labelCache.get(l);
-		if (labels.contains(entity)) {
-			labels.remove(entity);
-			keys.remove(entity.getKey());
-			storeLabels(l);
-		}
-	}
-
-	public static void delete(Locale l) {
-		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
-			if (e.getValue().equals(l)) {
-				languages.remove(e.getKey());
-				break;
-			}
-		}
-		labelCache.remove(l);
-		try {
-			URL u = APP.getResource(getLabelFileName(l));
-			if (u != null) {
-				File f = new File(u.toURI());
-				if (f.exists()) {
-					f.delete();
-				}
-			}
-		} catch (Exception e) {
-			log.error("Unexpected error while deleting language", e);
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.label;
+
+import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.InvalidPropertiesFormatException;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.label.StringLabel;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.XmlExport;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
+import org.apache.wicket.util.string.Strings;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ *
+ * CRUD operations for {@link StringLabel}
+ *
+ * @author solomax, swagner
+ *
+ */
+public class LabelDao implements IDataProviderDao<StringLabel>{
+	private static final Logger log = Red5LoggerFactory.getLogger(LabelDao.class, webAppRootKey);
+	private static final String ENTRY_ELEMENT = "entry";
+	private static final String KEY_ATTR = "key";
+	public static final String APP_RESOURCES_EN = "Application.properties.xml";
+	public static final String APP_RESOURCES = "Application_%s.properties.xml";
+	public static final LinkedHashMap<Long, Locale> languages = new LinkedHashMap<>(); //TODO hide it and return unmodifiable map
+	public static final ConcurrentHashMap<Locale, List<StringLabel>> labelCache = new ConcurrentHashMap<>();
+	public static final Set<String> keys = new HashSet<>();
+	private static Class<?> APP = null;
+
+	public List<Map<String, Object>> getStrings(Long language_id, int start, int count) {
+		List<Map<String, Object>> result = new ArrayList<>();
+		for (int i = 0; i < count; ++i) {
+			Map<String, Object> map = new HashMap<>();
+			map.put("id", start + i);
+			map.put("value", getString(start + i, language_id));
+			result.add(map);
+		}
+		return result;
+	}
+
+	private static void storeLanguages() throws Exception {
+		Document d = XmlExport.createDocument();
+		Element r = XmlExport.createRoot(d, "language");
+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
+			r.addElement("lang").addAttribute("id", "" + e.getKey()).addAttribute("code", e.getValue().toLanguageTag());
+		}
+		XmlExport.toXml(getLangFile(), d);
+	}
+
+	public static void add(Locale l) throws Exception {
+		long id = 0L;
+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
+			id = e.getKey();
+		}
+		languages.put(id + 1, l);
+		storeLanguages();
+		labelCache.put(l, new ArrayList<StringLabel>());
+	}
+
+	public String getString(long fieldValuesId, long langId) {
+		return ensureApplication(langId).getOmString(fieldValuesId, langId);
+	}
+
+	public String getString(String key, long langId) {
+		return ensureApplication(langId).getOmString(key, langId);
+	}
+
+	private static File getLangFile() {
+		return new File(OmFileHelper.getLanguagesDir(), OmFileHelper.nameOfLanguageFile);
+	}
+
+	public static synchronized Class<?> getAppClass() throws ClassNotFoundException {
+		if (APP == null) {
+			//FIXME HACK to resolve package dependencies
+			APP = Class.forName("org.apache.openmeetings.web.app.Application");
+		}
+		return APP;
+	}
+
+	public static void initLanguageMap() {
+		SAXReader reader = new SAXReader();
+		try {
+			getAppClass();
+			Document document = reader.read(getLangFile());
+			Element root = document.getRootElement();
+			languages.clear();
+			for (@SuppressWarnings("unchecked")Iterator<Element> it = root.elementIterator("lang"); it.hasNext();) {
+				Element item = it.next();
+				Long id = Long.valueOf(item.attributeValue("id"));
+				String code = item.attributeValue("code");
+				if (id == 3L) {
+					continue;
+				}
+				languages.put(id, Locale.forLanguageTag(code));
+			}
+		} catch (Exception e) {
+			log.error("Error while building language map");
+		}
+	}
+
+	public static String getLabelFileName(Locale l) {
+		String name = APP_RESOURCES_EN;
+		if (!Locale.ENGLISH.equals(l)) {
+			name = String.format(APP_RESOURCES, l.toLanguageTag().replace('-', '_'));
+		}
+		return name;
+	}
+
+	private static void storeLabels(Locale l) throws Exception {
+		Document d = XmlExport.createDocument();
+		Element r = XmlExport.createRoot(d);
+		List<StringLabel> labels = labelCache.get(l);
+		for (StringLabel sl : labels) {
+			r.addElement(ENTRY_ELEMENT).addAttribute(KEY_ATTR, sl.getKey()).addCDATA(sl.getValue());
+		}
+		URL u = APP.getResource(getLabelFileName(l));
+		XmlExport.toXml(new File(u.toURI()), d);
+	}
+
+	public static void upload(Locale l, InputStream is) throws Exception {
+		List<StringLabel> labels = getLabels(is);
+		URL u = APP.getResource(getLabelFileName(Locale.ENGLISH)); //get the URL of existing resource
+		File el = new File(u.toURI());
+		File f = new File(el.getParentFile(), getLabelFileName(l));
+		if (!f.exists()) {
+			f.createNewFile();
+		}
+		labelCache.put(l, labels);
+		storeLabels(l);
+	}
+
+	private static List<StringLabel> getLabels(Locale l) {
+		List<StringLabel> labels = new ArrayList<>();
+		try (InputStream is = APP.getResourceAsStream(getLabelFileName(l))) {
+			labels = getLabels(is);
+		} catch (Exception e) {
+			log.error("Error reading resources document", e);
+		}
+		return labels;
+	}
+
+	private static List<StringLabel> getLabels(InputStream is) throws InvalidPropertiesFormatException, IOException {
+		final List<StringLabel> labels = new ArrayList<>();
+		Properties props = new Properties();
+		props.loadFromXML(is);
+		props.forEach((k, v) -> labels.add(new StringLabel((String)k, (String)v)));
+		return labels;
+	}
+
+	private static List<StringLabel> getLabels(Locale l, final String search) {
+		if (!labelCache.containsKey(l)) {
+			List<StringLabel> ll = getLabels(l);
+			if (ll != null) {
+				labelCache.putIfAbsent(l, ll);
+			}
+		}
+		List<StringLabel> result = new ArrayList<>(labelCache.containsKey(l) ? labelCache.get(l) : new ArrayList<StringLabel>());
+		if (!Strings.isEmpty(search)) {
+			CollectionUtils.filter(result, new Predicate<StringLabel>() {
+				@Override
+				public boolean evaluate(StringLabel o) {
+					return o != null && (o.getKey().contains(search) || o.getValue().contains(search));
+				}
+			});
+		}
+		return result;
+	}
+
+	@Override
+	public StringLabel get(long id) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	@Override
+	public StringLabel get(Long id) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	@Override
+	public List<StringLabel> get(int start, int count) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	@Override
+	public List<StringLabel> get(String search, int start, int count, String order) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	public List<StringLabel> get(Locale l, final String search, int start, int count, final SortParam<String> sort) {
+		List<StringLabel> result = getLabels(l, search);
+		if (sort != null) {
+			Collections.sort(result, new Comparator<StringLabel>() {
+				@Override
+				public int compare(StringLabel o1, StringLabel o2) {
+					int val = 0;
+					if (KEY_ATTR.equals(sort.getProperty())) {
+						try {
+							int i1 = Integer.parseInt(o1.getKey()), i2 = Integer.parseInt(o2.getKey());
+							val = i1 - i2;
+						} catch (Exception e) {
+							val = o1.getKey().compareTo(o2.getKey());
+						}
+					} else {
+						val = o1.getValue().compareTo(o2.getValue());
+					}
+					return (sort.isAscending() ? 1 : -1) * val;
+				}
+			});
+		}
+		return result.subList(start, start + count > result.size() ? result.size() : start + count);
+	}
+
+	@Override
+	public long count() {
+		throw new RuntimeException("Should not be used");
+	}
+
+	@Override
+	public long count(String search) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	public long count(Locale l, final String search) {
+		return getLabels(l, search).size();
+	}
+
+	@Override
+	public StringLabel update(StringLabel entity, Long userId) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	public StringLabel update(Locale l, StringLabel entity) throws Exception {
+		List<StringLabel> labels = labelCache.get(l);
+		if (!labels.contains(entity)) {
+			labels.add(entity);
+			keys.add(entity.getKey());
+		}
+		storeLabels(l);
+		return entity;
+	}
+
+	@Override
+	public void delete(StringLabel entity, Long userId) {
+		throw new RuntimeException("Should not be used");
+	}
+
+	public void delete(Locale l, StringLabel entity) throws Exception {
+		List<StringLabel> labels = labelCache.get(l);
+		if (labels.contains(entity)) {
+			labels.remove(entity);
+			keys.remove(entity.getKey());
+			storeLabels(l);
+		}
+	}
+
+	public static void delete(Locale l) {
+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {
+			if (e.getValue().equals(l)) {
+				languages.remove(e.getKey());
+				break;
+			}
+		}
+		labelCache.remove(l);
+		try {
+			URL u = APP.getResource(getLabelFileName(l));
+			if (u != null) {
+				File f = new File(u.toURI());
+				if (f.exists()) {
+					f.delete();
+				}
+			}
+		} catch (Exception e) {
+			log.error("Unexpected error while deleting language", e);
+		}
+	}
+}


[08/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index aa234b5..7484e44 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -1,412 +1,412 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.rooms;
-
-import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getRights;
-import static org.apache.openmeetings.web.app.WebSession.getSid;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.server.ISessionManager;
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.IUserService;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.room.Room;
-import org.apache.openmeetings.db.entity.room.Room.RoomElement;
-import org.apache.openmeetings.db.entity.room.RoomGroup;
-import org.apache.openmeetings.db.entity.room.RoomModerator;
-import org.apache.openmeetings.db.entity.user.Address;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
-import org.apache.openmeetings.web.util.RoomTypeDropDown;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.ChoiceRenderer;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.util.time.Duration;
-import org.wicketstuff.select2.ChoiceProvider;
-import org.wicketstuff.select2.Response;
-import org.wicketstuff.select2.Select2Choice;
-import org.wicketstuff.select2.Select2MultiChoice;
-
-public class RoomForm extends AdminBaseForm<Room> {
-	private static final long serialVersionUID = 1L;
-	private final static List<Long> DROPDOWN_NUMBER_OF_PARTICIPANTS = Arrays.asList(2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L, 20L, 25L, 32L, 50L,
-			100L, 150L, 200L, 500L, 1000L);
-	private final WebMarkupContainer roomList;
-	private final TextField<String> pin = new TextField<>("pin");
-	private final WebMarkupContainer moderatorContainer = new WebMarkupContainer("moderatorContainer");
-	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
-	private final ListView<Client> clients = new ListView<Client>("clients", new ArrayList<>()) {
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		protected void populateItem(final ListItem<Client> item) {
-			Client client = item.getModelObject();
-			item.add(new Label("clientId", "" + client.getId()))
-				.add(new Label("clientLogin", "" + client.getUsername()))
-				.add(new ConfirmableAjaxBorder("clientDelete", getString("80"), getString("833")) {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onSubmit(AjaxRequestTarget target) {
-						Client c = item.getModelObject();
-						getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
-								, c.getServer() == null ? 0 : c.getServer().getId());
-
-						updateClients(target);
-					}
-				});
-		}
-	};
-	private IModel<User> moderator2add = Model.of((User)null);
-
-	public RoomForm(String id, WebMarkupContainer roomList, final Room room) {
-		super(id, new CompoundPropertyModel<>(room));
-		this.roomList = roomList;
-		setOutputMarkupId(true);
-	}
-
-	@Override
-	protected void onInitialize() {
-		super.onInitialize();
-		RequiredTextField<String> name = new RequiredTextField<>("name");
-		name.setLabel(new Model<>(Application.getString(193)));
-		add(name);
-
-		add(new DropDownChoice<>("numberOfPartizipants", //
-				DROPDOWN_NUMBER_OF_PARTICIPANTS, //
-				new ChoiceRenderer<Long>() {
-					private static final long serialVersionUID = 1L;
-					@Override
-					public Object getDisplayValue(Long id) {
-						return id;
-					}
-					@Override
-					public String getIdValue(Long id, int index) {
-						return "" + id;
-					}
-				}));
-
-		add(new RoomTypeDropDown("type").setRequired(true).setLabel(Model.of(Application.getString(194))));
-
-		add(new TextArea<String>("comment"));
-
-		boolean isGroupAdmin = hasGroupAdminLevel(getRights());
-		add(new CheckBox("appointment").setEnabled(false));
-		add(new CheckBox("ispublic").setEnabled(!isGroupAdmin));
-
-		List<Group> orgList = isGroupAdmin
-				? getBean(GroupDao.class).get(null, getUserId(), 0, Integer.MAX_VALUE, null)
-				: getBean(GroupDao.class).get(0, Integer.MAX_VALUE);
-		final List<RoomGroup> orgRooms = new ArrayList<>(orgList.size());
-		for (Group org : orgList) {
-			orgRooms.add(new RoomGroup(org, getModelObject()));
-		}
-		add(new Select2MultiChoice<>("roomGroups", null, new ChoiceProvider<RoomGroup>() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public String getDisplayValue(RoomGroup choice) {
-				String name = choice.getGroup().getName();
-				return name == null ? "" : name;
-			}
-
-			@Override
-			public String getIdValue(RoomGroup choice) {
-				Long id = choice.getGroup().getId();
-				return id == null ? null : "" + id;
-			}
-
-			@Override
-			public void query(String term, int page, Response<RoomGroup> response) {
-				for (RoomGroup or : orgRooms) {
-					if (Strings.isEmpty(term) || or.getGroup().getName().contains(term)) {
-						response.add(or);
-					}
-				}
-			}
-
-			@Override
-			public Collection<RoomGroup> toChoices(Collection<String> _ids) {
-				List<Long> ids = new ArrayList<>();
-				for (String id : _ids) {
-					ids.add(Long.valueOf(id));
-				}
-				List<RoomGroup> list = new ArrayList<>();
-				for (Group o : getBean(GroupDao.class).get(ids)) {
-					list.add(new RoomGroup(o, RoomForm.this.getModelObject()));
-				}
-				return list;
-			}
-		}).setLabel(Model.of(getString("828"))).setRequired(isGroupAdmin));
-
-		add(new CheckBox("isDemoRoom"));
-		TextField<Integer> demoTime = new TextField<>("demoTime");
-		demoTime.setLabel(new Model<>(Application.getString(637)));
-		add(demoTime);
-		add(new CheckBox("allowUserQuestions"));
-		add(new CheckBox("audioOnly"));
-		add(new CheckBox("closed"));
-		add(new TextField<String>("redirectURL"));
-		add(new CheckBox("waitForRecording"));
-		add(new CheckBox("allowRecording"));
-		add(new CheckBox("chatModerated"));
-
-		add(new Select2MultiChoice<>("hiddenElements", null, new ChoiceProvider<RoomElement>() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public String getDisplayValue(RoomElement choice) {
-				return choice.name();
-			}
-
-			@Override
-			public String getIdValue(RoomElement choice) {
-				return choice.name();
-			}
-
-			@Override
-			public void query(String term, int page, Response<RoomElement> response) {
-				for (RoomElement r : RoomElement.values()) {
-					if (Strings.isEmpty(term) || r.name().contains(term)) {
-						response.add(r);
-					}
-				}
-			}
-
-			@Override
-			public Collection<RoomElement> toChoices(Collection<String> ids) {
-				Collection<RoomElement> rights = new ArrayList<>(ids.size());
-				for (String id : ids) {
-					rights.add(RoomElement.valueOf(id));
-				}
-				return rights;
-			}
-		}));
-		add(new CheckBox("chatOpened"));
-		add(new CheckBox("filesOpened"));
-		add(new CheckBox("autoVideoSelect"));
-
-		// Users in this Room
-		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
-
-		// Moderators
-		final Select2Choice<User> moderatorChoice = new Select2Choice<>("moderator2add", moderator2add, new AdminUserChoiceProvider() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void query(String term, int page, Response<User> response) {
-				response.addAll(getBean(UserDao.class).get(term, false, page * PAGE_SIZE, PAGE_SIZE));
-				response.setHasMore(PAGE_SIZE == response.getResults().size());
-			}
-
-			@Override
-			public String getDisplayValue(User choice) {
-				Address a = choice.getAddress();
-				return String.format("\"%s %s\" <%s>", choice.getFirstname(), choice.getLastname(), a == null ? "" : a.getEmail());
-			}
-		});
-		add(moderatorChoice.add(new AjaxFormComponentUpdatingBehavior("change") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onUpdate(AjaxRequestTarget target) {
-				Room r = RoomForm.this.getModelObject();
-				User u = moderator2add.getObject();
-				boolean found = false;
-				if (u != null) {
-					if (r.getModerators() == null) {
-						r.setModerators(new ArrayList<RoomModerator>());
-					}
-					for (RoomModerator rm : r.getModerators()) {
-						if (rm.getUser().getId().equals(u.getId())) {
-							found = true;
-							break;
-						}
-					}
-					if (!found) {
-						RoomModerator rm = new RoomModerator();
-						rm.setRoomId(r.getId());
-						rm.setUser(u);
-						r.getModerators().add(0, rm);
-						moderator2add.setObject(null);
-						target.add(moderatorContainer, moderatorChoice);
-					}
-				}
-			}
-		}).setOutputMarkupId(true));
-		add(moderatorContainer.add(new ListView<RoomModerator>("moderators") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(final ListItem<RoomModerator> item) {
-				RoomModerator moderator = item.getModelObject();
-				Label name = new Label("uName", moderator.getUser().getFirstname() + " " + moderator.getUser().getLastname());
-				if (moderator.getId() == null) {
-					name.add(AttributeModifier.append("class", "newItem"));
-				}
-				item.add(new CheckBox("superModerator", new PropertyModel<Boolean>(moderator, "superModerator")))
-					.add(new Label("userId", "" + moderator.getUser().getId()))
-					.add(name)
-					.add(new Label("email", moderator.getUser().getAddress().getEmail()))
-					.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
-						private static final long serialVersionUID = 1L;
-
-						@Override
-						protected void onSubmit(AjaxRequestTarget target) {
-							RoomForm.this.getModelObject().getModerators().remove(item.getIndex());
-							target.add(moderatorContainer);
-						}
-					});
-			}
-		}).setOutputMarkupId(true));
-
-		add(new CheckBox("moderated"));
-
-		add(new TextField<String>("confno").setEnabled(false));
-		add(pin);
-		pin.setEnabled(getModelObject().isSipEnabled());
-		add(new TextField<String>("ownerId").setEnabled(false));
-		add(new AjaxCheckBox("sipEnabled") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onUpdate(AjaxRequestTarget target) {
-				updateView(target);
-			}
-		}.setOutputMarkupId(true));
-
-		// attach an ajax validation behavior to all form component's keydown
-		// event and throttle it down to once per second
-		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
-	}
-
-	void updateClients(AjaxRequestTarget target) {
-		long roomId = (getModelObject().getId() != null ? getModelObject().getId() : 0);
-		final List<Client> clientsInRoom = getBean(ISessionManager.class).getClientListByRoom(roomId);
-		clients.setDefaultModelObject(clientsInRoom);
-		target.add(clientsContainer);
-	}
-
-	@Override
-	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-		Room r = getModelObject();
-		boolean newRoom = r.getId() == null;
-		r = getBean(RoomDao.class).update(r, getUserId());
-		if (newRoom) {
-			for (RoomModerator rm : r.getModerators()) {
-				rm.setRoomId(r.getId());
-			}
-			// FIXME double update
-			getBean(RoomDao.class).update(getModelObject(), getUserId());
-		}
-		hideNewRecord();
-		updateView(target);
-	}
-
-	@Override
-	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
-		setModelObject(new Room());
-		updateView(target);
-	}
-
-	@Override
-	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-		Room r = getModelObject();
-		if (r.getId() != null) {
-			r = getBean(RoomDao.class).get(r.getId());
-		} else {
-			r = new Room();
-		}
-		setModelObject(r);
-		updateView(target);
-	}
-
-	@Override
-	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-		getBean(RoomDao.class).delete(getModelObject(), getUserId());
-		target.add(roomList);
-		setModelObject(new Room());
-		updateView(target);
-	}
-
-	@Override
-	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	public void updateView(AjaxRequestTarget target) {
-		target.add(this);
-		target.add(roomList);
-		target.add(pin.setEnabled(getModelObject().isSipEnabled()));
-		updateClients(target);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onDetach() {
-		moderator2add.detach();
-		super.onDetach();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.rooms;
+
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.db.entity.room.RoomGroup;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
+import org.wicketstuff.select2.ChoiceProvider;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.Select2Choice;
+import org.wicketstuff.select2.Select2MultiChoice;
+
+public class RoomForm extends AdminBaseForm<Room> {
+	private static final long serialVersionUID = 1L;
+	private final static List<Long> DROPDOWN_NUMBER_OF_PARTICIPANTS = Arrays.asList(2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L, 20L, 25L, 32L, 50L,
+			100L, 150L, 200L, 500L, 1000L);
+	private final WebMarkupContainer roomList;
+	private final TextField<String> pin = new TextField<>("pin");
+	private final WebMarkupContainer moderatorContainer = new WebMarkupContainer("moderatorContainer");
+	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
+	private final ListView<Client> clients = new ListView<Client>("clients", new ArrayList<>()) {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void populateItem(final ListItem<Client> item) {
+			Client client = item.getModelObject();
+			item.add(new Label("clientId", "" + client.getId()))
+				.add(new Label("clientLogin", "" + client.getUsername()))
+				.add(new ConfirmableAjaxBorder("clientDelete", getString("80"), getString("833")) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target) {
+						Client c = item.getModelObject();
+						getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
+								, c.getServer() == null ? 0 : c.getServer().getId());
+
+						updateClients(target);
+					}
+				});
+		}
+	};
+	private IModel<User> moderator2add = Model.of((User)null);
+
+	public RoomForm(String id, WebMarkupContainer roomList, final Room room) {
+		super(id, new CompoundPropertyModel<>(room));
+		this.roomList = roomList;
+		setOutputMarkupId(true);
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		RequiredTextField<String> name = new RequiredTextField<>("name");
+		name.setLabel(new Model<>(Application.getString(193)));
+		add(name);
+
+		add(new DropDownChoice<>("numberOfPartizipants", //
+				DROPDOWN_NUMBER_OF_PARTICIPANTS, //
+				new ChoiceRenderer<Long>() {
+					private static final long serialVersionUID = 1L;
+					@Override
+					public Object getDisplayValue(Long id) {
+						return id;
+					}
+					@Override
+					public String getIdValue(Long id, int index) {
+						return "" + id;
+					}
+				}));
+
+		add(new RoomTypeDropDown("type").setRequired(true).setLabel(Model.of(Application.getString(194))));
+
+		add(new TextArea<String>("comment"));
+
+		boolean isGroupAdmin = hasGroupAdminLevel(getRights());
+		add(new CheckBox("appointment").setEnabled(false));
+		add(new CheckBox("ispublic").setEnabled(!isGroupAdmin));
+
+		List<Group> orgList = isGroupAdmin
+				? getBean(GroupDao.class).get(null, getUserId(), 0, Integer.MAX_VALUE, null)
+				: getBean(GroupDao.class).get(0, Integer.MAX_VALUE);
+		final List<RoomGroup> orgRooms = new ArrayList<>(orgList.size());
+		for (Group org : orgList) {
+			orgRooms.add(new RoomGroup(org, getModelObject()));
+		}
+		add(new Select2MultiChoice<>("roomGroups", null, new ChoiceProvider<RoomGroup>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public String getDisplayValue(RoomGroup choice) {
+				String name = choice.getGroup().getName();
+				return name == null ? "" : name;
+			}
+
+			@Override
+			public String getIdValue(RoomGroup choice) {
+				Long id = choice.getGroup().getId();
+				return id == null ? null : "" + id;
+			}
+
+			@Override
+			public void query(String term, int page, Response<RoomGroup> response) {
+				for (RoomGroup or : orgRooms) {
+					if (Strings.isEmpty(term) || or.getGroup().getName().contains(term)) {
+						response.add(or);
+					}
+				}
+			}
+
+			@Override
+			public Collection<RoomGroup> toChoices(Collection<String> _ids) {
+				List<Long> ids = new ArrayList<>();
+				for (String id : _ids) {
+					ids.add(Long.valueOf(id));
+				}
+				List<RoomGroup> list = new ArrayList<>();
+				for (Group o : getBean(GroupDao.class).get(ids)) {
+					list.add(new RoomGroup(o, RoomForm.this.getModelObject()));
+				}
+				return list;
+			}
+		}).setLabel(Model.of(getString("828"))).setRequired(isGroupAdmin));
+
+		add(new CheckBox("isDemoRoom"));
+		TextField<Integer> demoTime = new TextField<>("demoTime");
+		demoTime.setLabel(new Model<>(Application.getString(637)));
+		add(demoTime);
+		add(new CheckBox("allowUserQuestions"));
+		add(new CheckBox("audioOnly"));
+		add(new CheckBox("closed"));
+		add(new TextField<String>("redirectURL"));
+		add(new CheckBox("waitForRecording"));
+		add(new CheckBox("allowRecording"));
+		add(new CheckBox("chatModerated"));
+
+		add(new Select2MultiChoice<>("hiddenElements", null, new ChoiceProvider<RoomElement>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public String getDisplayValue(RoomElement choice) {
+				return choice.name();
+			}
+
+			@Override
+			public String getIdValue(RoomElement choice) {
+				return choice.name();
+			}
+
+			@Override
+			public void query(String term, int page, Response<RoomElement> response) {
+				for (RoomElement r : RoomElement.values()) {
+					if (Strings.isEmpty(term) || r.name().contains(term)) {
+						response.add(r);
+					}
+				}
+			}
+
+			@Override
+			public Collection<RoomElement> toChoices(Collection<String> ids) {
+				Collection<RoomElement> rights = new ArrayList<>(ids.size());
+				for (String id : ids) {
+					rights.add(RoomElement.valueOf(id));
+				}
+				return rights;
+			}
+		}));
+		add(new CheckBox("chatOpened"));
+		add(new CheckBox("filesOpened"));
+		add(new CheckBox("autoVideoSelect"));
+
+		// Users in this Room
+		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
+
+		// Moderators
+		final Select2Choice<User> moderatorChoice = new Select2Choice<>("moderator2add", moderator2add, new AdminUserChoiceProvider() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void query(String term, int page, Response<User> response) {
+				response.addAll(getBean(UserDao.class).get(term, false, page * PAGE_SIZE, PAGE_SIZE));
+				response.setHasMore(PAGE_SIZE == response.getResults().size());
+			}
+
+			@Override
+			public String getDisplayValue(User choice) {
+				Address a = choice.getAddress();
+				return String.format("\"%s %s\" <%s>", choice.getFirstname(), choice.getLastname(), a == null ? "" : a.getEmail());
+			}
+		});
+		add(moderatorChoice.add(new AjaxFormComponentUpdatingBehavior("change") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				Room r = RoomForm.this.getModelObject();
+				User u = moderator2add.getObject();
+				boolean found = false;
+				if (u != null) {
+					if (r.getModerators() == null) {
+						r.setModerators(new ArrayList<RoomModerator>());
+					}
+					for (RoomModerator rm : r.getModerators()) {
+						if (rm.getUser().getId().equals(u.getId())) {
+							found = true;
+							break;
+						}
+					}
+					if (!found) {
+						RoomModerator rm = new RoomModerator();
+						rm.setRoomId(r.getId());
+						rm.setUser(u);
+						r.getModerators().add(0, rm);
+						moderator2add.setObject(null);
+						target.add(moderatorContainer, moderatorChoice);
+					}
+				}
+			}
+		}).setOutputMarkupId(true));
+		add(moderatorContainer.add(new ListView<RoomModerator>("moderators") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final ListItem<RoomModerator> item) {
+				RoomModerator moderator = item.getModelObject();
+				Label name = new Label("uName", moderator.getUser().getFirstname() + " " + moderator.getUser().getLastname());
+				if (moderator.getId() == null) {
+					name.add(AttributeModifier.append("class", "newItem"));
+				}
+				item.add(new CheckBox("superModerator", new PropertyModel<Boolean>(moderator, "superModerator")))
+					.add(new Label("userId", "" + moderator.getUser().getId()))
+					.add(name)
+					.add(new Label("email", moderator.getUser().getAddress().getEmail()))
+					.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						protected void onSubmit(AjaxRequestTarget target) {
+							RoomForm.this.getModelObject().getModerators().remove(item.getIndex());
+							target.add(moderatorContainer);
+						}
+					});
+			}
+		}).setOutputMarkupId(true));
+
+		add(new CheckBox("moderated"));
+
+		add(new TextField<String>("confno").setEnabled(false));
+		add(pin);
+		pin.setEnabled(getModelObject().isSipEnabled());
+		add(new TextField<String>("ownerId").setEnabled(false));
+		add(new AjaxCheckBox("sipEnabled") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				updateView(target);
+			}
+		}.setOutputMarkupId(true));
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+
+	void updateClients(AjaxRequestTarget target) {
+		long roomId = (getModelObject().getId() != null ? getModelObject().getId() : 0);
+		final List<Client> clientsInRoom = getBean(ISessionManager.class).getClientListByRoom(roomId);
+		clients.setDefaultModelObject(clientsInRoom);
+		target.add(clientsContainer);
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		Room r = getModelObject();
+		boolean newRoom = r.getId() == null;
+		r = getBean(RoomDao.class).update(r, getUserId());
+		if (newRoom) {
+			for (RoomModerator rm : r.getModerators()) {
+				rm.setRoomId(r.getId());
+			}
+			// FIXME double update
+			getBean(RoomDao.class).update(getModelObject(), getUserId());
+		}
+		hideNewRecord();
+		updateView(target);
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		setModelObject(new Room());
+		updateView(target);
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Room r = getModelObject();
+		if (r.getId() != null) {
+			r = getBean(RoomDao.class).get(r.getId());
+		} else {
+			r = new Room();
+		}
+		setModelObject(r);
+		updateView(target);
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		getBean(RoomDao.class).delete(getModelObject(), getUserId());
+		target.add(roomList);
+		setModelObject(new Room());
+		updateView(target);
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	public void updateView(AjaxRequestTarget target) {
+		target.add(this);
+		target.add(roomList);
+		target.add(pin.setEnabled(getModelObject().isSipEnabled()));
+		updateClients(target);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onDetach() {
+		moderator2add.detach();
+		super.onDetach();
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
index 0fa1f60..761b34e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
@@ -1,91 +1,91 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.rooms;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.entity.room.Room;
-import org.apache.openmeetings.web.admin.AdminPanel;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.openmeetings.web.data.DataViewContainer;
-import org.apache.openmeetings.web.data.OmOrderByBorder;
-import org.apache.openmeetings.web.data.SearchableGroupAdminDataProvider;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-
-@AuthorizeInstantiation({"Admin", "GroupAdmin"})
-public class RoomsPanel extends AdminPanel {
-	private static final long serialVersionUID = -1L;
-	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
-	private RoomForm form;
-
-	public RoomsPanel(String id) {
-		super(id);
-		SearchableDataView<Room> dataView = new SearchableDataView<Room>("roomList", new SearchableGroupAdminDataProvider<>(RoomDao.class)) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(final Item<Room> item) {
-				Room room = item.getModelObject();
-				final Long roomId = room.getId();
-				item.add(new Label("id"));
-				item.add(new Label("name"));
-				item.add(new Label("ispublic"));
-				item.add(new AjaxEventBehavior("click") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
-						form.hideNewRecord();
-						form.setModelObject(getBean(RoomDao.class).get(roomId));
-						form.updateView(target);
-						target.add(form, listContainer);
-						target.appendJavaScript("adminPanelInit();");
-					}
-				});
-				item.add(AttributeModifier.replace("class", getRowClass(room.getId(), form.getModelObject().getId())));
-			}
-		};
-
-		add(listContainer.add(dataView).setOutputMarkupId(true));
-		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
-			private static final long serialVersionUID = -1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				target.add(listContainer);
-			}
-		};
-		DataViewContainer<Room> container = new DataViewContainer<>(listContainer, dataView, navigator);
-		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
-			.addLink(new OmOrderByBorder<>("orderByName", "name", container))
-			.addLink(new OmOrderByBorder<>("orderByPublic", "ispublic", container));
-		add(container.getLinks());
-		add(navigator);
-
-		add(form = new RoomForm("form", listContainer, new Room()));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.rooms;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableGroupAdminDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+@AuthorizeInstantiation({"Admin", "GroupAdmin"})
+public class RoomsPanel extends AdminPanel {
+	private static final long serialVersionUID = -1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private RoomForm form;
+
+	public RoomsPanel(String id) {
+		super(id);
+		SearchableDataView<Room> dataView = new SearchableDataView<Room>("roomList", new SearchableGroupAdminDataProvider<>(RoomDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Room> item) {
+				Room room = item.getModelObject();
+				final Long roomId = room.getId();
+				item.add(new Label("id"));
+				item.add(new Label("name"));
+				item.add(new Label("ispublic"));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						form.hideNewRecord();
+						form.setModelObject(getBean(RoomDao.class).get(roomId));
+						form.updateView(target);
+						target.add(form, listContainer);
+						target.appendJavaScript("adminPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", getRowClass(room.getId(), form.getModelObject().getId())));
+			}
+		};
+
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = -1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Room> container = new DataViewContainer<>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
+			.addLink(new OmOrderByBorder<>("orderByName", "name", container))
+			.addLink(new OmOrderByBorder<>("orderByPublic", "ispublic", container));
+		add(container.getLinks());
+		add(navigator);
+
+		add(form = new RoomForm("form", listContainer, new Room()));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
index e93a4a2..c40315e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
@@ -1,140 +1,140 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.servers;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
-import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
-
-import org.apache.openmeetings.db.dao.server.ServerDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
-
-/**
- * Form component to insert/update/delete {@link Server}
- *
- * @author swagner
- *
- */
-public class ServerForm extends AdminBaseForm<Server> {
-	private final WebMarkupContainer listContainer;
-	private static final long serialVersionUID = 1L;
-
-	public ServerForm(String id, WebMarkupContainer listContainer, final Server server) {
-		super(id, new CompoundPropertyModel<>(server));
-		setOutputMarkupId(true);
-		this.listContainer = listContainer;
-
-		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1500))));
-		add(new CheckBox("active"));
-		add(new RequiredTextField<String>("address").setLabel(Model.of(Application.getString(1501))));
-		add(new TextField<Integer>("port"));
-		add(new TextField<String>("user"));
-		add(new TextField<String>("pass"));
-		add(new TextField<String>("webapp"));
-		add(new TextField<String>("protocol"));
-		add(forDatePattern("lastPing", WEB_DATE_PATTERN));
-		//add(new Label("pingRunning"));
-		add(forDatePattern("inserted", WEB_DATE_PATTERN));
-		add(new Label("insertedby.login"));
-		add(forDatePattern("updated", WEB_DATE_PATTERN));
-		add(new Label("updatedby.login"));
-		add(new TextArea<String>("comment"));
-
-		// attach an ajax validation behavior to all form component's keydown
-		// event and throttle it down to once per second
-		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
-	}
-
-	@Override
-	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-		Application.getBean(ServerDao.class).update(getModelObject(), WebSession.getUserId());
-		Server server = Application.getBean(ServerDao.class).get(getModelObject().getId());
-		setModelObject(server);
-		hideNewRecord();
-		target.add(this);
-		target.add(listContainer);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
-		Server s = new Server();
-		s.setWebapp("openmeetings");
-		s.setProtocol("http");
-		setModelObject(s);
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-		Server server = getModelObject();
-		if (server.getId() != null) {
-			server = Application.getBean(ServerDao.class).get(server.getId());
-		} else {
-			server = new Server();
-		}
-		setModelObject(server);
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-		Application.getBean(ServerDao.class).delete(getModelObject(), WebSession.getUserId());
-		this.setModelObject(new Server());
-		target.add(listContainer);
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.servers;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+/**
+ * Form component to insert/update/delete {@link Server}
+ *
+ * @author swagner
+ *
+ */
+public class ServerForm extends AdminBaseForm<Server> {
+	private final WebMarkupContainer listContainer;
+	private static final long serialVersionUID = 1L;
+
+	public ServerForm(String id, WebMarkupContainer listContainer, final Server server) {
+		super(id, new CompoundPropertyModel<>(server));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+
+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1500))));
+		add(new CheckBox("active"));
+		add(new RequiredTextField<String>("address").setLabel(Model.of(Application.getString(1501))));
+		add(new TextField<Integer>("port"));
+		add(new TextField<String>("user"));
+		add(new TextField<String>("pass"));
+		add(new TextField<String>("webapp"));
+		add(new TextField<String>("protocol"));
+		add(forDatePattern("lastPing", WEB_DATE_PATTERN));
+		//add(new Label("pingRunning"));
+		add(forDatePattern("inserted", WEB_DATE_PATTERN));
+		add(new Label("insertedby.login"));
+		add(forDatePattern("updated", WEB_DATE_PATTERN));
+		add(new Label("updatedby.login"));
+		add(new TextArea<String>("comment"));
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(ServerDao.class).update(getModelObject(), WebSession.getUserId());
+		Server server = Application.getBean(ServerDao.class).get(getModelObject().getId());
+		setModelObject(server);
+		hideNewRecord();
+		target.add(this);
+		target.add(listContainer);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		Server s = new Server();
+		s.setWebapp("openmeetings");
+		s.setProtocol("http");
+		setModelObject(s);
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		Server server = getModelObject();
+		if (server.getId() != null) {
+			server = Application.getBean(ServerDao.class).get(server.getId());
+		} else {
+			server = new Server();
+		}
+		setModelObject(server);
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(ServerDao.class).delete(getModelObject(), WebSession.getUserId());
+		this.setModelObject(new Server());
+		target.add(listContainer);
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
index b7889b3..1a60552 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
@@ -1,95 +1,95 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.servers;
-
-import org.apache.openmeetings.db.dao.server.ServerDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.web.admin.AdminPanel;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.openmeetings.web.data.DataViewContainer;
-import org.apache.openmeetings.web.data.OmOrderByBorder;
-import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-
-/**
- * Form component with list and form to manipulate {@link Server}
- *
- * @author swagner
- *
- */
-public class ServersPanel extends AdminPanel {
-	private static final long serialVersionUID = 1L;
-	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
-	private ServerForm form;
-
-	public ServersPanel(String id) {
-		super(id);
-		SearchableDataView<Server> dataView = new SearchableDataView<Server>("serverList",
-				new SearchableDataProvider<>(ServerDao.class)) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(final Item<Server> item) {
-				final Server server = item.getModelObject();
-				item.add(new Label("id"));
-				item.add(new Label("name"));
-				item.add(new Label("address"));
-				item.add(new AjaxEventBehavior("click") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
-						form.setModelObject(server);
-						form.hideNewRecord();
-						target.add(form, listContainer);
-						target.appendJavaScript("adminPanelInit();");
-					}
-				});
-				item.add(AttributeModifier.replace("class", getRowClass(server.getId(), form.getModelObject().getId())));
-			}
-		};
-
-		add(listContainer.add(dataView).setOutputMarkupId(true));
-		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				target.add(listContainer);
-			}
-		};
-		DataViewContainer<Server> container = new DataViewContainer<>(listContainer, dataView, navigator);
-		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
-			.addLink(new OmOrderByBorder<>("orderByName", "name", container))
-			.addLink(new OmOrderByBorder<>("orderByAddress", "address", container));
-		add(container.getLinks());
-		add(navigator);
-
-		form = new ServerForm("form", listContainer, new Server());
-		form.showNewRecord();
-		add(form);
-
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.servers;
+
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * Form component with list and form to manipulate {@link Server}
+ *
+ * @author swagner
+ *
+ */
+public class ServersPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private ServerForm form;
+
+	public ServersPanel(String id) {
+		super(id);
+		SearchableDataView<Server> dataView = new SearchableDataView<Server>("serverList",
+				new SearchableDataProvider<>(ServerDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Server> item) {
+				final Server server = item.getModelObject();
+				item.add(new Label("id"));
+				item.add(new Label("name"));
+				item.add(new Label("address"));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(server);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("adminPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", getRowClass(server.getId(), form.getModelObject().getId())));
+			}
+		};
+
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Server> container = new DataViewContainer<>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
+			.addLink(new OmOrderByBorder<>("orderByName", "name", container))
+			.addLink(new OmOrderByBorder<>("orderByAddress", "address", container));
+		add(container.getLinks());
+		add(navigator);
+
+		form = new ServerForm("form", listContainer, new Server());
+		form.showNewRecord();
+		add(form);
+
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
index 30644c6..dadb391 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
@@ -1,314 +1,314 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.users;
-
-import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
-import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getRights;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
-import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.dao.server.LdapConfigDao;
-import org.apache.openmeetings.db.dao.server.OAuth2Dao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.server.LdapConfig;
-import org.apache.openmeetings.db.entity.server.OAuthServer;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.entity.user.User.Right;
-import org.apache.openmeetings.db.entity.user.User.Type;
-import org.apache.openmeetings.service.mail.EmailManager;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.ComunityUserForm;
-import org.apache.openmeetings.web.common.GeneralUserForm;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.ChoiceRenderer;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
-import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.util.time.Duration;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.wicketstuff.select2.ChoiceProvider;
-import org.wicketstuff.select2.Response;
-import org.wicketstuff.select2.Select2MultiChoice;
-
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-
-/**
- * CRUD operations in form for {@link User}
- *
- * @author swagner
- *
- */
-public class UserForm extends AdminBaseForm<User> {
-	private static final long serialVersionUID = 1L;
-	private static final Logger log = Red5LoggerFactory.getLogger(UserForm.class, webAppRootKey);
-	private final WebMarkupContainer listContainer;
-	private final WebMarkupContainer domain = new WebMarkupContainer("domain");
-	private GeneralUserForm generalForm;
-	private final RequiredTextField<String> login = new RequiredTextField<>("login");
-	private final MessageDialog warning;
-	private final DropDownChoice<Long> domainId = new DropDownChoice<>("domainId");
-
-	public UserForm(String id, WebMarkupContainer listContainer, final User user, MessageDialog warning) {
-		super(id, new CompoundPropertyModel<>(user));
-		setOutputMarkupId(true);
-		this.listContainer = listContainer;
-		this.warning = warning;
-		// Add form fields
-		addFormFields();
-
-		// attach an ajax validation behavior to all form component's keydown
-		// event and throttle it down to once per second
-		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
-	}
-
-	@Override
-	protected void onModelChanged() {
-		super.onModelChanged();
-		generalForm.updateModelObject(getModelObject(), true);
-	}
-
-	@Override
-	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-		User u = getModelObject();
-		try {
-			boolean isNew = (u.getId() == null);
-			boolean sendEmailAtRegister = (1 == getBean(ConfigurationDao.class).getConfValue("sendEmailAtRegister", Integer.class, "0"));
-			if (isNew && sendEmailAtRegister) {
-				u.setActivatehash(UUID.randomUUID().toString());
-			}
-			u = getBean(UserDao.class).update(u, generalForm.getPasswordField().getConvertedInput(), getUserId());
-			if (isNew && sendEmailAtRegister) {
-				String sendMail = getBean(EmailManager.class).sendMail(login.getValue(), generalForm.getEmail(), u.getActivatehash(), false, null);
-				if (!sendMail.equals("success")) {
-					throw new Exception("Mail for new user is not sent");
-				}
-			}
-		} catch (Exception e) {
-			// FIXME update feedback with the error details
-			log.error("[onSaveSubmit]: ", e);
-		}
-		setModelObject(u);
-		hideNewRecord();
-		target.add(this);
-		target.add(listContainer);
-		target.appendJavaScript("adminPanelInit();");
-		if (u.getGroupUsers().isEmpty()) {
-			warning.open(target);
-		}
-	}
-
-	@Override
-	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
-		UserDao userDao = getBean(UserDao.class);
-		setModelObject(userDao.getNewUserInstance(userDao.get(getUserId())));
-		update(target);
-	}
-
-	@Override
-	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-		User user = getModelObject();
-		if (user.getId() != null) {
-			user = getBean(UserDao.class).get(user.getId());
-		} else {
-			user = getBean(UserDao.class).getNewUserInstance(null);
-		}
-		setModelObject(user);
-		update(target);
-	}
-
-	@Override
-	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-		UserDao userDao = getBean(UserDao.class);
-		userDao.delete(getModelObject(), getUserId());
-		setModelObject(userDao.getNewUserInstance(userDao.get(getUserId())));
-		update(target);
-	}
-
-	/**
-	 * Add the fields to the form
-	 */
-	private void addFormFields() {
-		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-		login.setLabel(Model.of(Application.getString(132)));
-		add(login.add(minimumLength(getMinLoginLength(cfgDao))));
-
-		add(generalForm = new GeneralUserForm("general", getModel(), true));
-
-		add(new DropDownChoice<>("type", Arrays.asList(Type.values())).add(new OnChangeAjaxBehavior() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onUpdate(AjaxRequestTarget target) {
-				updateDomain(target);
-			}
-		}));
-		update(null);
-		add(domain.add(domainId).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true));
-		add(new Label("ownerId"));
-		add(forDatePattern("inserted", WEB_DATE_PATTERN));
-		add(forDatePattern("updated", WEB_DATE_PATTERN));
-
-		add(new CheckBox("forceTimeZoneCheck"));
-
-		add(new Select2MultiChoice<>("rights", null, new ChoiceProvider<Right>() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public String getDisplayValue(Right choice) {
-				return choice.name();
-			}
-
-			@Override
-			public String getIdValue(Right choice) {
-				return choice.name();
-			}
-
-			@Override
-			public void query(String term, int page, Response<Right> response) {
-				boolean isGroupAdmin = hasGroupAdminLevel(getRights());
-				for (Right r : Right.values()) {
-					if (Right.GroupAdmin == r) {
-						continue;
-					}
-					if (isGroupAdmin && (Right.Admin == r || Right.Soap == r)) {
-						continue;
-					}
-					if (Strings.isEmpty(term) || r.name().contains(term)) {
-						response.add(r);
-					}
-				}
-			}
-
-			@Override
-			public Collection<Right> toChoices(Collection<String> ids) {
-				Collection<Right> rights = new ArrayList<>(ids.size());
-				for (String id : ids) {
-					rights.add(Right.valueOf(id));
-				}
-				return rights;
-			}
-		}));
-		add(new ComunityUserForm("comunity", getModel()));
-	}
-
-	public void updateDomain(AjaxRequestTarget target) {
-		User u = getModelObject();
-		final Map<Long, String> values = new Hashtable<>();
-		List<Long> ids = new ArrayList<>();
-		if (u.getType() == Type.ldap) {
-			for (LdapConfig c : getBean(LdapConfigDao.class).getActive()) {
-				ids.add(c.getId());
-				values.put(c.getId(), c.getName());
-			}
-		}
-		if (u.getType() == Type.oauth) {
-			for (OAuthServer s : getBean(OAuth2Dao.class).getActive()) {
-				ids.add(s.getId());
-				values.put(s.getId(), s.getName());
-			}
-		}
-		domainId.setChoices(ids);
-		domainId.setChoiceRenderer(new ChoiceRenderer<Long>() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public Object getDisplayValue(Long object) {
-				return values.get(object);
-			}
-
-			@Override
-			public String getIdValue(Long object, int index) {
-				return "" + object;
-			}
-		});
-		domain.setVisible(u.getType() == Type.ldap || u.getType() == Type.oauth);
-		if (target != null) {
-			target.add(domain);
-		}
-	}
-
-	public void update(AjaxRequestTarget target) {
-		updateDomain(target);
-		if (target != null) {
-			target.add(this, listContainer);
-			target.appendJavaScript("adminPanelInit();");
-		}
-	}
-
-	@Override
-	protected void onValidate() {
-		User u = getModelObject();
-		if(!getBean(UserDao.class).checkLogin(login.getConvertedInput(), u.getType(), u.getDomainId(), u.getId())) {
-			error(getString("105"));
-		}
-	}
-
-	@Override
-	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-		//ignore validation errors
-		onNewSubmit(target, form);
-	}
-
-	@Override
-	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-		//ignore validation errors
-		onDeleteSubmit(target, form);
-	}
-
-	@Override
-	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
-		return new PanelMarkupSourcingStrategy(false);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.users;
+
+import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.service.mail.EmailManager;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ComunityUserForm;
+import org.apache.openmeetings.web.common.GeneralUserForm;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.wicketstuff.select2.ChoiceProvider;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.Select2MultiChoice;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+/**
+ * CRUD operations in form for {@link User}
+ *
+ * @author swagner
+ *
+ */
+public class UserForm extends AdminBaseForm<User> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(UserForm.class, webAppRootKey);
+	private final WebMarkupContainer listContainer;
+	private final WebMarkupContainer domain = new WebMarkupContainer("domain");
+	private GeneralUserForm generalForm;
+	private final RequiredTextField<String> login = new RequiredTextField<>("login");
+	private final MessageDialog warning;
+	private final DropDownChoice<Long> domainId = new DropDownChoice<>("domainId");
+
+	public UserForm(String id, WebMarkupContainer listContainer, final User user, MessageDialog warning) {
+		super(id, new CompoundPropertyModel<>(user));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+		this.warning = warning;
+		// Add form fields
+		addFormFields();
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+
+	@Override
+	protected void onModelChanged() {
+		super.onModelChanged();
+		generalForm.updateModelObject(getModelObject(), true);
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		User u = getModelObject();
+		try {
+			boolean isNew = (u.getId() == null);
+			boolean sendEmailAtRegister = (1 == getBean(ConfigurationDao.class).getConfValue("sendEmailAtRegister", Integer.class, "0"));
+			if (isNew && sendEmailAtRegister) {
+				u.setActivatehash(UUID.randomUUID().toString());
+			}
+			u = getBean(UserDao.class).update(u, generalForm.getPasswordField().getConvertedInput(), getUserId());
+			if (isNew && sendEmailAtRegister) {
+				String sendMail = getBean(EmailManager.class).sendMail(login.getValue(), generalForm.getEmail(), u.getActivatehash(), false, null);
+				if (!sendMail.equals("success")) {
+					throw new Exception("Mail for new user is not sent");
+				}
+			}
+		} catch (Exception e) {
+			// FIXME update feedback with the error details
+			log.error("[onSaveSubmit]: ", e);
+		}
+		setModelObject(u);
+		hideNewRecord();
+		target.add(this);
+		target.add(listContainer);
+		target.appendJavaScript("adminPanelInit();");
+		if (u.getGroupUsers().isEmpty()) {
+			warning.open(target);
+		}
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		UserDao userDao = getBean(UserDao.class);
+		setModelObject(userDao.getNewUserInstance(userDao.get(getUserId())));
+		update(target);
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		User user = getModelObject();
+		if (user.getId() != null) {
+			user = getBean(UserDao.class).get(user.getId());
+		} else {
+			user = getBean(UserDao.class).getNewUserInstance(null);
+		}
+		setModelObject(user);
+		update(target);
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		UserDao userDao = getBean(UserDao.class);
+		userDao.delete(getModelObject(), getUserId());
+		setModelObject(userDao.getNewUserInstance(userDao.get(getUserId())));
+		update(target);
+	}
+
+	/**
+	 * Add the fields to the form
+	 */
+	private void addFormFields() {
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		login.setLabel(Model.of(Application.getString(132)));
+		add(login.add(minimumLength(getMinLoginLength(cfgDao))));
+
+		add(generalForm = new GeneralUserForm("general", getModel(), true));
+
+		add(new DropDownChoice<>("type", Arrays.asList(Type.values())).add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				updateDomain(target);
+			}
+		}));
+		update(null);
+		add(domain.add(domainId).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true));
+		add(new Label("ownerId"));
+		add(forDatePattern("inserted", WEB_DATE_PATTERN));
+		add(forDatePattern("updated", WEB_DATE_PATTERN));
+
+		add(new CheckBox("forceTimeZoneCheck"));
+
+		add(new Select2MultiChoice<>("rights", null, new ChoiceProvider<Right>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public String getDisplayValue(Right choice) {
+				return choice.name();
+			}
+
+			@Override
+			public String getIdValue(Right choice) {
+				return choice.name();
+			}
+
+			@Override
+			public void query(String term, int page, Response<Right> response) {
+				boolean isGroupAdmin = hasGroupAdminLevel(getRights());
+				for (Right r : Right.values()) {
+					if (Right.GroupAdmin == r) {
+						continue;
+					}
+					if (isGroupAdmin && (Right.Admin == r || Right.Soap == r)) {
+						continue;
+					}
+					if (Strings.isEmpty(term) || r.name().contains(term)) {
+						response.add(r);
+					}
+				}
+			}
+
+			@Override
+			public Collection<Right> toChoices(Collection<String> ids) {
+				Collection<Right> rights = new ArrayList<>(ids.size());
+				for (String id : ids) {
+					rights.add(Right.valueOf(id));
+				}
+				return rights;
+			}
+		}));
+		add(new ComunityUserForm("comunity", getModel()));
+	}
+
+	public void updateDomain(AjaxRequestTarget target) {
+		User u = getModelObject();
+		final Map<Long, String> values = new Hashtable<>();
+		List<Long> ids = new ArrayList<>();
+		if (u.getType() == Type.ldap) {
+			for (LdapConfig c : getBean(LdapConfigDao.class).getActive()) {
+				ids.add(c.getId());
+				values.put(c.getId(), c.getName());
+			}
+		}
+		if (u.getType() == Type.oauth) {
+			for (OAuthServer s : getBean(OAuth2Dao.class).getActive()) {
+				ids.add(s.getId());
+				values.put(s.getId(), s.getName());
+			}
+		}
+		domainId.setChoices(ids);
+		domainId.setChoiceRenderer(new ChoiceRenderer<Long>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public Object getDisplayValue(Long object) {
+				return values.get(object);
+			}
+
+			@Override
+			public String getIdValue(Long object, int index) {
+				return "" + object;
+			}
+		});
+		domain.setVisible(u.getType() == Type.ldap || u.getType() == Type.oauth);
+		if (target != null) {
+			target.add(domain);
+		}
+	}
+
+	public void update(AjaxRequestTarget target) {
+		updateDomain(target);
+		if (target != null) {
+			target.add(this, listContainer);
+			target.appendJavaScript("adminPanelInit();");
+		}
+	}
+
+	@Override
+	protected void onValidate() {
+		User u = getModelObject();
+		if(!getBean(UserDao.class).checkLogin(login.getConvertedInput(), u.getType(), u.getDomainId(), u.getId())) {
+			error(getString("105"));
+		}
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		//ignore validation errors
+		onNewSubmit(target, form);
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		//ignore validation errors
+		onDeleteSubmit(target, form);
+	}
+
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/LabelResourceLoader.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
index aecfe6d..a1352ec 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
@@ -1,65 +1,65 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.app;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.resource.loader.IStringResourceLoader;
-
-/**
- * Map property values to OpenMeetings labelid's and get the string
- *
- * @author swagner
- *
- */
-public class LabelResourceLoader implements IStringResourceLoader {
-
-	private static Map<String,Long> STRING_LABEL_MAPPING = new HashMap<>();
-
-	static {
-		STRING_LABEL_MAPPING.put("PagingNavigator.first", 368L);
-		STRING_LABEL_MAPPING.put("PagingNavigator.previous", 369L);
-		STRING_LABEL_MAPPING.put("PagingNavigator.next", 370L);
-		STRING_LABEL_MAPPING.put("PagingNavigator.last", 371L);
-	}
-
-	@Override
-	public String loadStringResource(Class<?> clazz, String key, Locale locale,
-			String style, String variation) {
-		return getStringByPropertyKey(key);
-	}
-
-	@Override
-	public String loadStringResource(Component component, String key,
-			Locale locale, String style, String variation) {
-		return getStringByPropertyKey(key);
-	}
-
-	private static String getStringByPropertyKey(String key) {
-		Long labelId = STRING_LABEL_MAPPING.get(key);
-		if (labelId == null) {
-			return null;
-		}
-		return Application.getString(labelId);
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.resource.loader.IStringResourceLoader;
+
+/**
+ * Map property values to OpenMeetings labelid's and get the string
+ *
+ * @author swagner
+ *
+ */
+public class LabelResourceLoader implements IStringResourceLoader {
+
+	private static Map<String,Long> STRING_LABEL_MAPPING = new HashMap<>();
+
+	static {
+		STRING_LABEL_MAPPING.put("PagingNavigator.first", 368L);
+		STRING_LABEL_MAPPING.put("PagingNavigator.previous", 369L);
+		STRING_LABEL_MAPPING.put("PagingNavigator.next", 370L);
+		STRING_LABEL_MAPPING.put("PagingNavigator.last", 371L);
+	}
+
+	@Override
+	public String loadStringResource(Class<?> clazz, String key, Locale locale,
+			String style, String variation) {
+		return getStringByPropertyKey(key);
+	}
+
+	@Override
+	public String loadStringResource(Component component, String key,
+			Locale locale, String style, String variation) {
+		return getStringByPropertyKey(key);
+	}
+
+	private static String getStringByPropertyKey(String key) {
+		Long labelId = STRING_LABEL_MAPPING.get(key);
+		if (labelId == null) {
+			return null;
+		}
+		return Application.getString(labelId);
+	}
+
+}


[15/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/CustomCryptMechanism.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/CustomCryptMechanism.xml b/openmeetings-server/src/site/xdoc/CustomCryptMechanism.xml
index 8bef094..fcf97ef 100644
--- a/openmeetings-server/src/site/xdoc/CustomCryptMechanism.xml
+++ b/openmeetings-server/src/site/xdoc/CustomCryptMechanism.xml
@@ -1,103 +1,103 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Howto create a Custom Crypt styles</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="Configuration of Custom Crypt-Style">
-			<p>
-				You can use custom Crypt-Types, but you should decide during
-				installation which Type of encryption you want to use. By default
-				two type are available:
-			</p>
-
-			<ul>
-				<li>org.apache.openmeetings.util.crypt.MD5Implementation - this uses common MD5
-					Crypt like PHP does, this is the default one (results in something
-					like: fe01ce2a7fbac8fafaed7c982a04e229)</li>
-				<li>org.apache.openmeetings.util.crypt.MD5CryptImplementation - does use
-					BSD-Style of encryption using a salt (results in something like:
-					$1$GMsj7F2I$5S3r9CeukXGXNwf6b4sph1)</li>
-			</ul>
-			<p>
-				You can edit the config-key during Installation or later in the
-				Administration Panel. But if you change it using the
-				Administration-Panel previous passwords might be not working anymore
-				as they are encrypted with another algorithm.
-			</p>
-		</section>
-		<section name="Configuration of Custom Crypt-Style">
-			<p>
-				To add your own crypt style you need to write a class which
-				implements the interface: org.apache.openmeetings.util.crypt.ICrypt
-				<br />
-				Example of an Implementation:
-			</p>
-			<source>
-<![CDATA[
-package org.apache.openmeetings.util.crypt;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.security.NoSuchAlgorithmException;
-
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-public class MD5Implementation implements ICrypt {
-	private static final Logger log = Red5LoggerFactory.getLogger(MD5Implementation.class, webAppRootKey);
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.apache.openmeetings.utils.crypt.ICrypt#hash(java.lang.String)
-	 */
-	@Override
-	public String hash(String str) {
-		String passPhrase = null;
-		try {
-			passPhrase = MD5.checksum(str);
-		} catch (NoSuchAlgorithmException e) {
-			log.error("Error", e);
-		}
-		return passPhrase;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.apache.openmeetings.utils.crypt.ICrypt#verify(java.lang.String, java.lang.String)
-	 */
-	@Override
-	public boolean verify(String str, String hash) {
-		return hash != null && hash.equals(hash(str));
-	}
-}
-]]>
-			</source>
-			<p>To add your own Encryption-Class you need to add your class to the
-				OpenMeetings-Webapp (make it available to the webapp-classpath) and
-				use your custom-class-name instead of
-				org.apache.openmeetings.util.crypt.MD5Implementation during the Installation or
-				at runtime by editing the config-key crypt_ClassName</p>
-		</section>
-		<section name="Configuration of Custom Crypt-Style">
-			<p>credits goto Mika for sharing his Implementation of the
-				MD5Crypt-Style</p>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Howto create a Custom Crypt styles</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="Configuration of Custom Crypt-Style">
+			<p>
+				You can use custom Crypt-Types, but you should decide during
+				installation which Type of encryption you want to use. By default
+				two type are available:
+			</p>
+
+			<ul>
+				<li>org.apache.openmeetings.util.crypt.MD5Implementation - this uses common MD5
+					Crypt like PHP does, this is the default one (results in something
+					like: fe01ce2a7fbac8fafaed7c982a04e229)</li>
+				<li>org.apache.openmeetings.util.crypt.MD5CryptImplementation - does use
+					BSD-Style of encryption using a salt (results in something like:
+					$1$GMsj7F2I$5S3r9CeukXGXNwf6b4sph1)</li>
+			</ul>
+			<p>
+				You can edit the config-key during Installation or later in the
+				Administration Panel. But if you change it using the
+				Administration-Panel previous passwords might be not working anymore
+				as they are encrypted with another algorithm.
+			</p>
+		</section>
+		<section name="Configuration of Custom Crypt-Style">
+			<p>
+				To add your own crypt style you need to write a class which
+				implements the interface: org.apache.openmeetings.util.crypt.ICrypt
+				<br />
+				Example of an Implementation:
+			</p>
+			<source>
+<![CDATA[
+package org.apache.openmeetings.util.crypt;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.security.NoSuchAlgorithmException;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class MD5Implementation implements ICrypt {
+	private static final Logger log = Red5LoggerFactory.getLogger(MD5Implementation.class, webAppRootKey);
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICrypt#hash(java.lang.String)
+	 */
+	@Override
+	public String hash(String str) {
+		String passPhrase = null;
+		try {
+			passPhrase = MD5.checksum(str);
+		} catch (NoSuchAlgorithmException e) {
+			log.error("Error", e);
+		}
+		return passPhrase;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICrypt#verify(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public boolean verify(String str, String hash) {
+		return hash != null && hash.equals(hash(str));
+	}
+}
+]]>
+			</source>
+			<p>To add your own Encryption-Class you need to add your class to the
+				OpenMeetings-Webapp (make it available to the webapp-classpath) and
+				use your custom-class-name instead of
+				org.apache.openmeetings.util.crypt.MD5Implementation during the Installation or
+				at runtime by editing the config-key crypt_ClassName</p>
+		</section>
+		<section name="Configuration of Custom Crypt-Style">
+			<p>credits goto Mika for sharing his Implementation of the
+				MD5Crypt-Style</p>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/CustomRoomTypeHowTo.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/CustomRoomTypeHowTo.xml b/openmeetings-server/src/site/xdoc/CustomRoomTypeHowTo.xml
index 88a2fe6..579e423 100644
--- a/openmeetings-server/src/site/xdoc/CustomRoomTypeHowTo.xml
+++ b/openmeetings-server/src/site/xdoc/CustomRoomTypeHowTo.xml
@@ -1,104 +1,104 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Howto create a custom room type in OpenMeetings</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Why creating a custom room type in OpenMeetings">
-
-			<p>If you want to create your own styled room the best thing to do in 
-            order to be "update-save" is to create your own custom room type. There is an empty configuration 
-				by default shipped with every release of OpenMeetings, the room type "custom" (ID = 5).<br/>
-				<br/>
-            You can use that and extend it, or you can add more room types to fit your use case.
-			</p>
-			<p></p>
-		</section>
-		
-		<section name="Create your own room type class (User Interface)">
-			
-			<p>Lets start by creating your custom room type class.
-				<br/>
-					You could for example duplicate an existing room class, from <br/>
-					<tt>src/modules/conference/flexibleConferenceRoom</tt> folder, for example the 
-			flexibleConferenceRoom.lzx: Generate a duplicate, change the name, for example to 
-			myCustomConferenceRoom.lzx and edit the class name inside the file name="flexibleConferenceRoom" to
-			name="myCustomConferenceRoom". Also don't miss to add an entry to library.lzx so that the compiler 
-			will find your new class.
-			</p>
-			
-		</section>
-        
-		<section name="Create nesseccary entries in configuration tables">
-        	
-			<p>You first need to create a number of configuration files </p>
-			<ul>
-				<li>To have your roomtype available everytime you install OpenMeetings you need to add 
-					it to the default rooms: <tt>ImportInitvalues.java Method: loadDefaultRooms()</tt>. Add your entry here. 
-				You can choose any random name for the room. The ID is the important trigger for the room type 
-				to identify later. You need to run the installer so that your new room type is in the database.</li>
-				
-				<li>Add your room type in the default module configuration: 
-					<tt>src/base/moduleConfiguration.lzx</tt>, 
-				here you need to add a default class name for your room type </li>
-				
-				<li>Add your room type in the real configuration: public/config.xml, add a new entry.
-					<br/>
-					You should fix also the file <tt>public/config.xsd</tt> that is the Schema file for the public/config.xml.
-				</li>
-        		
-				<li>Add a parser entry to modify the room type mapping: 
-					<tt>base/mainMethods.lzx method: myinit</tt>. You 
-        		can see some example parsing, you should add your one similar to the existing room types.</li>
-        		
-			</ul>
-			
-		</section>
-		
-		<section name="Link your room type config with your room type class ">
-			
-			<p>Now you need to make sure that everytime the conference room is created 
-			your new class "myCustomConferenceRoom" is used. There are 3 places you need to add your mapping.</p>
-			
-			<ul>
-				<li>In the global mapping: 
-					<tt>base/mainMethods.lzx method name="setRoomValues"</tt> 
-				</li>
-				<li>In file: 
-					<tt>modules/conference/conference/roomListItem.lzx method name="initRoom"</tt> 
-				</li>
-				<li>In file: 
-					<tt>modules/invitation/autoloaderBarOnly.lzx netRemoteCallHib name="setUsernameAndSession"</tt> 
-				</li>
-			</ul>
-			
-			<p>Thats it. You can add/edit/delete your room with the new room type in the Administration > Rooms interface of 
-			OpenMeetings like any other room.</p>
-			<p>If you need to have this room type available as option in the Calendar UI, you need to add it to the combobox manually.</p>
-			
-		</section>
-		
-		
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Howto create a custom room type in OpenMeetings</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Why creating a custom room type in OpenMeetings">
+
+			<p>If you want to create your own styled room the best thing to do in 
+            order to be "update-save" is to create your own custom room type. There is an empty configuration 
+				by default shipped with every release of OpenMeetings, the room type "custom" (ID = 5).<br/>
+				<br/>
+            You can use that and extend it, or you can add more room types to fit your use case.
+			</p>
+			<p></p>
+		</section>
+		
+		<section name="Create your own room type class (User Interface)">
+			
+			<p>Lets start by creating your custom room type class.
+				<br/>
+					You could for example duplicate an existing room class, from <br/>
+					<tt>src/modules/conference/flexibleConferenceRoom</tt> folder, for example the 
+			flexibleConferenceRoom.lzx: Generate a duplicate, change the name, for example to 
+			myCustomConferenceRoom.lzx and edit the class name inside the file name="flexibleConferenceRoom" to
+			name="myCustomConferenceRoom". Also don't miss to add an entry to library.lzx so that the compiler 
+			will find your new class.
+			</p>
+			
+		</section>
+        
+		<section name="Create nesseccary entries in configuration tables">
+        	
+			<p>You first need to create a number of configuration files </p>
+			<ul>
+				<li>To have your roomtype available everytime you install OpenMeetings you need to add 
+					it to the default rooms: <tt>ImportInitvalues.java Method: loadDefaultRooms()</tt>. Add your entry here. 
+				You can choose any random name for the room. The ID is the important trigger for the room type 
+				to identify later. You need to run the installer so that your new room type is in the database.</li>
+				
+				<li>Add your room type in the default module configuration: 
+					<tt>src/base/moduleConfiguration.lzx</tt>, 
+				here you need to add a default class name for your room type </li>
+				
+				<li>Add your room type in the real configuration: public/config.xml, add a new entry.
+					<br/>
+					You should fix also the file <tt>public/config.xsd</tt> that is the Schema file for the public/config.xml.
+				</li>
+        		
+				<li>Add a parser entry to modify the room type mapping: 
+					<tt>base/mainMethods.lzx method: myinit</tt>. You 
+        		can see some example parsing, you should add your one similar to the existing room types.</li>
+        		
+			</ul>
+			
+		</section>
+		
+		<section name="Link your room type config with your room type class ">
+			
+			<p>Now you need to make sure that everytime the conference room is created 
+			your new class "myCustomConferenceRoom" is used. There are 3 places you need to add your mapping.</p>
+			
+			<ul>
+				<li>In the global mapping: 
+					<tt>base/mainMethods.lzx method name="setRoomValues"</tt> 
+				</li>
+				<li>In file: 
+					<tt>modules/conference/conference/roomListItem.lzx method name="initRoom"</tt> 
+				</li>
+				<li>In file: 
+					<tt>modules/invitation/autoloaderBarOnly.lzx netRemoteCallHib name="setUsernameAndSession"</tt> 
+				</li>
+			</ul>
+			
+			<p>Thats it. You can add/edit/delete your room with the new room type in the Administration > Rooms interface of 
+			OpenMeetings like any other room.</p>
+			<p>If you need to have this room type available as option in the Calendar UI, you need to add it to the combobox manually.</p>
+			
+		</section>
+		
+		
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/Dashboard.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/Dashboard.xml b/openmeetings-server/src/site/xdoc/Dashboard.xml
index a67504f..7c43c94 100644
--- a/openmeetings-server/src/site/xdoc/Dashboard.xml
+++ b/openmeetings-server/src/site/xdoc/Dashboard.xml
@@ -1,70 +1,70 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Changing Dashboard</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Changing Dashboard">
-
-			<p>You can configure the tabs that are visible by default at bottom
-				of the dashboard. To edit the settings, login as admin and goto
-				Administration &gt; Configuration </p>
-			<p></p>
-			<table>
-				<tr>
-					<th> Config-key </th>
-					<th> Values </th>
-					<th> Meaning </th>
-				</tr>
-				<tr>
-					<td> dashboard.show.myrooms </td>
-					<td> 0 or 1 </td>
-					<td> If the MyRooms tab should be visible or not </td>
-				</tr>
-				<tr>
-					<td> dashboard.show.chat </td>
-					<td> 0 or 1 </td>
-					<td> If the Chat tab should be visible or not </td>
-				</tr>
-				<tr>
-					<td> dashboard.show.rssfeed </td>
-					<td> 0 or 1 </td>
-					<td> If the RSS-Feed tab should be visible or not </td>
-				</tr>
-				<tr>
-					<td> rss_feed1 </td>
-					<td> http-URL </td>
-					<td> ATOM-Feed URL for the dashboard RSS Tab </td>
-				</tr>
-				<tr>
-					<td> rss_feed2 </td>
-					<td> http-URL </td>
-					<td> ATOM-Feed URL for the dashboard RSS Tab </td>
-				</tr>
-			</table>
-			<p></p>
-			<p>Changes are immediately online, no need to restart anything. </p>
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Changing Dashboard</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Changing Dashboard">
+
+			<p>You can configure the tabs that are visible by default at bottom
+				of the dashboard. To edit the settings, login as admin and goto
+				Administration &gt; Configuration </p>
+			<p></p>
+			<table>
+				<tr>
+					<th> Config-key </th>
+					<th> Values </th>
+					<th> Meaning </th>
+				</tr>
+				<tr>
+					<td> dashboard.show.myrooms </td>
+					<td> 0 or 1 </td>
+					<td> If the MyRooms tab should be visible or not </td>
+				</tr>
+				<tr>
+					<td> dashboard.show.chat </td>
+					<td> 0 or 1 </td>
+					<td> If the Chat tab should be visible or not </td>
+				</tr>
+				<tr>
+					<td> dashboard.show.rssfeed </td>
+					<td> 0 or 1 </td>
+					<td> If the RSS-Feed tab should be visible or not </td>
+				</tr>
+				<tr>
+					<td> rss_feed1 </td>
+					<td> http-URL </td>
+					<td> ATOM-Feed URL for the dashboard RSS Tab </td>
+				</tr>
+				<tr>
+					<td> rss_feed2 </td>
+					<td> http-URL </td>
+					<td> ATOM-Feed URL for the dashboard RSS Tab </td>
+				</tr>
+			</table>
+			<p></p>
+			<p>Changes are immediately online, no need to restart anything. </p>
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/DrupalPlugin.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/DrupalPlugin.xml b/openmeetings-server/src/site/xdoc/DrupalPlugin.xml
index 0fe7f2e..6b6e0ac 100644
--- a/openmeetings-server/src/site/xdoc/DrupalPlugin.xml
+++ b/openmeetings-server/src/site/xdoc/DrupalPlugin.xml
@@ -1,76 +1,76 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Drupal Plugin</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Drupal Plugin for OpenMeetings">
-			<p>
-				Plugin for Drupal currently is not open source. 
-				Please contact <a href="commercial-support.html" target="_blank" rel="nofollow">Commercial Support</a> to get it. 
-			</p>
-		</section>
-		
-		<section name="Installation of the Drupal Plugin for Apache OpenMeetings">
-			<p>
-				You simply download the ZIP or TAR package and unzip it to Drupal "mod" directory.
-				<br/>
-				For a detailed description on how to install plugins in Drupal please review their 
-				<a href="http://drupal.org/documentation/install/modules-themes" target="_blank" rel="nofollow">handbook</a>.
-				<br />
-				Then you visit the module interface of Drupal, where you will find the new module.
-				You should switch it to "enabled" to get the "Configure" and "Permissions" buttons.
-			</p>
-			<a class="fancybox-buttons" href="images/drupal_module_installation.png">
-				<img src="images/drupal_module_installation.png" alt="" width="600"
-					height="150" />
-			</a>
-			<p>
-				In the configuration you enter the auth data to access your Apache OpenMeetings server:
-			</p>
-			<a class="fancybox-buttons" href="images/drupal_module_configuration.png">
-				<img src="images/drupal_module_configuration.png" alt="" width="600"
-					height="340" />
-			</a>
-		</section>
-		
-		<section name="Adding a new conference room to Drupal">
-			
-			<p>
-				After installation of the plugin you can go to the front page in Drupal and add a new content item 
-				"OpenMeetings Rooms" => "Add New Room". You may find following configuration values for each 
-				conference room:
-			</p>
-			<a class="fancybox-buttons" href="images/drupal_room_configuration.png">
-				<img src="images/drupal_room_configuration.png" alt="" width="600"
-					height="400" />
-			</a>
-		</section>
-		
-		<section name="Demo video">
-			<p>The demo video of Drupal plugin show you the plugin in action </p>
-			<iframe width="640" height="390" src="http://www.youtube.com/embed/LmMIKFCLRV4" frameborder="0" allowfullscreen=""></iframe>
-			<iframe width="640" height="390" src="http://www.youtube.com/embed/k5PF3vdVUn0" frameborder="0" allowfullscreen=""></iframe>
-		</section>
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Drupal Plugin</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Drupal Plugin for OpenMeetings">
+			<p>
+				Plugin for Drupal currently is not open source. 
+				Please contact <a href="commercial-support.html" target="_blank" rel="nofollow">Commercial Support</a> to get it. 
+			</p>
+		</section>
+		
+		<section name="Installation of the Drupal Plugin for Apache OpenMeetings">
+			<p>
+				You simply download the ZIP or TAR package and unzip it to Drupal "mod" directory.
+				<br/>
+				For a detailed description on how to install plugins in Drupal please review their 
+				<a href="http://drupal.org/documentation/install/modules-themes" target="_blank" rel="nofollow">handbook</a>.
+				<br />
+				Then you visit the module interface of Drupal, where you will find the new module.
+				You should switch it to "enabled" to get the "Configure" and "Permissions" buttons.
+			</p>
+			<a class="fancybox-buttons" href="images/drupal_module_installation.png">
+				<img src="images/drupal_module_installation.png" alt="" width="600"
+					height="150" />
+			</a>
+			<p>
+				In the configuration you enter the auth data to access your Apache OpenMeetings server:
+			</p>
+			<a class="fancybox-buttons" href="images/drupal_module_configuration.png">
+				<img src="images/drupal_module_configuration.png" alt="" width="600"
+					height="340" />
+			</a>
+		</section>
+		
+		<section name="Adding a new conference room to Drupal">
+			
+			<p>
+				After installation of the plugin you can go to the front page in Drupal and add a new content item 
+				"OpenMeetings Rooms" => "Add New Room". You may find following configuration values for each 
+				conference room:
+			</p>
+			<a class="fancybox-buttons" href="images/drupal_room_configuration.png">
+				<img src="images/drupal_room_configuration.png" alt="" width="600"
+					height="400" />
+			</a>
+		</section>
+		
+		<section name="Demo video">
+			<p>The demo video of Drupal plugin show you the plugin in action </p>
+			<iframe width="640" height="390" src="http://www.youtube.com/embed/LmMIKFCLRV4" frameborder="0" allowfullscreen=""></iframe>
+			<iframe width="640" height="390" src="http://www.youtube.com/embed/k5PF3vdVUn0" frameborder="0" allowfullscreen=""></iframe>
+		</section>
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/EditTemplates.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/EditTemplates.xml b/openmeetings-server/src/site/xdoc/EditTemplates.xml
index acc5e1c..0846c24 100644
--- a/openmeetings-server/src/site/xdoc/EditTemplates.xml
+++ b/openmeetings-server/src/site/xdoc/EditTemplates.xml
@@ -1,64 +1,64 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>Edit Templates</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Changing Labels and text strings">
-			<p>
-				All language string should be localized and stored in the language
-				section. You have a full featured language editor with every
-				installation of OpenMeetings, check out the
-				<a href="LanguageEditor.html">LanguageEditor</a>
-				.
-			</p>
-			<p>
-				To lookup the labelids in the GUI you can simply run OpenMeetings
-				client with the debug enabled. That way every text-string has the
-				labelid in brackets additionally in the textfield. To start the
-				client in debug mode please check "Tips and Tricks" section of 
-				<a href="installation.html" rel="nofollow">Installation guide</a>
-			</p>
-		</section>
-		<section name="Changing layout, adding footers in emails">
-			<p>If you would like to change the standard email layout or add for
-				example some footer in every email you have to change the email
-				templates.
-			</p>
-			<div>To do that:
-				<ul>
-					<li>Stop the Red5/OpenMeetings service</li>
-					<li>Goto: <tt>$RED5_HOME/webapps/openmeetings/WEB-INF/classes/org/apache/openmeetings/service/mail/template/</tt></li>
-					<li>Change HTML file(s) according to your needs, BUT do not remove 
-						elements with <tt>wicket:id</tt> attributes! You can hide those 
-						elements by adding <tt>wicket:visible="false"</tt> attribute
-					</li>
-					<li>Starting OM 3.1.4 you can change Appointment reminder subject by
-						modifying "subject" fragment in file 
-						<tt>$RED5_HOME/webapps/openmeetings/WEB-INF/classes/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html</tt>
-						as described in previous bullet.
-					</li>
-					<li>Start the Red5/OpenMeetings service</li>
-				</ul>
-			</div>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>Edit Templates</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Changing Labels and text strings">
+			<p>
+				All language string should be localized and stored in the language
+				section. You have a full featured language editor with every
+				installation of OpenMeetings, check out the
+				<a href="LanguageEditor.html">LanguageEditor</a>
+				.
+			</p>
+			<p>
+				To lookup the labelids in the GUI you can simply run OpenMeetings
+				client with the debug enabled. That way every text-string has the
+				labelid in brackets additionally in the textfield. To start the
+				client in debug mode please check "Tips and Tricks" section of 
+				<a href="installation.html" rel="nofollow">Installation guide</a>
+			</p>
+		</section>
+		<section name="Changing layout, adding footers in emails">
+			<p>If you would like to change the standard email layout or add for
+				example some footer in every email you have to change the email
+				templates.
+			</p>
+			<div>To do that:
+				<ul>
+					<li>Stop the Red5/OpenMeetings service</li>
+					<li>Goto: <tt>$RED5_HOME/webapps/openmeetings/WEB-INF/classes/org/apache/openmeetings/service/mail/template/</tt></li>
+					<li>Change HTML file(s) according to your needs, BUT do not remove 
+						elements with <tt>wicket:id</tt> attributes! You can hide those 
+						elements by adding <tt>wicket:visible="false"</tt> attribute
+					</li>
+					<li>Starting OM 3.1.4 you can change Appointment reminder subject by
+						modifying "subject" fragment in file 
+						<tt>$RED5_HOME/webapps/openmeetings/WEB-INF/classes/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html</tt>
+						as described in previous bullet.
+					</li>
+					<li>Start the Red5/OpenMeetings service</li>
+				</ul>
+			</div>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml b/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
index 542bdd2..57dfbda 100644
--- a/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
+++ b/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
@@ -1,313 +1,313 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>List of general configuration options</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="List of general configuration options">
-			<p>In Administration &gt; Configuration there are a number of
-				configuration values.
-			</p>
-			<p></p>
-			<table>
-				<tr>
-					<th> key </th>
-					<th> default </th>
-					<th> meaning </th>
-					<th> availabe since OpenMeetings version </th>
-				</tr>
-				<tr>
-					<td> dashboard.show.myrooms </td>
-					<td> 0 or 1 </td>
-					<td> Dashboard: If the MyRooms widget should be visible or not </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> dashboard.show.chat </td>
-					<td> 0 or 1 </td>
-					<td> Dashboard: If the Chat widget should be visible or not </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> dashboard.show.rssfeed </td>
-					<td> 0 or 1 </td>
-					<td> Dashboard: If the RSS-Feed widget should be visible or not </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> rss_feed1 </td>
-					<td> http-URL </td>
-					<td> Dashboard: ATOM-Feed URL for the dashboard RSS Tab </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> rss_feed2 </td>
-					<td> http-URL </td>
-					<td> Dashboard: ATOM-Feed URL for the dashboard RSS Tab </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> ldap_default_id </td>
-					<td> 0 </td>
-					<td> Ldap domain selected by default in the login screen </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> user.login.minimum.length </td>
-					<td> 4 </td>
-					<td> minimum chars required for the login to create a user </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> user.pass.minimum.length </td>
-					<td> 4 </td>
-					<td> minimum chars required for the password to create a
-						user
-					</td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> number.minutes.reminder.send </td>
-					<td> 15 </td>
-					<td> minutes the one-time reminder in the calender is
-						send, set to 0 to disable reminder
-					</td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> max_upload_size </td>
-					<td> 1073741824 </td>
-					<td> Maximum size of upload file (bytes) 1073741824 bytes
-						= 1GB
-					</td>
-					<td> 1.8.x </td>
-				</tr>
-				<tr>
-					<td> show.whiteboard.draw.status </td>
-					<td> 0 </td>
-					<td> Display name of the user who draw the current object
-						(User Name auto-disapper after 3 seconds.
-					</td>
-					<td> 1.8.x </td>
-				</tr>
-				<tr>
-					<td> smtp_server </td>
-					<td> localhost </td>
-					<td> this is the smtp server to send messages </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> smtp_port </td>
-					<td> 25 </td>
-					<td> this is the smtp server port normally 25 </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> email_username </td>
-					<td> </td>
-					<td> System auth email username </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> email_userpass </td>
-					<td> </td>
-					<td> System auth email password </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> mail.smtp.starttls.enable </td>
-					<td> 0 </td>
-					<td> Enable TLS 1=true, 0=false </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> mail.smtp.connection.timeout </td>
-					<td> 30000 </td>
-					<td> Socket connection timeout value in milliseconds. Default is 30 seconds (30000). </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> mail.smtp.timeout </td>
-					<td> 30000 </td>
-					<td> Socket I/O timeout value in milliseconds. Default is 30 seconds (30000). </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> system_email_addr </td>
-					<td> noreply@openmeetings.apache.org </td>
-					<td> all send e-mails by the system will have this address </td>
-					<td> 1.9.x </td>
-				</tr>
-				<tr>
-					<td> inviter.email.as.replyto </td>
-					<td> 1 </td>
-					<td> Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)	</td>
-					<td> 2.0.x </td>
-				</tr>
-				<tr>
-					<td> office.path </td>
-					<td> </td>
-					<td> The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically	</td>
-					<td> 2.0.x </td>
-				</tr>
-				<tr>
-					<td> default.landing.zone </td>
-					<td> user/dashboard </td>
-					<td> Area to be shown to the user after login. Possible values are: user/dashboard, user/calendar, user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection
-						, admin/group, admin/room, admin/config, admin/lang, admin/ldap, admin/backup, admin/server, admin/oauth2 </td>
-					<td> 2.1.x, <b> values are changed in 3.0.0</b> </td>
-				</tr>
-				<tr>
-					<td> sms.provider </td>
-					<td>  </td>
-					<td> SMS service provider (bulksms.http.1) </td>
-					<td> 2.1.x </td>
-				</tr>
-				<tr>
-					<td> sms.Username </td>
-					<td>  </td>
-					<td> Login for SMS service provider </td>
-					<td> 2.1.x </td>
-				</tr>
-				<tr>
-					<td> sms.Userpass </td>
-					<td>  </td>
-					<td> Password for SMS service provider </td>
-					<td> 2.1.x </td>
-				</tr>
-				<tr>
-					<td> sms.subject </td>
-					<td>  </td>
-					<td> Subject of SMS reminder message </td>
-					<td> 2.1.x </td>
-				</tr>
-				<tr>
-					<td> swftools_zoom </td>
-					<td> 100 </td>
-					<td> DPI for conversion of PDF to SWF (should be an integer between 50 and  600 with a default value of 100 DPI) </td>
-					<td> 2.0.x </td>
-				</tr>
-				<tr>
-					<td> swftools_jpegquality </td>
-					<td> 85 </td>
-					<td> Compression quality for conversion of PDF to SWF (should be an integer between 1 and 100, with a default value of 85) </td>
-					<td> 2.0.x </td>
-				</tr>
-				<tr>
-					<td> sendEmailAtRegister </td>
-					<td> 0 </td>
-					<td> User get a EMail with their Account data. Values: 0(No) or 1(Yes) </td>
-					<td> 2.0.x </td>
-				</tr>
-				<tr>
-					<td> sendEmailWithVerficationCode </td>
-					<td> 0 </td>
-					<td> User must activate their account by clicking on the 
-								activation-link in the registering Email. Values: 0(No) or 1(Yes) 
-								It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while 
-								sendEmailAtRegister is 0(No) cause you need
-								to send a EMail. </td>
-					<td> 2.0.x </td>
-				</tr>
-				<tr>
-					<td> redirect.url.for.external.users </td>
-					<td>  </td>
-					<td> Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost </td>
-					<td> 2.2.x </td>
-				</tr>
-				<tr>
-					<td> allow_frontend_register </td>
-					<td> (configurable during install) </td>
-					<td> Is user register available on login screen </td>
-					<td> 1.8.x </td>
-				</tr>
-				<tr>
-					<td> allow.soap.register </td>
-					<td> 1 </td>
-					<td> Is user register available via SOAP/REST </td>
-					<td> 3.0.x </td>
-				</tr>
-				<tr>
-					<td> allow.oauth.register </td>
-					<td> 1 </td>
-					<td> Is user register available via OAuth </td>
-					<td> 3.0.x </td>
-				</tr>
-				<tr>
-					<td> application.base.url </td>
-					<td> http://localhost:5080/openmeetings </td>
-					<td> Base URL your OPenmeetings installation will be accessible at. </td>
-					<td> 3.0.2 </td>
-				</tr>
-				<tr>
-					<td> default.quality.screensharing </td>
-					<td> 1 </td>
-					<td> Default selection in ScreenSharing Quality:<br/>
-						0 - bigger frame rate, no resize<br/>
-						1 - no resize<br/>
-						2 - size == 1/2 of selected area<br/>
-						3 - size == 3/8 of selected area </td>
-					<td> 3.0.3 </td>
-				</tr>
-				<tr>
-					<td> default.fps.screensharing </td>
-					<td> 10 </td>
-					<td> Default selection in ScreenSharing FPS. </td>
-					<td> 3.0.3 </td>
-				</tr>
-				<tr>
-					<td> screensharing.fps.show </td>
-					<td> true </td>
-					<td> Is screensharing FPS should be displayed or not (true/false). </td>
-					<td> 3.0.3 </td>
-				</tr>
-				<tr>
-					<td> screensharing.allow.remote </td>
-					<td> true </td>
-					<td> Is remote control will be enabled while screensharing. Allowing remote control will be not possible in case it is set to 'false' (true/false). </td>
-					<td> 3.0.4 </td>
-				</tr>
-				<tr>
-					<td> calendar.firstday </td>
-					<td> 0 </td>
-					<td> The day that each week begins. The value must be a number that represents the day of the week. Sunday=0, Monday=1, Tuesday=2, etc. </td>
-					<td> 3.0.4 </td>
-				</tr>
-				<tr>
-					<td> google.analytics.code </td>
-					<td> </td>
-					<td> Code for Google Analytics. </td>
-					<td> 3.1.0 </td>
-				</tr>
-				<tr>
-					<td> header.x.frame.options </td>
-					<td> SAMEORIGIN </td>
-					<td> Value for 'X-Frame-Options' header, more info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options </td>
-					<td> 3.3.0 </td>
-				</tr>
-				<tr>
-					<td> header.content.security.policy </td>
-					<td> default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; </td>
-					<td> Value for 'Content-Security-Policy' header, have to be modified to enable Google analytics site: https://content-security-policy.com/ </td>
-					<td> 3.3.0 </td>
-				</tr>
-			</table>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>List of general configuration options</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="List of general configuration options">
+			<p>In Administration &gt; Configuration there are a number of
+				configuration values.
+			</p>
+			<p></p>
+			<table>
+				<tr>
+					<th> key </th>
+					<th> default </th>
+					<th> meaning </th>
+					<th> availabe since OpenMeetings version </th>
+				</tr>
+				<tr>
+					<td> dashboard.show.myrooms </td>
+					<td> 0 or 1 </td>
+					<td> Dashboard: If the MyRooms widget should be visible or not </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> dashboard.show.chat </td>
+					<td> 0 or 1 </td>
+					<td> Dashboard: If the Chat widget should be visible or not </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> dashboard.show.rssfeed </td>
+					<td> 0 or 1 </td>
+					<td> Dashboard: If the RSS-Feed widget should be visible or not </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> rss_feed1 </td>
+					<td> http-URL </td>
+					<td> Dashboard: ATOM-Feed URL for the dashboard RSS Tab </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> rss_feed2 </td>
+					<td> http-URL </td>
+					<td> Dashboard: ATOM-Feed URL for the dashboard RSS Tab </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> ldap_default_id </td>
+					<td> 0 </td>
+					<td> Ldap domain selected by default in the login screen </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> user.login.minimum.length </td>
+					<td> 4 </td>
+					<td> minimum chars required for the login to create a user </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> user.pass.minimum.length </td>
+					<td> 4 </td>
+					<td> minimum chars required for the password to create a
+						user
+					</td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> number.minutes.reminder.send </td>
+					<td> 15 </td>
+					<td> minutes the one-time reminder in the calender is
+						send, set to 0 to disable reminder
+					</td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> max_upload_size </td>
+					<td> 1073741824 </td>
+					<td> Maximum size of upload file (bytes) 1073741824 bytes
+						= 1GB
+					</td>
+					<td> 1.8.x </td>
+				</tr>
+				<tr>
+					<td> show.whiteboard.draw.status </td>
+					<td> 0 </td>
+					<td> Display name of the user who draw the current object
+						(User Name auto-disapper after 3 seconds.
+					</td>
+					<td> 1.8.x </td>
+				</tr>
+				<tr>
+					<td> smtp_server </td>
+					<td> localhost </td>
+					<td> this is the smtp server to send messages </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> smtp_port </td>
+					<td> 25 </td>
+					<td> this is the smtp server port normally 25 </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> email_username </td>
+					<td> </td>
+					<td> System auth email username </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> email_userpass </td>
+					<td> </td>
+					<td> System auth email password </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> mail.smtp.starttls.enable </td>
+					<td> 0 </td>
+					<td> Enable TLS 1=true, 0=false </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> mail.smtp.connection.timeout </td>
+					<td> 30000 </td>
+					<td> Socket connection timeout value in milliseconds. Default is 30 seconds (30000). </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> mail.smtp.timeout </td>
+					<td> 30000 </td>
+					<td> Socket I/O timeout value in milliseconds. Default is 30 seconds (30000). </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> system_email_addr </td>
+					<td> noreply@openmeetings.apache.org </td>
+					<td> all send e-mails by the system will have this address </td>
+					<td> 1.9.x </td>
+				</tr>
+				<tr>
+					<td> inviter.email.as.replyto </td>
+					<td> 1 </td>
+					<td> Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)	</td>
+					<td> 2.0.x </td>
+				</tr>
+				<tr>
+					<td> office.path </td>
+					<td> </td>
+					<td> The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically	</td>
+					<td> 2.0.x </td>
+				</tr>
+				<tr>
+					<td> default.landing.zone </td>
+					<td> user/dashboard </td>
+					<td> Area to be shown to the user after login. Possible values are: user/dashboard, user/calendar, user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection
+						, admin/group, admin/room, admin/config, admin/lang, admin/ldap, admin/backup, admin/server, admin/oauth2 </td>
+					<td> 2.1.x, <b> values are changed in 3.0.0</b> </td>
+				</tr>
+				<tr>
+					<td> sms.provider </td>
+					<td>  </td>
+					<td> SMS service provider (bulksms.http.1) </td>
+					<td> 2.1.x </td>
+				</tr>
+				<tr>
+					<td> sms.Username </td>
+					<td>  </td>
+					<td> Login for SMS service provider </td>
+					<td> 2.1.x </td>
+				</tr>
+				<tr>
+					<td> sms.Userpass </td>
+					<td>  </td>
+					<td> Password for SMS service provider </td>
+					<td> 2.1.x </td>
+				</tr>
+				<tr>
+					<td> sms.subject </td>
+					<td>  </td>
+					<td> Subject of SMS reminder message </td>
+					<td> 2.1.x </td>
+				</tr>
+				<tr>
+					<td> swftools_zoom </td>
+					<td> 100 </td>
+					<td> DPI for conversion of PDF to SWF (should be an integer between 50 and  600 with a default value of 100 DPI) </td>
+					<td> 2.0.x </td>
+				</tr>
+				<tr>
+					<td> swftools_jpegquality </td>
+					<td> 85 </td>
+					<td> Compression quality for conversion of PDF to SWF (should be an integer between 1 and 100, with a default value of 85) </td>
+					<td> 2.0.x </td>
+				</tr>
+				<tr>
+					<td> sendEmailAtRegister </td>
+					<td> 0 </td>
+					<td> User get a EMail with their Account data. Values: 0(No) or 1(Yes) </td>
+					<td> 2.0.x </td>
+				</tr>
+				<tr>
+					<td> sendEmailWithVerficationCode </td>
+					<td> 0 </td>
+					<td> User must activate their account by clicking on the 
+								activation-link in the registering Email. Values: 0(No) or 1(Yes) 
+								It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while 
+								sendEmailAtRegister is 0(No) cause you need
+								to send a EMail. </td>
+					<td> 2.0.x </td>
+				</tr>
+				<tr>
+					<td> redirect.url.for.external.users </td>
+					<td>  </td>
+					<td> Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost </td>
+					<td> 2.2.x </td>
+				</tr>
+				<tr>
+					<td> allow_frontend_register </td>
+					<td> (configurable during install) </td>
+					<td> Is user register available on login screen </td>
+					<td> 1.8.x </td>
+				</tr>
+				<tr>
+					<td> allow.soap.register </td>
+					<td> 1 </td>
+					<td> Is user register available via SOAP/REST </td>
+					<td> 3.0.x </td>
+				</tr>
+				<tr>
+					<td> allow.oauth.register </td>
+					<td> 1 </td>
+					<td> Is user register available via OAuth </td>
+					<td> 3.0.x </td>
+				</tr>
+				<tr>
+					<td> application.base.url </td>
+					<td> http://localhost:5080/openmeetings </td>
+					<td> Base URL your OPenmeetings installation will be accessible at. </td>
+					<td> 3.0.2 </td>
+				</tr>
+				<tr>
+					<td> default.quality.screensharing </td>
+					<td> 1 </td>
+					<td> Default selection in ScreenSharing Quality:<br/>
+						0 - bigger frame rate, no resize<br/>
+						1 - no resize<br/>
+						2 - size == 1/2 of selected area<br/>
+						3 - size == 3/8 of selected area </td>
+					<td> 3.0.3 </td>
+				</tr>
+				<tr>
+					<td> default.fps.screensharing </td>
+					<td> 10 </td>
+					<td> Default selection in ScreenSharing FPS. </td>
+					<td> 3.0.3 </td>
+				</tr>
+				<tr>
+					<td> screensharing.fps.show </td>
+					<td> true </td>
+					<td> Is screensharing FPS should be displayed or not (true/false). </td>
+					<td> 3.0.3 </td>
+				</tr>
+				<tr>
+					<td> screensharing.allow.remote </td>
+					<td> true </td>
+					<td> Is remote control will be enabled while screensharing. Allowing remote control will be not possible in case it is set to 'false' (true/false). </td>
+					<td> 3.0.4 </td>
+				</tr>
+				<tr>
+					<td> calendar.firstday </td>
+					<td> 0 </td>
+					<td> The day that each week begins. The value must be a number that represents the day of the week. Sunday=0, Monday=1, Tuesday=2, etc. </td>
+					<td> 3.0.4 </td>
+				</tr>
+				<tr>
+					<td> google.analytics.code </td>
+					<td> </td>
+					<td> Code for Google Analytics. </td>
+					<td> 3.1.0 </td>
+				</tr>
+				<tr>
+					<td> header.x.frame.options </td>
+					<td> SAMEORIGIN </td>
+					<td> Value for 'X-Frame-Options' header, more info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options </td>
+					<td> 3.3.0 </td>
+				</tr>
+				<tr>
+					<td> header.content.security.policy </td>
+					<td> default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; </td>
+					<td> Value for 'Content-Security-Policy' header, have to be modified to enable Google analytics site: https://content-security-policy.com/ </td>
+					<td> 3.3.0 </td>
+				</tr>
+			</table>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/GetVersionInfo.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/GetVersionInfo.xml b/openmeetings-server/src/site/xdoc/GetVersionInfo.xml
index 55279bc..55bc6e9 100644
--- a/openmeetings-server/src/site/xdoc/GetVersionInfo.xml
+++ b/openmeetings-server/src/site/xdoc/GetVersionInfo.xml
@@ -1,73 +1,73 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		<title>How to check which Openmeetings version running</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="How to check which Openmeetings version running (3.0.0 - )">
-			<p>Use Top Menu -&gt; About</p>
-		</section>
-		<section name="How to check which Openmeetings version running (2.1.1 - )">
-			<p>The version is printed into openmeetings.log file</p>
-			<p>
-				Run openmeetings<br/>
-				Open OM_HOME/log/openmeetings.log
-			</p>
-			<p>You get something like this: </p>
-			<source>
-	################################################################################
-	#                              Openmeetings is up                              #
-	#   3.2.2-SNAPSHOT 943f172e9d63c3ab7210f895fdede1ad7fa6aebc 2017/05/01 05:56   #
-	#                               and ready to use                               #
-	################################################################################
-			</source>
-		</section>
-		<section name="How to check which Openmeetings version running (1.8.0 - 2.1.0)">
-			<p>If you need to know what version of OpenMeetings you are running,
-				you can check that by the file: openmeetings-*.jar
-			</p>
-			<p>
-				Unzip: /webapps/openmeetings/WEB-INF/lib/openmeetings-*.jar (jars are
-				zips)
-				<br />
-				<br />
-				In the resulting unzipped folder open the file to read:
-				/META-INF/MANIFEST.MF
-			</p>
-			<p>You get something like this: </p>
-			<source>
-<![CDATA[
-Manifest-Version: 1.0
-Built-By: OpenMeetings - http://openmeetings.apache.org
-Built-On: 2017/05/01 05:41
-Git-Revision: 943f172e9d63c3ab7210f895fdede1ad7fa6aebc
-]]>
-			</source>
-			<p>This version info is available since version 1.8.0. If you have an
-				older version as version 1.8.0 then you might simply check the
-				language files and the labelid in there, the numbers of labels are
-				almost always unique in the versions. </p>
-
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+
+	<properties>
+		<title>How to check which Openmeetings version running</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="How to check which Openmeetings version running (3.0.0 - )">
+			<p>Use Top Menu -&gt; About</p>
+		</section>
+		<section name="How to check which Openmeetings version running (2.1.1 - )">
+			<p>The version is printed into openmeetings.log file</p>
+			<p>
+				Run openmeetings<br/>
+				Open OM_HOME/log/openmeetings.log
+			</p>
+			<p>You get something like this: </p>
+			<source>
+	################################################################################
+	#                              Openmeetings is up                              #
+	#   3.2.2-SNAPSHOT 943f172e9d63c3ab7210f895fdede1ad7fa6aebc 2017/05/01 05:56   #
+	#                               and ready to use                               #
+	################################################################################
+			</source>
+		</section>
+		<section name="How to check which Openmeetings version running (1.8.0 - 2.1.0)">
+			<p>If you need to know what version of OpenMeetings you are running,
+				you can check that by the file: openmeetings-*.jar
+			</p>
+			<p>
+				Unzip: /webapps/openmeetings/WEB-INF/lib/openmeetings-*.jar (jars are
+				zips)
+				<br />
+				<br />
+				In the resulting unzipped folder open the file to read:
+				/META-INF/MANIFEST.MF
+			</p>
+			<p>You get something like this: </p>
+			<source>
+<![CDATA[
+Manifest-Version: 1.0
+Built-By: OpenMeetings - http://openmeetings.apache.org
+Built-On: 2017/05/01 05:41
+Git-Revision: 943f172e9d63c3ab7210f895fdede1ad7fa6aebc
+]]>
+			</source>
+			<p>This version info is available since version 1.8.0. If you have an
+				older version as version 1.8.0 then you might simply check the
+				language files and the labelid in there, the numbers of labels are
+				almost always unique in the versions. </p>
+
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/HotKeys.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/HotKeys.xml b/openmeetings-server/src/site/xdoc/HotKeys.xml
index 1d76a57..e4d5d30 100644
--- a/openmeetings-server/src/site/xdoc/HotKeys.xml
+++ b/openmeetings-server/src/site/xdoc/HotKeys.xml
@@ -1,54 +1,54 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Hot Keys</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="Keys table">
-			<table>
-				<tr>
-					<th>Key</th>
-					<th>Functionality</th>
-					<th>Configurable</th>
-					<th>Config Key</th>
-				</tr>
-				<tr>
-					<td>F12 (code 123)</td>
-					<td>A hot key code for the 'give exclusive audio' functionality.</td>
-					<td>Yes</td>
-					<td>exclusive.audio.keycode</td>
-				</tr>
-				<tr>
-					<td>F8 (code 119)</td>
-					<td>If 1 or 2 video windows are present in the room they will be
-						"rearranged" to take all the place available</td>
-					<td>No</td>
-					<td>
-					</td>
-				</tr>
-				<tr>
-					<td>F7 (code 118)</td>
-					<td>A hot key code for the 'mute/unmute audio' functionality.</td>
-					<td>Yes</td>
-					<td>mute.keycode</td>
-				</tr>
-			</table>
-		</section>
-	</body>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Hot Keys</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="Keys table">
+			<table>
+				<tr>
+					<th>Key</th>
+					<th>Functionality</th>
+					<th>Configurable</th>
+					<th>Config Key</th>
+				</tr>
+				<tr>
+					<td>F12 (code 123)</td>
+					<td>A hot key code for the 'give exclusive audio' functionality.</td>
+					<td>Yes</td>
+					<td>exclusive.audio.keycode</td>
+				</tr>
+				<tr>
+					<td>F8 (code 119)</td>
+					<td>If 1 or 2 video windows are present in the room they will be
+						"rearranged" to take all the place available</td>
+					<td>No</td>
+					<td>
+					</td>
+				</tr>
+				<tr>
+					<td>F7 (code 118)</td>
+					<td>A hot key code for the 'mute/unmute audio' functionality.</td>
+					<td>Yes</td>
+					<td>mute.keycode</td>
+				</tr>
+			</table>
+		</section>
+	</body>
 </document>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/IBMDB2Config.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/IBMDB2Config.xml b/openmeetings-server/src/site/xdoc/IBMDB2Config.xml
index d8b316a..49f81f8 100644
--- a/openmeetings-server/src/site/xdoc/IBMDB2Config.xml
+++ b/openmeetings-server/src/site/xdoc/IBMDB2Config.xml
@@ -1,73 +1,73 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>IBM DB2 Configuration</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="IBM DB2 Configuration">
-
-			<subsection name="Before you start">
-				<i>Tested with IBM DB2 Express-C 9.7.x</i>
-				<ul>
-					<li>
-						Get the IBM Data Server Driver for JDBC and SQLJ from IBM website:
-						<a
-							href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs">https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs
-						</a>
-					</li>
-					<li>Copy JDBC driver db2jcc4.jar to
-						webapps/openmeetings/WEB-INF/lib/
-					</li>
-					<li>
-						Create database for OpenMeetings using a pagesize bigger or equal
-						8K, sample query:
-						<br />
-						<source><![CDATA[CREATE DATABASE openmeet AUTOMATIC STORAGE YES ON 'C:' DBPATH ON 'C:' USING CODESET UTF-8 TERRITORY DE COLLATE USING System PAGESIZE 16 K]]></source>
-					</li>
-					<li>If you encounter issues, you can drop the db and then run
-						the web based installer again </li>
-				</ul>
-			</subsection>
-
-			<subsection name="Steps todo">
-				<ul>
-					<li>
-						Run red5-service and goto the web-based installer:
-						http://localhost:5080/openmeetings/install
-					</li>
-				</ul>
-			</subsection>
-
-			<subsection name="DB2 Sample Configuration">
-				<p>
-					There is a sample configuration for IBM DB2 that ships with
-					every
-					release in:
-					<br />
-					/webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
-				</p>
-			</subsection>
-
-
-		</section>
-
-	</body>
-
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>IBM DB2 Configuration</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="IBM DB2 Configuration">
+
+			<subsection name="Before you start">
+				<i>Tested with IBM DB2 Express-C 9.7.x</i>
+				<ul>
+					<li>
+						Get the IBM Data Server Driver for JDBC and SQLJ from IBM website:
+						<a
+							href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs">https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs
+						</a>
+					</li>
+					<li>Copy JDBC driver db2jcc4.jar to
+						webapps/openmeetings/WEB-INF/lib/
+					</li>
+					<li>
+						Create database for OpenMeetings using a pagesize bigger or equal
+						8K, sample query:
+						<br />
+						<source><![CDATA[CREATE DATABASE openmeet AUTOMATIC STORAGE YES ON 'C:' DBPATH ON 'C:' USING CODESET UTF-8 TERRITORY DE COLLATE USING System PAGESIZE 16 K]]></source>
+					</li>
+					<li>If you encounter issues, you can drop the db and then run
+						the web based installer again </li>
+				</ul>
+			</subsection>
+
+			<subsection name="Steps todo">
+				<ul>
+					<li>
+						Run red5-service and goto the web-based installer:
+						http://localhost:5080/openmeetings/install
+					</li>
+				</ul>
+			</subsection>
+
+			<subsection name="DB2 Sample Configuration">
+				<p>
+					There is a sample configuration for IBM DB2 that ships with
+					every
+					release in:
+					<br />
+					/webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
+				</p>
+			</subsection>
+
+
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/Internationalisation.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/Internationalisation.xml b/openmeetings-server/src/site/xdoc/Internationalisation.xml
index 020c1a4..3074967 100644
--- a/openmeetings-server/src/site/xdoc/Internationalisation.xml
+++ b/openmeetings-server/src/site/xdoc/Internationalisation.xml
@@ -1,48 +1,48 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Internationalisation</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-	<body>
-		<section name="Where to find language files">
-			<p>You can find all current language files here: </p>
-			<p>
-				<a
-					href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=tree;f=openmeetings-web/src/main/java/org/apache/openmeetings/web/app;hb=HEAD"
-					rel="nofollow">https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=tree;f=openmeetings-web/src/main/java/org/apache/openmeetings/web/app;hb=HEAD
-				</a>
-			</p>
-			<p>Just take one file and translate it to your language. </p>
-		</section>
-		<section name="Import and export of Language Files">
-			<ul>
-				<li>
-					Use the
-					<a href="LanguageEditor.html">LanguageEditor</a>
-					for translation
-				</li>
-				<li>
-					with the
-					<a href="LanguageEditor.html">LanguageEditor</a>
-					you can import and export Language Files
-				</li>
-			</ul>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Internationalisation</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="Where to find language files">
+			<p>You can find all current language files here: </p>
+			<p>
+				<a
+					href="https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=tree;f=openmeetings-web/src/main/java/org/apache/openmeetings/web/app;hb=HEAD"
+					rel="nofollow">https://git-wip-us.apache.org/repos/asf/openmeetings.git/KEYS?p=openmeetings.git;a=tree;f=openmeetings-web/src/main/java/org/apache/openmeetings/web/app;hb=HEAD
+				</a>
+			</p>
+			<p>Just take one file and translate it to your language. </p>
+		</section>
+		<section name="Import and export of Language Files">
+			<ul>
+				<li>
+					Use the
+					<a href="LanguageEditor.html">LanguageEditor</a>
+					for translation
+				</li>
+				<li>
+					with the
+					<a href="LanguageEditor.html">LanguageEditor</a>
+					you can import and export Language Files
+				</li>
+			</ul>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/JUnitTesting.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/JUnitTesting.xml b/openmeetings-server/src/site/xdoc/JUnitTesting.xml
index 6c55079..24027f4 100644
--- a/openmeetings-server/src/site/xdoc/JUnitTesting.xml
+++ b/openmeetings-server/src/site/xdoc/JUnitTesting.xml
@@ -1,85 +1,85 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>JUnit Testing</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-		<section name="Introduction">
-			<p>
-				Automatic tests are the significant part of development process.
-				Below is the instruction of how to run Openmeetings <a href="http://junit.org" rel="nofollow">JUnit</a> tests.
-			</p>
-		</section>
-		<section name="Details">
-			<ol>
-				<li>running tests using command line: </li>
-				<li>
-					<ul>
-						<li>all tests:
-							<source>mvn test</source>
-						</li>
-						<li>subset of tests by mask:
-							<source>mvn test -Dtest=TestUserService</source>
-						</li>
-					</ul>
-				</li>
-				<li>running tests from Eclipse IDE: </li>
-				<li>
-					<ul>
-						<li>Start Eclipse </li>
-						<li>Load workspace with Openmeetings project (or refresh existing project)</li>
-						<li>Select "Debug Configurations..." </li>
-					</ul>
-				</li>
-			</ol>
-			<p>
-				<a class="fancybox-buttons" href="images/DebugConfigurations.png">
-					<img src="images/DebugConfigurations.png" alt="" width="367" height="262" />
-				</a>
-			</p>
-			<ul>
-				<li>Create New Junit configuration, give it a name and select test class</li>
-			</ul>
-			<p>
-				<a class="fancybox-buttons" href="images/NewConfiguration.png">
-					<img src="images/NewConfiguration.png" alt="" width="420" height="206" />
-				</a>
-			</p>
-			<ul>
-				<li>Select Arguments tab </li>
-				<li>Add the following code to the VM section
-					<source>-javaagent:/home/solomax/.m2/repository/org/apache/openjpa/openjpa/2.4.1/openjpa-2.4.1.jar -Dom.home=${workspace_loc:openmeetings-web}/src/main/webapp/ -Dbackups.dir=${workspace_loc:openmeetings-web}/target/test-data</source>
-				</li>
-				<li>To avoid temporary files being created in OM root, modify
-					"Working Directory" as follows
-					<source>${workspace_loc:openmeetings-web/target}</source>
-				</li>
-			</ul>
-			<p>
-				<a class="fancybox-buttons" href="images/Arguments.png">
-					<img src="images/Arguments.png" alt="" width="435" height="410" />
-				</a>
-			</p>
-			<ul>
-				<li>Select Debug </li>
-			</ul>
-		</section>
-	</body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>JUnit Testing</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+		<section name="Introduction">
+			<p>
+				Automatic tests are the significant part of development process.
+				Below is the instruction of how to run Openmeetings <a href="http://junit.org" rel="nofollow">JUnit</a> tests.
+			</p>
+		</section>
+		<section name="Details">
+			<ol>
+				<li>running tests using command line: </li>
+				<li>
+					<ul>
+						<li>all tests:
+							<source>mvn test</source>
+						</li>
+						<li>subset of tests by mask:
+							<source>mvn test -Dtest=TestUserService</source>
+						</li>
+					</ul>
+				</li>
+				<li>running tests from Eclipse IDE: </li>
+				<li>
+					<ul>
+						<li>Start Eclipse </li>
+						<li>Load workspace with Openmeetings project (or refresh existing project)</li>
+						<li>Select "Debug Configurations..." </li>
+					</ul>
+				</li>
+			</ol>
+			<p>
+				<a class="fancybox-buttons" href="images/DebugConfigurations.png">
+					<img src="images/DebugConfigurations.png" alt="" width="367" height="262" />
+				</a>
+			</p>
+			<ul>
+				<li>Create New Junit configuration, give it a name and select test class</li>
+			</ul>
+			<p>
+				<a class="fancybox-buttons" href="images/NewConfiguration.png">
+					<img src="images/NewConfiguration.png" alt="" width="420" height="206" />
+				</a>
+			</p>
+			<ul>
+				<li>Select Arguments tab </li>
+				<li>Add the following code to the VM section
+					<source>-javaagent:/home/solomax/.m2/repository/org/apache/openjpa/openjpa/2.4.1/openjpa-2.4.1.jar -Dom.home=${workspace_loc:openmeetings-web}/src/main/webapp/ -Dbackups.dir=${workspace_loc:openmeetings-web}/target/test-data</source>
+				</li>
+				<li>To avoid temporary files being created in OM root, modify
+					"Working Directory" as follows
+					<source>${workspace_loc:openmeetings-web/target}</source>
+				</li>
+			</ul>
+			<p>
+				<a class="fancybox-buttons" href="images/Arguments.png">
+					<img src="images/Arguments.png" alt="" width="435" height="410" />
+				</a>
+			</p>
+			<ul>
+				<li>Select Debug </li>
+			</ul>
+		</section>
+	</body>
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-server/src/site/xdoc/JVMPerformanceTuning.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/JVMPerformanceTuning.xml b/openmeetings-server/src/site/xdoc/JVMPerformanceTuning.xml
index fabc06e..2e36b81 100644
--- a/openmeetings-server/src/site/xdoc/JVMPerformanceTuning.xml
+++ b/openmeetings-server/src/site/xdoc/JVMPerformanceTuning.xml
@@ -1,67 +1,67 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-	<properties>
-		<title>Performance Tuning</title>
-		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
-	</properties>
-
-	<body>
-
-		<section name="Performance Tuning">
-
-			<p>To use the optimum of performance from your server there is a
-				start-script for red5 available that does some basic settings in the
-				JVM. It is called red5-highperf.sh. It is recommended to use that
-				script for production and high-load scenarios.
-			</p>
-			<source>
-<![CDATA[
-#!/bin/bash
-
-if [ -z "$RED5_HOME" ]; then export RED5_HOME=.; fi
-
-# Previous option set
-export JAVA_OPTS="-Xrs -Xms512M -Xmx1024M -Xss128K -XX:NewSize=256m \
-	-XX:SurvivorRatio=16 -XX:MinHeapFreeRatio=20 -XX:+ExplicitGCInvokesConcurrent \
-	-Djava.net.preferIPv4Stack=true -Xverify:none"
-
-# start Red5
-echo "Setting Hi Performance Options"
-exec $RED5_HOME/red5.sh >> $RED5_HOME/log/jvm.stdout 2>&1 &
-]]>
-			</source>
-
-			<p>You have to exclude the "-XX:+UseConcMarkSweepGC" param from the
-				default red5-highperf.sh to make it functional! However if you are a
-				performance expert you might also play with the values to find
-				perfect matches for your use-case.
-			</p>
-			<p>
-				For a complete overview about possible arguments and their meaning
-				see:
-				<a
-					href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning"
-					rel="nofollow">http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning
-				</a>
-			</p>
-
-		</section>
-
-	</body>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+	<properties>
+		<title>Performance Tuning</title>
+		<author email="dev@openmeetings.apache.org">Apache OpenMeetings Team</author>
+	</properties>
+
+	<body>
+
+		<section name="Performance Tuning">
+
+			<p>To use the optimum of performance from your server there is a
+				start-script for red5 available that does some basic settings in the
+				JVM. It is called red5-highperf.sh. It is recommended to use that
+				script for production and high-load scenarios.
+			</p>
+			<source>
+<![CDATA[
+#!/bin/bash
+
+if [ -z "$RED5_HOME" ]; then export RED5_HOME=.; fi
+
+# Previous option set
+export JAVA_OPTS="-Xrs -Xms512M -Xmx1024M -Xss128K -XX:NewSize=256m \
+	-XX:SurvivorRatio=16 -XX:MinHeapFreeRatio=20 -XX:+ExplicitGCInvokesConcurrent \
+	-Djava.net.preferIPv4Stack=true -Xverify:none"
+
+# start Red5
+echo "Setting Hi Performance Options"
+exec $RED5_HOME/red5.sh >> $RED5_HOME/log/jvm.stdout 2>&1 &
+]]>
+			</source>
+
+			<p>You have to exclude the "-XX:+UseConcMarkSweepGC" param from the
+				default red5-highperf.sh to make it functional! However if you are a
+				performance expert you might also play with the values to find
+				perfect matches for your use-case.
+			</p>
+			<p>
+				For a complete overview about possible arguments and their meaning
+				see:
+				<a
+					href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning"
+					rel="nofollow">http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning
+				</a>
+			</p>
+
+		</section>
+
+	</body>
+
 </document>
\ No newline at end of file


[09/26] openmeetings git commit: Normalize all the line endings

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
index 4284b86..c9a1d9b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
@@ -1,159 +1,159 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.groups;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.user.GroupUserDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.markup.repeater.Item;
-
-public class GroupUsersPanel extends Panel {
-	private static final long serialVersionUID = 1L;
-	private long groupId;
-	private List<GroupUser> users2add = new ArrayList<>();
-
-	public GroupUsersPanel(String id, long groupId) {
-		super(id);
-		this.groupId = groupId;
-		setOutputMarkupId(true);
-
-		SearchableDataView<GroupUser> dataView = new SearchableDataView<GroupUser>("userList", new GroupUserDataProvider()) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(Item<GroupUser> item) {
-				final GroupUser grpUser = item.getModelObject();
-				item.add(new CheckBox("isModerator").add(new OnChangeAjaxBehavior() {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onUpdate(AjaxRequestTarget target) {
-						if (grpUser.getId() != null) {
-							update(grpUser);
-						}
-					}
-				}));
-				User u = grpUser.getUser();
-				Label label = new Label("label", u == null ? "" : GroupForm.formatUser(u));
-				if (grpUser.getId() == null) {
-					label.add(AttributeModifier.append("class", "newItem"));
-				}
-				item.add(label);
-				item.add(new ConfirmableAjaxBorder("deleteUserBtn", getString("80"), getString("833")) {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onInitialize() {
-						super.onInitialize();
-						form.setMultiPart(true);//need to be multipart due to parent form is multipart
-					}
-
-					@Override
-					protected void onSubmit(AjaxRequestTarget target) {
-						if (grpUser.getId() == null) {
-							users2add.remove(grpUser);
-						} else {
-							UserDao uDao = getBean(UserDao.class);
-							User u = uDao.get(grpUser.getUser().getId());
-							u.getGroupUsers().remove(grpUser);
-							uDao.update(u, WebSession.getUserId());
-						}
-						target.add(GroupUsersPanel.this);
-					}
-				});
-			}
-		};
-		add(dataView).setOutputMarkupId(true);
-		add(new PagedEntityListPanel("navigator", dataView) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				target.add(GroupUsersPanel.this);
-			}
-		});
-	}
-
-	public static void update(GroupUser grpUser) {
-		UserDao uDao = getBean(UserDao.class);
-		User u = uDao.get(grpUser.getUser().getId());
-		int idx = u.getGroupUsers().indexOf(grpUser);
-		if (idx > -1) {
-			u.getGroupUsers().get(idx).setModerator(grpUser.isModerator());
-		} else {
-			u.getGroupUsers().add(grpUser);
-		}
-		uDao.update(u, WebSession.getUserId());
-	}
-
-	void update(long groupId) {
-		this.groupId = groupId;
-		users2add.clear();
-	}
-
-	List<GroupUser> getUsers2add() {
-		return users2add;
-	}
-
-	private class GroupUserDataProvider extends SearchableDataProvider<GroupUser> {
-		private static final long serialVersionUID = 1L;
-
-		GroupUserDataProvider() {
-			super(GroupUserDao.class);
-		}
-
-		@Override
-		protected GroupUserDao getDao() {
-			return (GroupUserDao)super.getDao();
-		}
-
-		@Override
-		public long size() {
-			return users2add.size() + (search == null ? getDao().count(groupId) : getDao().count(groupId, search));
-		}
-
-		@Override
-		public java.util.Iterator<? extends GroupUser> iterator(long first, long count) {
-			List<GroupUser> list = new ArrayList<>();
-			list.addAll(users2add);
-			list.addAll(search == null && getSort() == null
-					? getDao().get(groupId, (int)first, (int)count)
-					: getDao().get(groupId, search, (int)first, (int)count, getSortStr()));
-
-			return list.iterator();
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.groups;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.GroupUserDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.repeater.Item;
+
+public class GroupUsersPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	private long groupId;
+	private List<GroupUser> users2add = new ArrayList<>();
+
+	public GroupUsersPanel(String id, long groupId) {
+		super(id);
+		this.groupId = groupId;
+		setOutputMarkupId(true);
+
+		SearchableDataView<GroupUser> dataView = new SearchableDataView<GroupUser>("userList", new GroupUserDataProvider()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<GroupUser> item) {
+				final GroupUser grpUser = item.getModelObject();
+				item.add(new CheckBox("isModerator").add(new OnChangeAjaxBehavior() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						if (grpUser.getId() != null) {
+							update(grpUser);
+						}
+					}
+				}));
+				User u = grpUser.getUser();
+				Label label = new Label("label", u == null ? "" : GroupForm.formatUser(u));
+				if (grpUser.getId() == null) {
+					label.add(AttributeModifier.append("class", "newItem"));
+				}
+				item.add(label);
+				item.add(new ConfirmableAjaxBorder("deleteUserBtn", getString("80"), getString("833")) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onInitialize() {
+						super.onInitialize();
+						form.setMultiPart(true);//need to be multipart due to parent form is multipart
+					}
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target) {
+						if (grpUser.getId() == null) {
+							users2add.remove(grpUser);
+						} else {
+							UserDao uDao = getBean(UserDao.class);
+							User u = uDao.get(grpUser.getUser().getId());
+							u.getGroupUsers().remove(grpUser);
+							uDao.update(u, WebSession.getUserId());
+						}
+						target.add(GroupUsersPanel.this);
+					}
+				});
+			}
+		};
+		add(dataView).setOutputMarkupId(true);
+		add(new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(GroupUsersPanel.this);
+			}
+		});
+	}
+
+	public static void update(GroupUser grpUser) {
+		UserDao uDao = getBean(UserDao.class);
+		User u = uDao.get(grpUser.getUser().getId());
+		int idx = u.getGroupUsers().indexOf(grpUser);
+		if (idx > -1) {
+			u.getGroupUsers().get(idx).setModerator(grpUser.isModerator());
+		} else {
+			u.getGroupUsers().add(grpUser);
+		}
+		uDao.update(u, WebSession.getUserId());
+	}
+
+	void update(long groupId) {
+		this.groupId = groupId;
+		users2add.clear();
+	}
+
+	List<GroupUser> getUsers2add() {
+		return users2add;
+	}
+
+	private class GroupUserDataProvider extends SearchableDataProvider<GroupUser> {
+		private static final long serialVersionUID = 1L;
+
+		GroupUserDataProvider() {
+			super(GroupUserDao.class);
+		}
+
+		@Override
+		protected GroupUserDao getDao() {
+			return (GroupUserDao)super.getDao();
+		}
+
+		@Override
+		public long size() {
+			return users2add.size() + (search == null ? getDao().count(groupId) : getDao().count(groupId, search));
+		}
+
+		@Override
+		public java.util.Iterator<? extends GroupUser> iterator(long first, long count) {
+			List<GroupUser> list = new ArrayList<>();
+			list.addAll(users2add);
+			list.addAll(search == null && getSort() == null
+					? getDao().get(groupId, (int)first, (int)count)
+					: getDao().get(groupId, search, (int)first, (int)count, getSortStr()));
+
+			return list.iterator();
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
index dcd492c..8fa09a3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
@@ -1,99 +1,99 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.groups;
-
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.web.admin.AdminPanel;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.openmeetings.web.data.DataViewContainer;
-import org.apache.openmeetings.web.data.OmOrderByBorder;
-import org.apache.openmeetings.web.data.SearchableGroupAdminDataProvider;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-
-/**
- * Modify/ CRUD operations for {@link Group} and
- * {@link GroupUser}
- *
- * @author swagner
- *
- */
-@AuthorizeInstantiation({"Admin", "GroupAdmin"})
-public class GroupsPanel extends AdminPanel {
-	private static final long serialVersionUID = 1L;
-	private GroupForm form;
-
-	public GroupsPanel(String id) {
-		super(id);
-		final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
-
-		//Adding the Group Form
-		form = new GroupForm("form", listContainer, new Group());
-		add(form);
-
-		//List view
-		SearchableDataView<Group> dataView = new SearchableDataView<Group>("groupList", new SearchableGroupAdminDataProvider<>(GroupDao.class)) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(Item<Group> item) {
-				final Group g = item.getModelObject();
-				item.add(new Label("id"));
-				item.add(new Label("name"));
-				item.add(new AjaxEventBehavior("click") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
-						form.hideNewRecord();
-						form.setModelObject(g);
-						form.updateView(target);
-						target.add(listContainer);
-						target.appendJavaScript("adminPanelInit();");
-					}
-				});
-				item.add(AttributeModifier.append("class", getRowClass(g.getId(), form.getModelObject().getId())));
-			}
-		};
-
-		//Paging
-		add(listContainer.add(dataView).setOutputMarkupId(true));
-		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				target.add(listContainer);
-			}
-		};
-		DataViewContainer<Group> container = new DataViewContainer<>(listContainer, dataView, navigator);
-		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
-			.addLink(new OmOrderByBorder<>("orderByName", "name", container));
-		add(container.getLinks());
-		add(navigator);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.groups;
+
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableGroupAdminDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * Modify/ CRUD operations for {@link Group} and
+ * {@link GroupUser}
+ *
+ * @author swagner
+ *
+ */
+@AuthorizeInstantiation({"Admin", "GroupAdmin"})
+public class GroupsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	private GroupForm form;
+
+	public GroupsPanel(String id) {
+		super(id);
+		final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+
+		//Adding the Group Form
+		form = new GroupForm("form", listContainer, new Group());
+		add(form);
+
+		//List view
+		SearchableDataView<Group> dataView = new SearchableDataView<Group>("groupList", new SearchableGroupAdminDataProvider<>(GroupDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<Group> item) {
+				final Group g = item.getModelObject();
+				item.add(new Label("id"));
+				item.add(new Label("name"));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						form.hideNewRecord();
+						form.setModelObject(g);
+						form.updateView(target);
+						target.add(listContainer);
+						target.appendJavaScript("adminPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.append("class", getRowClass(g.getId(), form.getModelObject().getId())));
+			}
+		};
+
+		//Paging
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<Group> container = new DataViewContainer<>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
+			.addLink(new OmOrderByBorder<>("orderByName", "name", container));
+		add(container.getLinks());
+		add(navigator);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
index 3969db9..8fb3d30 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/AddLanguageDialog.java
@@ -1,115 +1,115 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.labels;
-
-import java.util.Arrays;
-import java.util.IllformedLocaleException;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.label.LabelDao;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.validation.IValidatable;
-import org.apache.wicket.validation.IValidator;
-import org.apache.wicket.validation.ValidationError;
-
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
-
-public class AddLanguageDialog extends AbstractFormDialog<String> {
-	private static final long serialVersionUID = 1L;
-	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
-	private final DialogButton add = new DialogButton("add", Application.getString(366L));
-	private final Form<Void> form = new Form<>("addLangForm");
-	private final RequiredTextField<String> iso = new RequiredTextField<>("iso", Model.of(""));
-	private final LangPanel langPanel;
-
-	public AddLanguageDialog(String id, final LangPanel langPanel) {
-		super(id, Application.getString(364));
-		this.langPanel = langPanel;
-		add(form.add(feedback, iso.setOutputMarkupId(true)));
-		iso.add(new IValidator<String>() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void validate(IValidatable<String> s) {
-				try {
-					new Locale.Builder().setLanguageTag(s.getValue());
-				} catch (IllformedLocaleException e) {
-					s.error(new ValidationError("Invalid code, please use ")); //FIXME TODO add proper key
-					return;
-				}
-				Locale l = Locale.forLanguageTag(s.getValue());
-				for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
-					if (e.getValue().equals(l)) {
-						s.error(new ValidationError("This code already added")); //FIXME TODO add proper key
-						break;
-					}
-				}
-			}
-		});
-	}
-
-	@Override
-	public Form<?> getForm() {
-		return form;
-	}
-
-	@Override
-	protected List<DialogButton> getButtons() {
-		return Arrays.asList(add);
-	}
-
-	@Override
-	public DialogButton getSubmitButton() {
-		return add;
-	}
-
-	@Override
-	protected void onOpen(IPartialPageRequestHandler handler) {
-		iso.setModelObject("");
-		handler.add(iso);
-		super.onOpen(handler);
-	}
-
-	@Override
-	protected void onError(AjaxRequestTarget target) {
-		target.add(feedback);
-	}
-
-	@Override
-	protected void onSubmit(AjaxRequestTarget target) {
-		try {
-			LabelDao.add(Locale.forLanguageTag(iso.getModelObject()));
-			langPanel.getLangForm().updateLanguages(target);
-			target.appendJavaScript("$('#addLanguage').dialog('close');");
-		} catch (Exception e) {
-			error("Failed to add, " + e.getMessage()); //FIXME TODO add proper key
-			target.add(feedback);
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import java.util.Arrays;
+import java.util.IllformedLocaleException;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidationError;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class AddLanguageDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private final DialogButton add = new DialogButton("add", Application.getString(366L));
+	private final Form<Void> form = new Form<>("addLangForm");
+	private final RequiredTextField<String> iso = new RequiredTextField<>("iso", Model.of(""));
+	private final LangPanel langPanel;
+
+	public AddLanguageDialog(String id, final LangPanel langPanel) {
+		super(id, Application.getString(364));
+		this.langPanel = langPanel;
+		add(form.add(feedback, iso.setOutputMarkupId(true)));
+		iso.add(new IValidator<String>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void validate(IValidatable<String> s) {
+				try {
+					new Locale.Builder().setLanguageTag(s.getValue());
+				} catch (IllformedLocaleException e) {
+					s.error(new ValidationError("Invalid code, please use ")); //FIXME TODO add proper key
+					return;
+				}
+				Locale l = Locale.forLanguageTag(s.getValue());
+				for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+					if (e.getValue().equals(l)) {
+						s.error(new ValidationError("This code already added")); //FIXME TODO add proper key
+						break;
+					}
+				}
+			}
+		});
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return form;
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(add);
+	}
+
+	@Override
+	public DialogButton getSubmitButton() {
+		return add;
+	}
+
+	@Override
+	protected void onOpen(IPartialPageRequestHandler handler) {
+		iso.setModelObject("");
+		handler.add(iso);
+		super.onOpen(handler);
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		try {
+			LabelDao.add(Locale.forLanguageTag(iso.getModelObject()));
+			langPanel.getLangForm().updateLanguages(target);
+			target.appendJavaScript("$('#addLanguage').dialog('close');");
+		} catch (Exception e) {
+			error("Failed to add, " + e.getMessage()); //FIXME TODO add proper key
+			target.add(feedback);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
index e61f2db..9bd555d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
@@ -1,112 +1,112 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.labels;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-
-import org.apache.openmeetings.db.dao.label.LabelDao;
-import org.apache.openmeetings.db.entity.label.StringLabel;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.model.CompoundPropertyModel;
-
-
-/**
- * Add/edit/delete {@link StringLabel}
- *
- * @author solomax, swagner
- *
- */
-public class LabelsForm extends AdminBaseForm<StringLabel> {
-	private static final long serialVersionUID = 1L;
-	private LangPanel panel;
-	private String key, value;
-
-	public LabelsForm(String id, LangPanel panel, StringLabel label) {
-		super(id, new CompoundPropertyModel<>(label));
-		this.panel = panel;
-		key = label.getKey();
-		value = label.getValue();
-
-		add(new RequiredTextField<String>("key"));
-		add(new TextArea<String>("value"));
-	}
-
-	@Override
-	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {
-		key = null;
-		value = null;
-		setModelObject(new StringLabel(key, value));
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-		this.setModelObject(new StringLabel(key, value));
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-		try {
-			getBean(LabelDao.class).update(panel.language.getValue(), getModelObject());
-		} catch (Exception e) {
-			error("Unexpected error while saving label:" + e.getMessage()); //TODO localize
-		}
-		hideNewRecord();
-		target.add(panel.listContainer);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-		try {
-			getBean(LabelDao.class).delete(panel.language.getValue(), getModelObject());
-		} catch (Exception e) {
-			error("Unexpected error while deleting label:" + e.getMessage()); //TODO localize
-		}
-		target.add(panel.listContainer);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.entity.label.StringLabel;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.CompoundPropertyModel;
+
+
+/**
+ * Add/edit/delete {@link StringLabel}
+ *
+ * @author solomax, swagner
+ *
+ */
+public class LabelsForm extends AdminBaseForm<StringLabel> {
+	private static final long serialVersionUID = 1L;
+	private LangPanel panel;
+	private String key, value;
+
+	public LabelsForm(String id, LangPanel panel, StringLabel label) {
+		super(id, new CompoundPropertyModel<>(label));
+		this.panel = panel;
+		key = label.getKey();
+		value = label.getValue();
+
+		add(new RequiredTextField<String>("key"));
+		add(new TextArea<String>("value"));
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {
+		key = null;
+		value = null;
+		setModelObject(new StringLabel(key, value));
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new StringLabel(key, value));
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		try {
+			getBean(LabelDao.class).update(panel.language.getValue(), getModelObject());
+		} catch (Exception e) {
+			error("Unexpected error while saving label:" + e.getMessage()); //TODO localize
+		}
+		hideNewRecord();
+		target.add(panel.listContainer);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		try {
+			getBean(LabelDao.class).delete(panel.language.getValue(), getModelObject());
+		} catch (Exception e) {
+			error("Unexpected error while deleting label:" + e.getMessage()); //TODO localize
+		}
+		target.add(panel.listContainer);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java
index ca65d72..1bd4d3f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java
@@ -1,103 +1,103 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.labels;
-
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.label.LabelDao;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.ChoiceRenderer;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.util.time.Duration;
-
-/**
- * Modify the language selection, add/delete language
- *
- * @author solomax, swagner
- *
- */
-public class LangForm extends Form<Void> {
-	private static final long serialVersionUID = 1L;
-	private DropDownChoice<Map.Entry<Long, Locale>> languages;
-
-	static List<Map.Entry<Long, Locale>> getLanguages() {
-		List<Map.Entry<Long, Locale>> list = new ArrayList<>();
-		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
-			list.add(new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue()));
-		}
-		return list;
-	}
-
-	public void updateLanguages(AjaxRequestTarget target) {
-		languages.setChoices(getLanguages());
-		target.add(languages);
-	}
-
-	/**
-	 * Render Main
-	 *
-	 * @param id
-	 * @param listContainer
-	 * @param language
-	 * @param langPanel
-	 */
-	public LangForm(String id, final WebMarkupContainer listContainer, final LangPanel langPanel) {
-		super(id);
-		setOutputMarkupId(true);
-
-		languages = new DropDownChoice<>("language"
-				, new PropertyModel<Map.Entry<Long, Locale>>(langPanel, "language")
-				, getLanguages()
-				, new ChoiceRenderer<Map.Entry<Long, Locale>>() {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					public Object getDisplayValue(Map.Entry<Long, Locale> object) {
-						return object.getValue().getDisplayName();
-					}
-
-					@Override
-					public String getIdValue(Map.Entry<Long, Locale> object, int index) {
-						return "" + object.getKey();
-					}
-				});
-
-		languages.add(new OnChangeAjaxBehavior() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onUpdate(AjaxRequestTarget target) {
-				target.add(listContainer);
-			}
-		});
-		add(languages);
-		// attach an ajax validation behavior to all form component's keydown
-		// event and throttle it down to once per second
-		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.time.Duration;
+
+/**
+ * Modify the language selection, add/delete language
+ *
+ * @author solomax, swagner
+ *
+ */
+public class LangForm extends Form<Void> {
+	private static final long serialVersionUID = 1L;
+	private DropDownChoice<Map.Entry<Long, Locale>> languages;
+
+	static List<Map.Entry<Long, Locale>> getLanguages() {
+		List<Map.Entry<Long, Locale>> list = new ArrayList<>();
+		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+			list.add(new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue()));
+		}
+		return list;
+	}
+
+	public void updateLanguages(AjaxRequestTarget target) {
+		languages.setChoices(getLanguages());
+		target.add(languages);
+	}
+
+	/**
+	 * Render Main
+	 *
+	 * @param id
+	 * @param listContainer
+	 * @param language
+	 * @param langPanel
+	 */
+	public LangForm(String id, final WebMarkupContainer listContainer, final LangPanel langPanel) {
+		super(id);
+		setOutputMarkupId(true);
+
+		languages = new DropDownChoice<>("language"
+				, new PropertyModel<Map.Entry<Long, Locale>>(langPanel, "language")
+				, getLanguages()
+				, new ChoiceRenderer<Map.Entry<Long, Locale>>() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public Object getDisplayValue(Map.Entry<Long, Locale> object) {
+						return object.getValue().getDisplayName();
+					}
+
+					@Override
+					public String getIdValue(Map.Entry<Long, Locale> object, int index) {
+						return "" + object.getKey();
+					}
+				});
+
+		languages.add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		});
+		add(languages);
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
index b4cca0a..c6a189f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
@@ -1,130 +1,130 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.ldaps;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
-
-import org.apache.openmeetings.db.dao.server.LdapConfigDao;
-import org.apache.openmeetings.db.entity.server.LdapConfig;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
-
-/**
- * Form components to insert/update/delete {@link LdapConfig}
- *
- * @author swagner
- *
- */
-public class LdapForm extends AdminBaseForm<LdapConfig> {
-	private static final long serialVersionUID = 1L;
-	private final WebMarkupContainer listContainer;
-
-	public LdapForm(String id, WebMarkupContainer listContainer, final LdapConfig ldapConfig) {
-		super(id, new CompoundPropertyModel<>(ldapConfig));
-		setOutputMarkupId(true);
-		this.listContainer = listContainer;
-
-		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1108))));
-		add(new CheckBox("active"));
-		add(forDatePattern("inserted", WEB_DATE_PATTERN));
-		add(new Label("insertedby.login"));
-		add(forDatePattern("updated", WEB_DATE_PATTERN));
-		add(new Label("updatedby.login"));
-		add(new RequiredTextField<String>("configFileName").setLabel(Model.of(Application.getString(1115))));
-		add(new CheckBox("addDomainToUserName"));
-		add(new TextField<String>("domain"));
-		add(new TextArea<String>("comment"));
-
-		// attach an ajax validation behavior to all form component's keydown
-		// event and throttle it down to once per second
-		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
-	}
-
-	@Override
-	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-		setModelObject(getBean(LdapConfigDao.class).update(getModelObject(), WebSession.getUserId()));
-		hideNewRecord();
-		target.add(this, listContainer);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
-		this.setModelObject(new LdapConfig());
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-		LdapConfig ldapConfig = this.getModelObject();
-		if (ldapConfig.getId() != null) {
-			ldapConfig = getBean(LdapConfigDao.class).get(ldapConfig.getId());
-		} else {
-			ldapConfig = new LdapConfig();
-		}
-		this.setModelObject(ldapConfig);
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-		getBean(LdapConfigDao.class).delete(getModelObject(), WebSession.getUserId());
-		this.setModelObject(new LdapConfig());
-		target.add(listContainer);
-		target.add(this);
-		target.appendJavaScript("adminPanelInit();");
-	}
-
-	@Override
-	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-		// TODO Auto-generated method stub
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.ldaps;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
+
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+/**
+ * Form components to insert/update/delete {@link LdapConfig}
+ *
+ * @author swagner
+ *
+ */
+public class LdapForm extends AdminBaseForm<LdapConfig> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer listContainer;
+
+	public LdapForm(String id, WebMarkupContainer listContainer, final LdapConfig ldapConfig) {
+		super(id, new CompoundPropertyModel<>(ldapConfig));
+		setOutputMarkupId(true);
+		this.listContainer = listContainer;
+
+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1108))));
+		add(new CheckBox("active"));
+		add(forDatePattern("inserted", WEB_DATE_PATTERN));
+		add(new Label("insertedby.login"));
+		add(forDatePattern("updated", WEB_DATE_PATTERN));
+		add(new Label("updatedby.login"));
+		add(new RequiredTextField<String>("configFileName").setLabel(Model.of(Application.getString(1115))));
+		add(new CheckBox("addDomainToUserName"));
+		add(new TextField<String>("domain"));
+		add(new TextArea<String>("comment"));
+
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		setModelObject(getBean(LdapConfigDao.class).update(getModelObject(), WebSession.getUserId()));
+		hideNewRecord();
+		target.add(this, listContainer);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new LdapConfig());
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		LdapConfig ldapConfig = this.getModelObject();
+		if (ldapConfig.getId() != null) {
+			ldapConfig = getBean(LdapConfigDao.class).get(ldapConfig.getId());
+		} else {
+			ldapConfig = new LdapConfig();
+		}
+		this.setModelObject(ldapConfig);
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		getBean(LdapConfigDao.class).delete(getModelObject(), WebSession.getUserId());
+		this.setModelObject(new LdapConfig());
+		target.add(listContainer);
+		target.add(this);
+		target.appendJavaScript("adminPanelInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
index 4d51408..a6b1c12 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
@@ -1,93 +1,93 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.admin.ldaps;
-
-import org.apache.openmeetings.db.dao.server.LdapConfigDao;
-import org.apache.openmeetings.db.entity.server.LdapConfig;
-import org.apache.openmeetings.web.admin.AdminPanel;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.openmeetings.web.data.DataViewContainer;
-import org.apache.openmeetings.web.data.OmOrderByBorder;
-import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-
-/**
- * {@link AdminPanel} to list and modify {@link LdapConfig}
- *
- * @author swagner
- *
- */
-public class LdapsPanel extends AdminPanel {
-	private static final long serialVersionUID = 1L;
-	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
-	private LdapForm form;
-
-	public LdapsPanel(String id) {
-		super(id);
-		SearchableDataView<LdapConfig> dataView = new SearchableDataView<LdapConfig>("ldapList"
-			, new SearchableDataProvider<>(LdapConfigDao.class)) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void populateItem(final Item<LdapConfig> item) {
-				final LdapConfig lc = item.getModelObject();
-				item.add(new Label("id"));
-				item.add(new Label("name"));
-				item.add(new Label("configFileName"));
-				item.add(new AjaxEventBehavior("click") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
-						form.setModelObject(lc);
-						form.hideNewRecord();
-						target.add(form, listContainer);
-						target.appendJavaScript("adminPanelInit();");
-					}
-				});
-				item.add(AttributeModifier.replace("class", getRowClass(lc.getId(), form.getModelObject().getId())));
-			}
-		};
-		add(listContainer.add(dataView).setOutputMarkupId(true));
-		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				target.add(listContainer);
-			}
-		};
-		DataViewContainer<LdapConfig> container = new DataViewContainer<>(listContainer, dataView, navigator);
-		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
-			.addLink(new OmOrderByBorder<>("orderByName", "name", container))
-			.addLink(new OmOrderByBorder<>("orderByFile", "configFileName", container));
-		add(container.getLinks());
-		add(navigator);
-
-		form = new LdapForm("form", listContainer, new LdapConfig());
-		form.showNewRecord();
-		add(form);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.ldaps;
+
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+/**
+ * {@link AdminPanel} to list and modify {@link LdapConfig}
+ *
+ * @author swagner
+ *
+ */
+public class LdapsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private LdapForm form;
+
+	public LdapsPanel(String id) {
+		super(id);
+		SearchableDataView<LdapConfig> dataView = new SearchableDataView<LdapConfig>("ldapList"
+			, new SearchableDataProvider<>(LdapConfigDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<LdapConfig> item) {
+				final LdapConfig lc = item.getModelObject();
+				item.add(new Label("id"));
+				item.add(new Label("name"));
+				item.add(new Label("configFileName"));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(lc);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("adminPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", getRowClass(lc.getId(), form.getModelObject().getId())));
+			}
+		};
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<LdapConfig> container = new DataViewContainer<>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<>("orderById", "id", container))
+			.addLink(new OmOrderByBorder<>("orderByName", "name", container))
+			.addLink(new OmOrderByBorder<>("orderByFile", "configFileName", container));
+		add(container.getLinks());
+		add(navigator);
+
+		form = new LdapForm("form", listContainer, new LdapConfig());
+		form.showNewRecord();
+		add(form);
+	}
+}