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:39:01 UTC

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

Repository: openmeetings
Updated Branches:
  refs/heads/master a2aee9856 -> 8e63647cd


.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/eacff5b8
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/eacff5b8
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/eacff5b8

Branch: refs/heads/master
Commit: eacff5b806526060df867fc2c68b3b5db7813e4e
Parents: a2aee98
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu May 18 12:38:13 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu May 18 12:38:13 2017 +0700

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


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


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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>


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/BaseURLLoadTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/BaseURLLoadTest.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/BaseURLLoadTest.lzx
index 4282969..a0e7eda 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/BaseURLLoadTest.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/DownloadSpeedTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/DownloadSpeedTest.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/DownloadSpeedTest.lzx
index 5b195e7..dd8a083 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/DownloadSpeedTest.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/JitterTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/JitterTest.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/JitterTest.lzx
index e4b2f3d..2bf8d3e 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/JitterTest.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/NetworkTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/NetworkTest.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/NetworkTest.lzx
index 811a3cb..e837748 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/NetworkTest.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/PingTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/PingTest.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/PingTest.lzx
index 6217cc3..61d484b 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/PingTest.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/PortAvailabilityTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/PortAvailabilityTest.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/PortAvailabilityTest.lzx
index 65e1d95..ea60c7e 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/PortAvailabilityTest.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/UploadSpeedTest.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/UploadSpeedTest.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/UploadSpeedTest.lzx
index 5edca71..92ea5bf 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/UploadSpeedTest.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/tests/library.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/tests/library.lzx b/openmeetings-flash/src/main/swf10/networkTesting/tests/library.lzx
index 9b8575d..5021b9c 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/tests/library.lzx
+++ b/openmeetings-flash/src/main/swf10/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/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/testsView.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/testsView.lzx b/openmeetings-flash/src/main/swf10/networkTesting/testsView.lzx
index abe03c0..5e6f6ab 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/testsView.lzx
+++ b/openmeetings-flash/src/main/swf10/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="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="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>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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());
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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 ff19b04..591a425 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,259 +1,259 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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 static org.apache.wicket.util.time.Duration.NONE;
-
-import java.io.File;
-import java.nio.file.Path;
-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.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.AjaxDownload;
-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.request.resource.IResource;
-import org.apache.wicket.resource.FileSystemResource;
-import org.apache.wicket.util.lang.Bytes;
-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(new IResource() {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				public void respond(Attributes attributes) {
-					new FileSystemResource(backupFile.toPath()) {
-						private static final long serialVersionUID = 1L;
-
-						@Override
-						protected ResourceResponse createResourceResponse(Attributes attr, Path path) {
-							ResourceResponse response = super.createResourceResponse(attr, path);
-							response.setCacheDuration(NONE);
-							return response;
-						}
-					}.respond(attributes);
-				}
-			});
-			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.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 static org.apache.wicket.util.time.Duration.NONE;
+
+import java.io.File;
+import java.nio.file.Path;
+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.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.AjaxDownload;
+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.request.resource.IResource;
+import org.apache.wicket.resource.FileSystemResource;
+import org.apache.wicket.util.lang.Bytes;
+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(new IResource() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void respond(Attributes attributes) {
+					new FileSystemResource(backupFile.toPath()) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						protected ResourceResponse createResourceResponse(Attributes attr, Path path) {
+							ResourceResponse response = super.createResourceResponse(attr, path);
+							response.setCacheDuration(NONE);
+							return response;
+						}
+					}.respond(attributes);
+				}
+			});
+			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.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/8e63647c/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/8e63647c/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/8e63647c/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
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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 f0b191f..173df11 100644
--- a/openmeetings-server/src/site/xdoc/installation.xml
+++ b/openmeetings-server/src/site/xdoc/installation.xml
@@ -1,265 +1,265 @@
-<?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>
-						</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 and GhostScript 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>
+						</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 and GhostScript 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>
+


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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 1d7d12a..70705f1 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.StreamClient;
-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<StreamClient> clients = new ListView<StreamClient>("clients", new ArrayList<>()) {
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		protected void populateItem(final ListItem<StreamClient> item) {
-			StreamClient 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) {
-						StreamClient 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<StreamClient> 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.StreamClient;
+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<StreamClient> clients = new ListView<StreamClient>("clients", new ArrayList<>()) {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void populateItem(final ListItem<StreamClient> item) {
+			StreamClient 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) {
+						StreamClient 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<StreamClient> 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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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);
+	}
+
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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);
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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 025d2d9..d4f6da1 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,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.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 docDpi = 150;
-	public Integer docQuality = 90;
-	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 + ", docDpi=" + docDpi
-				+ ", docQuality=" + docQuality
-				+ ", 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 docDpi = 150;
+	public Integer docQuality = 90;
+	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 + ", docDpi=" + docDpi
+				+ ", docQuality=" + docQuality
+				+ ", 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/8e63647c/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/8e63647c/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);
+		}
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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>


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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>


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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));
+			}
+		});
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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"));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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.");
+		}
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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 5bd1be2..3ebd6fb 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.StreamClient;
-import org.apache.openmeetings.db.entity.server.Server;
-
-/**
- * Methods to add/get/remove {@link StreamClient}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();
-
-	StreamClient add(StreamClient c, Server server);
-	/**
-	 * add a new client item
-	 *
-	 * @param streamId
-	 * @param scopeName
-	 * @param remotePort
-	 * @param remoteAddress
-	 * @param swfUrl
-	 * @param server
-	 * @return
-	 */
-	StreamClient addClientListItem(String streamId, String scopeName, int remotePort, String remoteAddress, String swfUrl, Server server);
-
-	Collection<StreamClient> getClients();
-
-	/**
-	 * loads the server into the client (only if database cache is used)
-	 *
-	 * @return
-	 */
-	Collection<StreamClient> getClientsWithServer();
-
-	/**
-	 * Get a client by its streamId
-	 *
-	 * @param streamId
-	 * @param server
-	 * @return
-	 */
-	StreamClient getClientByStreamId(String streamId, Server server);
-
-	/**
-	 * get a client by its publicSID and the server,
-	 *
-	 * @param publicSID
-	 * @param server
-	 * @return
-	 */
-	StreamClient 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
-	StreamClient 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, StreamClient 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, StreamClient 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<StreamClient> getClientListByRoom(Long roomId);
-
-	Collection<StreamClient> getClientListByRoomAll(Long roomId);
-
-	/**
-	 * get the current Moderator in this room
-	 *
-	 * @param roomname
-	 * @return
-	 */
-	List<StreamClient> getCurrentModeratorByRoom(Long roomId);
-
-	/**
-	 * Get list of current client sessions
-	 *
-	 * @param start
-	 * @param max
-	 * @param orderby
-	 * @param asc
-	 * @return
-	 */
-	SearchResult<StreamClient> 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.StreamClient;
+import org.apache.openmeetings.db.entity.server.Server;
+
+/**
+ * Methods to add/get/remove {@link StreamClient}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();
+
+	StreamClient add(StreamClient c, Server server);
+	/**
+	 * add a new client item
+	 *
+	 * @param streamId
+	 * @param scopeName
+	 * @param remotePort
+	 * @param remoteAddress
+	 * @param swfUrl
+	 * @param server
+	 * @return
+	 */
+	StreamClient addClientListItem(String streamId, String scopeName, int remotePort, String remoteAddress, String swfUrl, Server server);
+
+	Collection<StreamClient> getClients();
+
+	/**
+	 * loads the server into the client (only if database cache is used)
+	 *
+	 * @return
+	 */
+	Collection<StreamClient> getClientsWithServer();
+
+	/**
+	 * Get a client by its streamId
+	 *
+	 * @param streamId
+	 * @param server
+	 * @return
+	 */
+	StreamClient getClientByStreamId(String streamId, Server server);
+
+	/**
+	 * get a client by its publicSID and the server,
+	 *
+	 * @param publicSID
+	 * @param server
+	 * @return
+	 */
+	StreamClient 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
+	StreamClient 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, StreamClient 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, StreamClient 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<StreamClient> getClientListByRoom(Long roomId);
+
+	Collection<StreamClient> getClientListByRoomAll(Long roomId);
+
+	/**
+	 * get the current Moderator in this room
+	 *
+	 * @param roomname
+	 * @return
+	 */
+	List<StreamClient> getCurrentModeratorByRoom(Long roomId);
+
+	/**
+	 * Get list of current client sessions
+	 *
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	SearchResult<StreamClient> 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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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;
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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";
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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 403e4b7..750724b 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> document.dpi </td>
-					<td> 150 </td>
-					<td> DPI for conversion of PDF to images (should be an integer between 50 and  600 with a default value of 150 DPI) </td>
-					<td> 4.0.x </td>
-				</tr>
-				<tr>
-					<td> document.quality </td>
-					<td> 90 </td>
-					<td> Compression quality for conversion of PDF to images (should be an integer between 1 and 100, with a default value of 90) </td>
-					<td> 4.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> document.dpi </td>
+					<td> 150 </td>
+					<td> DPI for conversion of PDF to images (should be an integer between 50 and  600 with a default value of 150 DPI) </td>
+					<td> 4.0.x </td>
+				</tr>
+				<tr>
+					<td> document.quality </td>
+					<td> 90 </td>
+					<td> Compression quality for conversion of PDF to images (should be an integer between 1 and 100, with a default value of 90) </td>
+					<td> 4.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/8e63647c/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 3d9cf3e..20db886 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                              #
-	#   4.0.0-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                              #
+	#   4.0.0-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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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


[23/23] 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/8e63647c
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/8e63647c
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/8e63647c

Branch: refs/heads/master
Commit: 8e63647cd04854282483beb1cc5d03163d3b86c2
Parents: eacff5b
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu May 18 12:38:51 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu May 18 12:38: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 +-
 openmeetings-flash/src/main/flex/main.mxml      |  642 +++++------
 .../flex/org/apache/openmeetings/OmVideo.as     |  540 +++++-----
 .../swf10/networkTesting/networktesting.lzx     |  178 +--
 .../swf10/networkTesting/rtmpConnection.lzx     |  734 ++++++-------
 .../networkTesting/tests/BaseURLLoadTest.lzx    |  292 ++---
 .../networkTesting/tests/DownloadSpeedTest.lzx  |  100 +-
 .../swf10/networkTesting/tests/JitterTest.lzx   |  114 +-
 .../swf10/networkTesting/tests/NetworkTest.lzx  |  256 ++---
 .../swf10/networkTesting/tests/PingTest.lzx     |   86 +-
 .../tests/PortAvailabilityTest.lzx              |  180 ++--
 .../networkTesting/tests/UploadSpeedTest.lzx    |  248 ++---
 .../main/swf10/networkTesting/tests/library.lzx |   74 +-
 .../src/main/swf10/networkTesting/testsView.lzx |  210 ++--
 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        |  198 ++--
 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              |  530 ++++-----
 .../src/site/xdoc/red5sip-integration_2.0.xml   |  356 +++---
 .../src/site/xdoc/themes-and-branding.xml       |  122 +--
 .../src/site/xdoc/voip-sip-integration.xml      |  144 +--
 .../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  |  632 +++++------
 .../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           |  518 ++++-----
 .../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 +++---
 .../web/room/jquery.dialogextend.js             |  658 +++++------
 .../web/room/jquery.dialogextend.min.js         |    4 +-
 .../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 +--
 .../src/main/webapp/conf/om_ldap.cfg            |  218 ++--
 .../src/main/webapp/languages/errorvalues.xsd   |   82 +-
 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 +--
 229 files changed, 22508 insertions(+), 22508 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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;
+			} 
+		}
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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 72cf707..2539bb4 100644
--- a/openmeetings-server/src/site/xdoc/voip-sip-integration.xml
+++ b/openmeetings-server/src/site/xdoc/voip-sip-integration.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>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/>
-				<a href="red5sip-integration_4.0.html">
-				Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 4.0+
-				</a>.<br/>
-			</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>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/>
+				<a href="red5sip-integration_4.0.html">
+				Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 4.0+
+				</a>.<br/>
+			</p>
+		</section>
+
+	</body>
+
+</document>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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 8cf68d9..1078f09 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,316 +1,316 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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 DOC_PAGE_PREFIX = "page";
-	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_PNG = "png";
-	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), uri == null ? "" : uri);
-		if (!img.exists() || img.isDirectory()) {
-			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 DOC_PAGE_PREFIX = "page";
+	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_PNG = "png";
+	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), uri == null ? "" : uri);
+		if (!img.exists() || img.isDirectory()) {
+			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/8e63647c/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/8e63647c/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();
+	}
+}


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/openmeetings-flash/src/main/flex/main.mxml
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/flex/main.mxml b/openmeetings-flash/src/main/flex/main.mxml
index f275526..de24955 100644
--- a/openmeetings-flash/src/main/flex/main.mxml
+++ b/openmeetings-flash/src/main/flex/main.mxml
@@ -1,321 +1,321 @@
-<?xml version="1.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.
-
--->
-<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
-		xmlns:s="library://ns.adobe.com/flex/spark"
-		xmlns:mx="library://ns.adobe.com/flex/mx"
-		width="570" height="900" pageTitle="Openmeetings" fontSize="12"
-		applicationComplete="appInit(event)" uncaughtError="uncaughtError(event)">
-	<fx:Declarations>
-		<!-- Place non-visual elements (e.g., services, value objects) here -->
-		<mx:TraceTarget/>
-	</fx:Declarations>
-	<fx:Script><![CDATA[
-		import mx.core.FlexGlobals;
-
-		import org.apache.openmeetings.OmVideo;
-
-		private var audioOnly:Boolean = false;
-		private var FPS:int;
-		private var bandwidth:int = 0;
-		private var quality:int = 100;
-		private var echoPath:int = 256;
-		private var echoSuppression:Boolean = true;
-		private var microphoneRateBest:int = 22;//5, 8, 11, 22, and 44
-		private var selectedMic:int = -1;
-		private var selectedCam:int = -1;
-		private var video:OmVideo;
-		private var recName:String;
-		private var mic:Microphone = null;
-		[Bindable]
-		private var interview:Boolean = false;
-
-		private function debug(...rest):void {
-			ExternalInterface.call("console.log", rest);
-		}
-
-		private function camAvail():Boolean {
-			return !audioOnly && Camera.names.length > 0;
-		}
-
-		private function micAvail():Boolean {
-			return Microphone.names.length > 0;
-		}
-
-		private function appInit(evt:Event):void {
-			var params:Object = FlexGlobals.topLevelApplication.parameters;
-			debug("appInit()", params);
-			audioOnly = 'true' == params.audioOnly;
-			interview = 'true' == params.interview;
-			var _fps:int = parseInt(params.fps);
-			FPS = (isNaN(_fps) || _fps < 1 ? 30 : _fps);
-			video = new OmVideo(videoDisplay, params);
-			switch (params.mode) {
-				case 'settings':
-				{
-					ExternalInterface.addCallback("getDevices", function ():Object {
-						return {
-							cams: Camera.names
-							, mics: Microphone.names
-						};
-					});
-					ExternalInterface.addCallback("camChanged", function (val:int):void {
-						selectedCam = val;
-						camChanged(null);
-					});
-					ExternalInterface.addCallback("micChanged", function (val:int):void {
-						selectedMic = val;
-						camChanged(null);
-					});
-					ExternalInterface.addCallback("resChanged", function (width:int, height:int):void {
-						setResolution(width, height, true);
-					});
-					ExternalInterface.addCallback("close", function ():void {
-						video.reset();
-					});
-					ExternalInterface.addCallback("init", function (camIdx:int, micIdx:int, width:int, height:int):void {
-						selectedCam = camIdx;
-						selectedMic = micIdx;
-						setResolution(width, height, true);
-					});
-					ExternalInterface.addCallback("startRec", function ():void {
-						startTestRecording();
-					});
-					ExternalInterface.addCallback("play", function ():void {
-						playTestRecording();
-					});
-					ExternalInterface.call("VideoSettings.initSwf");
-				}
-					break;
-				case OmVideo.BROADCAST:
-				{
-					selectedCam = params.cam;
-					selectedMic = params.mic;
-					video.resize(Math.max(300, params.width), Math.max(200, params.height));
-					attachCamera(function():void {
-						video.resize(params.width, params.height);
-						video.reset();
-						var cam:Camera = getCam();
-						video.attachCamera(cam);
-						video.broadcast(params.broadcastId, cam, getMic());
-						ExternalInterface.call("VideoManager.resetSize", params.uid);
-					});
-				}
-					break;
-				case OmVideo.PLAY:
-				{
-					video.resize(params.width, params.height);
-					video.play(params.broadcastId); // TODO audio/video
-				}
-					break;
-			}
-			ExternalInterface.addCallback("vidResize", function (width:int, height:int):void {
-				video.resize(width, height);
-				video.vidResize(width, height);
-			});
-		}
-
-		private function uncaughtError(e:UncaughtErrorEvent):void {
-			debug("Unexpected ERROR", e);
-		}
-
-		private function getMic():Microphone {
-			debug("Entering getMic ...");
-			var _micro:Microphone = null;
-			if (selectedMic > -1) {
-				_micro = echoPath == 0 ? Microphone.getMicrophone(selectedMic) : Microphone.getEnhancedMicrophone(selectedMic);
-
-				if (_micro != null) {
-					if (echoPath == 256) {
-						var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
-						options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
-						options.echoPath = echoPath;
-						options.nonLinearProcessing = true;
-						_micro.enhancedOptions = options;
-						debug("echoPath set to " + echoPath + ", " + _micro.enhancedOptions);
-					}
-					_micro.codec = SoundCodec.NELLYMOSER;
-					_micro.framesPerPacket = 1;
-					_micro.setSilenceLevel(0, 2000);
-					debug("canvas.microphoneRateBest: " + microphoneRateBest);
-					_micro.rate = microphoneRateBest;
-					_micro.gain = 50;
-					// this has no effect if enhanced microphone is obtained
-					//Microphone setUseEchoSupression(bool)
-					debug("canvas.echoSuppression: " + echoSuppression);
-					_micro.setUseEchoSuppression(echoSuppression);
-				}
-				debug("... getMic DONE" + _micro);
-			}
-			return _micro;
-		}
-
-		private function getCam():Camera {
-			debug("Entering getCam ...");
-			var _camera:Camera = null;
-			if (selectedCam > -1) {
-				_camera = Camera.getCamera("" + selectedCam);
-				if (_camera != null && !_camera.muted) {
-					//FIXME need to be unified
-					if (interview) {
-						//we need a fixed frame rate for the videos to merge them later on
-						_camera.setMode(video.width, video.height, 24);
-						debug("IS INTERVIEW ");
-						_camera.setQuality(0, 98);
-					} else {
-						_camera.setMode(video.width, video.height, FPS);
-						debug("IS NO INTERVIEW ");
-						_camera.setQuality(bandwidth, quality);
-					}
-				}
-				debug("... getCam DONE " + _camera);
-			}
-			return _camera;
-		}
-
-		private function attachCamera(callback:Function):void {
-			if (!camAvail()) {
-				return;
-			}
-			debug("Camera selected:: " + selectedCam);
-			var cam:Camera = getCam();
-			debug("Camera selected:: " + cam);
-			if (cam != null) {
-				if (cam.muted) {
-					debug("Camera Muted");
-					video.attachCamera(cam);
-					cam.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
-						debug("cameraStatusHandler! " + event);
-						cam.removeEventListener(StatusEvent.STATUS, arguments.callee);
-						switch (event.code) {
-							case 'Camera.Muted':
-								debug("Unable to connect to active camera.");
-								break;
-							case 'Camera.Unmuted':
-								callback();
-								break;
-						}
-					});
-				} else {
-					callback();
-				}
-			} else {
-				var _mic:Microphone = getMic();
-				if (_mic != null) {
-					if (_mic.muted) {
-						var nc:NetConnection = new NetConnection();
-						nc.connect(null);
-						var ns:NetStream = new NetStream(nc);
-						ns.attachAudio(_mic);
-						_mic.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
-							debug("micStatusHandler! " + event);
-							_mic.removeEventListener(StatusEvent.STATUS, arguments.callee);
-							ns.close();
-							nc.close();
-							if (_mic.muted) {
-								debug("Unable to connect to active microphone.");
-							} else {
-								ExternalInterface.call("VideoSettings.allowRec", true);
-							}
-						});
-					}
-				}
-			}
-		}
-
-		private function _attachCamera(cam:Camera):void {
-			debug("_attachCamera():: muted ? " + cam.muted);
-			if (cam.muted) {
-				debug("Unable to connect to active camera.");
-			} else {
-				try {
-					video.reset();
-					video.attachCamera(cam);
-					debug("_attachCamera()::done");
-				} catch (error:Error) {
-					debug("_attach:: " + error.message + "\n" + error.getStackTrace());
-				}
-			}
-		}
-
-		private function settingsCameraCallback():void {
-			ExternalInterface.call("VideoSettings.allowRec", true);
-			_attachCamera(getCam());
-		}
-
-		private function setResolution(width:int, height:int, attach:Boolean):void {
-			if (!interview) {
-				debug("onselect WxH :: " + width + "x" + height);
-
-				video.resize(width, height);
-
-				if (attach) {
-					attachCamera(settingsCameraCallback);
-				}
-			}
-		}
-
-		private function camChanged(e:Event):void {
-			attachCamera(settingsCameraCallback);
-		}
-
-		private function playTestRecording():void {
-			video.play(recName + ".flv");
-		}
-
-		private function startTestRecording():void {
-			try {
-				var counter:int = 5;
-				timerText.visible = true;
-				timerText.text = "5 sec";
-				var recTimer:Timer = new Timer(1000, counter);
-				var t:Date = new Date();
-				recName = "TEST_SETUP_" + t.getTime();
-				mic = getMic();
-				var activityTimer:Timer = new Timer(100);
-				activityTimer.addEventListener(TimerEvent.TIMER, function (event:TimerEvent):void {
-					ExternalInterface.call("VideoSettings.micActivity", mic.activityLevel);
-				});
-				video.record(recName, getCam(), mic, function ():void {
-					if (mic != null) {
-						activityTimer.start();
-					}
-					recTimer.addEventListener(TimerEvent.TIMER, function (event:TimerEvent):void {
-						timerText.text = --counter + " sec";
-						if (counter == 0) {
-							timerText.visible = false;
-							ExternalInterface.call("VideoSettings.allowPlay");
-							playTestRecording();
-							activityTimer.stop();
-							mic = null;
-						}
-					});
-					recTimer.start();
-				});
-			} catch (err:Error) {
-				debug("ERROR: " + err);
-			}
-		}
-		]]></fx:Script>
-
-	<mx:UIComponent id="videoDisplay" width="0" height="0" />
-	<s:Label id="timerText" height="20" width="45" x="20" y="5" paddingLeft="5" paddingTop="5"
-			 visible="false" backgroundColor="0xf5f5f5" fontWeight="bold"><s:text></s:text></s:Label>
-</s:Application>
+<?xml version="1.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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+		xmlns:s="library://ns.adobe.com/flex/spark"
+		xmlns:mx="library://ns.adobe.com/flex/mx"
+		width="570" height="900" pageTitle="Openmeetings" fontSize="12"
+		applicationComplete="appInit(event)" uncaughtError="uncaughtError(event)">
+	<fx:Declarations>
+		<!-- Place non-visual elements (e.g., services, value objects) here -->
+		<mx:TraceTarget/>
+	</fx:Declarations>
+	<fx:Script><![CDATA[
+		import mx.core.FlexGlobals;
+
+		import org.apache.openmeetings.OmVideo;
+
+		private var audioOnly:Boolean = false;
+		private var FPS:int;
+		private var bandwidth:int = 0;
+		private var quality:int = 100;
+		private var echoPath:int = 256;
+		private var echoSuppression:Boolean = true;
+		private var microphoneRateBest:int = 22;//5, 8, 11, 22, and 44
+		private var selectedMic:int = -1;
+		private var selectedCam:int = -1;
+		private var video:OmVideo;
+		private var recName:String;
+		private var mic:Microphone = null;
+		[Bindable]
+		private var interview:Boolean = false;
+
+		private function debug(...rest):void {
+			ExternalInterface.call("console.log", rest);
+		}
+
+		private function camAvail():Boolean {
+			return !audioOnly && Camera.names.length > 0;
+		}
+
+		private function micAvail():Boolean {
+			return Microphone.names.length > 0;
+		}
+
+		private function appInit(evt:Event):void {
+			var params:Object = FlexGlobals.topLevelApplication.parameters;
+			debug("appInit()", params);
+			audioOnly = 'true' == params.audioOnly;
+			interview = 'true' == params.interview;
+			var _fps:int = parseInt(params.fps);
+			FPS = (isNaN(_fps) || _fps < 1 ? 30 : _fps);
+			video = new OmVideo(videoDisplay, params);
+			switch (params.mode) {
+				case 'settings':
+				{
+					ExternalInterface.addCallback("getDevices", function ():Object {
+						return {
+							cams: Camera.names
+							, mics: Microphone.names
+						};
+					});
+					ExternalInterface.addCallback("camChanged", function (val:int):void {
+						selectedCam = val;
+						camChanged(null);
+					});
+					ExternalInterface.addCallback("micChanged", function (val:int):void {
+						selectedMic = val;
+						camChanged(null);
+					});
+					ExternalInterface.addCallback("resChanged", function (width:int, height:int):void {
+						setResolution(width, height, true);
+					});
+					ExternalInterface.addCallback("close", function ():void {
+						video.reset();
+					});
+					ExternalInterface.addCallback("init", function (camIdx:int, micIdx:int, width:int, height:int):void {
+						selectedCam = camIdx;
+						selectedMic = micIdx;
+						setResolution(width, height, true);
+					});
+					ExternalInterface.addCallback("startRec", function ():void {
+						startTestRecording();
+					});
+					ExternalInterface.addCallback("play", function ():void {
+						playTestRecording();
+					});
+					ExternalInterface.call("VideoSettings.initSwf");
+				}
+					break;
+				case OmVideo.BROADCAST:
+				{
+					selectedCam = params.cam;
+					selectedMic = params.mic;
+					video.resize(Math.max(300, params.width), Math.max(200, params.height));
+					attachCamera(function():void {
+						video.resize(params.width, params.height);
+						video.reset();
+						var cam:Camera = getCam();
+						video.attachCamera(cam);
+						video.broadcast(params.broadcastId, cam, getMic());
+						ExternalInterface.call("VideoManager.resetSize", params.uid);
+					});
+				}
+					break;
+				case OmVideo.PLAY:
+				{
+					video.resize(params.width, params.height);
+					video.play(params.broadcastId); // TODO audio/video
+				}
+					break;
+			}
+			ExternalInterface.addCallback("vidResize", function (width:int, height:int):void {
+				video.resize(width, height);
+				video.vidResize(width, height);
+			});
+		}
+
+		private function uncaughtError(e:UncaughtErrorEvent):void {
+			debug("Unexpected ERROR", e);
+		}
+
+		private function getMic():Microphone {
+			debug("Entering getMic ...");
+			var _micro:Microphone = null;
+			if (selectedMic > -1) {
+				_micro = echoPath == 0 ? Microphone.getMicrophone(selectedMic) : Microphone.getEnhancedMicrophone(selectedMic);
+
+				if (_micro != null) {
+					if (echoPath == 256) {
+						var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
+						options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
+						options.echoPath = echoPath;
+						options.nonLinearProcessing = true;
+						_micro.enhancedOptions = options;
+						debug("echoPath set to " + echoPath + ", " + _micro.enhancedOptions);
+					}
+					_micro.codec = SoundCodec.NELLYMOSER;
+					_micro.framesPerPacket = 1;
+					_micro.setSilenceLevel(0, 2000);
+					debug("canvas.microphoneRateBest: " + microphoneRateBest);
+					_micro.rate = microphoneRateBest;
+					_micro.gain = 50;
+					// this has no effect if enhanced microphone is obtained
+					//Microphone setUseEchoSupression(bool)
+					debug("canvas.echoSuppression: " + echoSuppression);
+					_micro.setUseEchoSuppression(echoSuppression);
+				}
+				debug("... getMic DONE" + _micro);
+			}
+			return _micro;
+		}
+
+		private function getCam():Camera {
+			debug("Entering getCam ...");
+			var _camera:Camera = null;
+			if (selectedCam > -1) {
+				_camera = Camera.getCamera("" + selectedCam);
+				if (_camera != null && !_camera.muted) {
+					//FIXME need to be unified
+					if (interview) {
+						//we need a fixed frame rate for the videos to merge them later on
+						_camera.setMode(video.width, video.height, 24);
+						debug("IS INTERVIEW ");
+						_camera.setQuality(0, 98);
+					} else {
+						_camera.setMode(video.width, video.height, FPS);
+						debug("IS NO INTERVIEW ");
+						_camera.setQuality(bandwidth, quality);
+					}
+				}
+				debug("... getCam DONE " + _camera);
+			}
+			return _camera;
+		}
+
+		private function attachCamera(callback:Function):void {
+			if (!camAvail()) {
+				return;
+			}
+			debug("Camera selected:: " + selectedCam);
+			var cam:Camera = getCam();
+			debug("Camera selected:: " + cam);
+			if (cam != null) {
+				if (cam.muted) {
+					debug("Camera Muted");
+					video.attachCamera(cam);
+					cam.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
+						debug("cameraStatusHandler! " + event);
+						cam.removeEventListener(StatusEvent.STATUS, arguments.callee);
+						switch (event.code) {
+							case 'Camera.Muted':
+								debug("Unable to connect to active camera.");
+								break;
+							case 'Camera.Unmuted':
+								callback();
+								break;
+						}
+					});
+				} else {
+					callback();
+				}
+			} else {
+				var _mic:Microphone = getMic();
+				if (_mic != null) {
+					if (_mic.muted) {
+						var nc:NetConnection = new NetConnection();
+						nc.connect(null);
+						var ns:NetStream = new NetStream(nc);
+						ns.attachAudio(_mic);
+						_mic.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
+							debug("micStatusHandler! " + event);
+							_mic.removeEventListener(StatusEvent.STATUS, arguments.callee);
+							ns.close();
+							nc.close();
+							if (_mic.muted) {
+								debug("Unable to connect to active microphone.");
+							} else {
+								ExternalInterface.call("VideoSettings.allowRec", true);
+							}
+						});
+					}
+				}
+			}
+		}
+
+		private function _attachCamera(cam:Camera):void {
+			debug("_attachCamera():: muted ? " + cam.muted);
+			if (cam.muted) {
+				debug("Unable to connect to active camera.");
+			} else {
+				try {
+					video.reset();
+					video.attachCamera(cam);
+					debug("_attachCamera()::done");
+				} catch (error:Error) {
+					debug("_attach:: " + error.message + "\n" + error.getStackTrace());
+				}
+			}
+		}
+
+		private function settingsCameraCallback():void {
+			ExternalInterface.call("VideoSettings.allowRec", true);
+			_attachCamera(getCam());
+		}
+
+		private function setResolution(width:int, height:int, attach:Boolean):void {
+			if (!interview) {
+				debug("onselect WxH :: " + width + "x" + height);
+
+				video.resize(width, height);
+
+				if (attach) {
+					attachCamera(settingsCameraCallback);
+				}
+			}
+		}
+
+		private function camChanged(e:Event):void {
+			attachCamera(settingsCameraCallback);
+		}
+
+		private function playTestRecording():void {
+			video.play(recName + ".flv");
+		}
+
+		private function startTestRecording():void {
+			try {
+				var counter:int = 5;
+				timerText.visible = true;
+				timerText.text = "5 sec";
+				var recTimer:Timer = new Timer(1000, counter);
+				var t:Date = new Date();
+				recName = "TEST_SETUP_" + t.getTime();
+				mic = getMic();
+				var activityTimer:Timer = new Timer(100);
+				activityTimer.addEventListener(TimerEvent.TIMER, function (event:TimerEvent):void {
+					ExternalInterface.call("VideoSettings.micActivity", mic.activityLevel);
+				});
+				video.record(recName, getCam(), mic, function ():void {
+					if (mic != null) {
+						activityTimer.start();
+					}
+					recTimer.addEventListener(TimerEvent.TIMER, function (event:TimerEvent):void {
+						timerText.text = --counter + " sec";
+						if (counter == 0) {
+							timerText.visible = false;
+							ExternalInterface.call("VideoSettings.allowPlay");
+							playTestRecording();
+							activityTimer.stop();
+							mic = null;
+						}
+					});
+					recTimer.start();
+				});
+			} catch (err:Error) {
+				debug("ERROR: " + err);
+			}
+		}
+		]]></fx:Script>
+
+	<mx:UIComponent id="videoDisplay" width="0" height="0" />
+	<s:Label id="timerText" height="20" width="45" x="20" y="5" paddingLeft="5" paddingTop="5"
+			 visible="false" backgroundColor="0xf5f5f5" fontWeight="bold"><s:text></s:text></s:Label>
+</s:Application>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
index c32e8a2..fbf540d 100644
--- a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
+++ b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
@@ -1,270 +1,270 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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 {
-import flash.events.AsyncErrorEvent;
-import flash.events.NetStatusEvent;
-import flash.external.ExternalInterface;
-import flash.media.Camera;
-import flash.media.H264Level;
-import flash.media.H264Profile;
-import flash.media.H264VideoStreamSettings;
-import flash.media.Microphone;
-import flash.media.Video;
-import flash.media.VideoStreamSettings;
-import flash.net.NetConnection;
-import flash.net.NetStream;
-import mx.core.UIComponent;
-
-public class OmVideo {
-	public static const CODEC_H264:String = "h264";
-	public static const PLAY:String = "play";
-	public static const BROADCAST:String = "broadcast";
-	public static const RECORD:String = "record";
-	public static const LIVE:String = "live";
-	private var vid:Video;
-	private var ui:UIComponent;
-	private var nc:NetConnection;
-	private var ns:NetStream;
-	public var width:int;
-	public var height:int;
-	private var mode:String;
-	private var params:Object;
-	private var url:String;
-	private var fallback:Boolean;
-
-	public function OmVideo(ui:UIComponent, params:Object) {
-		this.ui = ui;
-		this.params = params;
-	}
-
-	private function getVideo():Video {
-		if (vid == null) {
-			vid = new Video();
-			vid.width = width;
-			vid.height = height;
-			ui.addChild(vid);
-		}
-		return vid;
-	}
-
-	public function resize(width:int, height:int):void {
-		this.width = ui.width = width;
-		this.height = ui.height = height;
-	}
-
-	public function vidResize(width:int, height:int):void {
-		vid.width = width;
-		vid.height = height;
-		debug("OmVideo::resize", width, height);
-	}
-
-	public function attachCamera(cam:Camera):void {
-		getVideo().attachCamera(cam);
-	}
-
-	public function attachStream(ns:NetStream):void {
-		this.ns = ns;
-		getVideo().attachNetStream(ns);
-	}
-
-	private function clear():void {
-		vid.attachNetStream(null);
-		vid.attachCamera(null);
-		vid.clear();
-		ui.removeChild(vid);
-		vid = null;
-	}
-
-	private function debug(... rest):void {
-		ExternalInterface.call("console.log", rest);
-	}
-
-	private function createStream():void {
-		debug("createStream: ");
-		ns = new NetStream(nc);
-		ns.client = {
-			onMetaData: function(metadata:Object):void {
-				debug("onMetaData: ", metadata);
-			}
-			, onPlayStatus: function(metadata:Object):void {
-				debug("onPlayStatus: ", metadata);
-			}
-			, onCuePoint: function(metadata:Object):void {
-				debug("onCuePoint: ", metadata);
-			}
-			, ioError: function(error:Object):void {
-				debug("ioError: ", error);
-			}
-			, netStatus: function(status:Object):void {
-				debug("netStatus: ", status);
-			}
-			, asyncError: function(error:Object):void {
-				debug("asyncError: ", error);
-			}
-		};
-		//this is a workaround, attaching the event to the client object does not work
-		ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
-	}
-
-	private function onNetStatus2(evt:Object):void {
-		debug("netStream_onNetStatus: ", evt.info.code, evt.target);
-	}
-
-	private function _publish(mode:String, name:String, cam:Camera, mic:Microphone, f:Function):void {
-		if (ns != null){
-			reset();
-		}
-		this.mode = mode;
-		createStream();
-
-		if (cam != null) {
-			ns.attachCamera(cam);
-			attachCamera(cam);
-
-			var videoStreamSettings:VideoStreamSettings = null;
-			debug("codec = " + params.videoCodec);
-			if (params.videoCodec === CODEC_H264) {
-				var vss:H264VideoStreamSettings = new H264VideoStreamSettings();
-				vss.setProfileLevel(H264Profile.BASELINE, H264Level.LEVEL_5_1);
-				videoStreamSettings = vss;
-			} else {
-				videoStreamSettings = new VideoStreamSettings();
-			}
-			videoStreamSettings.setQuality(cam.bandwidth, cam.quality);
-			videoStreamSettings.setKeyFrameInterval(cam.keyFrameInterval);
-			debug("::camera settings ", cam.keyFrameInterval, cam.width, cam.height, cam.fps);
-			videoStreamSettings.setMode(cam.width, cam.height, cam.fps);
-			ns.videoStreamSettings = videoStreamSettings;
-		}
-		if (mic != null) {
-			ns.attachAudio(mic);
-			//FIXME !!! no mute !!! muteMicro(this.micMuted);
-		}
-
-		ns.publish(name, (mode == BROADCAST) ? LIVE : mode);
-		if (f != null) {
-			f.call();
-		}
-	}
-
-	private function _connect(url:String):void {
-		nc.connect(url, {
-			uid: params.uid
-			, sid: params.sid
-			, nativeSsl: 'best' == params.proxyType
-		});
-	}
-
-	private function connect(callback:Function):void {
-		if (nc == null || !nc.connected) {
-			url = params.url;
-			debug("NetConnection is not connected", url);
-			nc = new NetConnection();
-			nc.addEventListener(NetStatusEvent.NET_STATUS, function onConnectionStatus(e:NetStatusEvent):void {
-				debug("ConnectionStatus: " + e.info.code);
-				switch (e.info.code) {
-					case 'NetConnection.Connect.Failed':
-						if (!fallback) {
-							fallback = true;
-							url = params.fallback;
-							_connect(url);
-						}
-						break;
-					case 'NetConnection.Connect.Success':
-						callback();
-						break;
-					//TODO other cases
-				}
-			});
-			nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {
-				debug("login Async error" + event);
-			});
-			nc.client = {
-				onMetaData: function (infoObject:Object):void {
-					debug("onMetaData::", infoObject);
-				}
-				, onBWDone: function(...rest):void {
-					debug("onBWDone");
-				}
-				, onBWCheck: function(...rest):Number {
-					debug("onBWCheck");
-					return 0;
-				}
-				, setId: function (id:Number):void {
-					debug("id: " + id); //TODO save connection id
-				}
-			};
-			_connect(url);
-		} else {
-			callback();
-		}
-	}
-
-	public function broadcast(name:String, cam:Camera, mic:Microphone):void {
-		connect(function():void {
-			_publish(BROADCAST, name, cam, mic, null);
-		});
-	}
-
-	public function record(name:String, cam:Camera, mic:Microphone, f:Function):void {
-		connect(function():void {
-			_publish(RECORD, name, cam, mic, f);
-		});
-	}
-
-	public function play(name:String):void {
-		connect(function():void {
-			debug("PLAY::", name);
-			if (ns != null){
-				reset();
-			}
-			mode = PLAY;
-			createStream();
-			//invokes Method in baseVideoView which shows the stream
-			getVideo().attachNetStream(ns);
-			//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
-			//after re-syncing the stream
-			//this.setBuffer(0.1);
-			ns.play(name);
-		});
-	}
-
-	public function reset():void {
-		if (ns != null) {
-			switch (mode) {
-				case PLAY:
-					ns.pause();
-					ns.dispose();
-					clear();
-					break;
-				case BROADCAST:
-				case RECORD:
-					ns.publish(null); //false in original code
-				default:
-					clear();
-					ns.dispose();
-					break;
-			}
-		} else {
-			clear();
-		}
-		ns = 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 {
+import flash.events.AsyncErrorEvent;
+import flash.events.NetStatusEvent;
+import flash.external.ExternalInterface;
+import flash.media.Camera;
+import flash.media.H264Level;
+import flash.media.H264Profile;
+import flash.media.H264VideoStreamSettings;
+import flash.media.Microphone;
+import flash.media.Video;
+import flash.media.VideoStreamSettings;
+import flash.net.NetConnection;
+import flash.net.NetStream;
+import mx.core.UIComponent;
+
+public class OmVideo {
+	public static const CODEC_H264:String = "h264";
+	public static const PLAY:String = "play";
+	public static const BROADCAST:String = "broadcast";
+	public static const RECORD:String = "record";
+	public static const LIVE:String = "live";
+	private var vid:Video;
+	private var ui:UIComponent;
+	private var nc:NetConnection;
+	private var ns:NetStream;
+	public var width:int;
+	public var height:int;
+	private var mode:String;
+	private var params:Object;
+	private var url:String;
+	private var fallback:Boolean;
+
+	public function OmVideo(ui:UIComponent, params:Object) {
+		this.ui = ui;
+		this.params = params;
+	}
+
+	private function getVideo():Video {
+		if (vid == null) {
+			vid = new Video();
+			vid.width = width;
+			vid.height = height;
+			ui.addChild(vid);
+		}
+		return vid;
+	}
+
+	public function resize(width:int, height:int):void {
+		this.width = ui.width = width;
+		this.height = ui.height = height;
+	}
+
+	public function vidResize(width:int, height:int):void {
+		vid.width = width;
+		vid.height = height;
+		debug("OmVideo::resize", width, height);
+	}
+
+	public function attachCamera(cam:Camera):void {
+		getVideo().attachCamera(cam);
+	}
+
+	public function attachStream(ns:NetStream):void {
+		this.ns = ns;
+		getVideo().attachNetStream(ns);
+	}
+
+	private function clear():void {
+		vid.attachNetStream(null);
+		vid.attachCamera(null);
+		vid.clear();
+		ui.removeChild(vid);
+		vid = null;
+	}
+
+	private function debug(... rest):void {
+		ExternalInterface.call("console.log", rest);
+	}
+
+	private function createStream():void {
+		debug("createStream: ");
+		ns = new NetStream(nc);
+		ns.client = {
+			onMetaData: function(metadata:Object):void {
+				debug("onMetaData: ", metadata);
+			}
+			, onPlayStatus: function(metadata:Object):void {
+				debug("onPlayStatus: ", metadata);
+			}
+			, onCuePoint: function(metadata:Object):void {
+				debug("onCuePoint: ", metadata);
+			}
+			, ioError: function(error:Object):void {
+				debug("ioError: ", error);
+			}
+			, netStatus: function(status:Object):void {
+				debug("netStatus: ", status);
+			}
+			, asyncError: function(error:Object):void {
+				debug("asyncError: ", error);
+			}
+		};
+		//this is a workaround, attaching the event to the client object does not work
+		ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
+	}
+
+	private function onNetStatus2(evt:Object):void {
+		debug("netStream_onNetStatus: ", evt.info.code, evt.target);
+	}
+
+	private function _publish(mode:String, name:String, cam:Camera, mic:Microphone, f:Function):void {
+		if (ns != null){
+			reset();
+		}
+		this.mode = mode;
+		createStream();
+
+		if (cam != null) {
+			ns.attachCamera(cam);
+			attachCamera(cam);
+
+			var videoStreamSettings:VideoStreamSettings = null;
+			debug("codec = " + params.videoCodec);
+			if (params.videoCodec === CODEC_H264) {
+				var vss:H264VideoStreamSettings = new H264VideoStreamSettings();
+				vss.setProfileLevel(H264Profile.BASELINE, H264Level.LEVEL_5_1);
+				videoStreamSettings = vss;
+			} else {
+				videoStreamSettings = new VideoStreamSettings();
+			}
+			videoStreamSettings.setQuality(cam.bandwidth, cam.quality);
+			videoStreamSettings.setKeyFrameInterval(cam.keyFrameInterval);
+			debug("::camera settings ", cam.keyFrameInterval, cam.width, cam.height, cam.fps);
+			videoStreamSettings.setMode(cam.width, cam.height, cam.fps);
+			ns.videoStreamSettings = videoStreamSettings;
+		}
+		if (mic != null) {
+			ns.attachAudio(mic);
+			//FIXME !!! no mute !!! muteMicro(this.micMuted);
+		}
+
+		ns.publish(name, (mode == BROADCAST) ? LIVE : mode);
+		if (f != null) {
+			f.call();
+		}
+	}
+
+	private function _connect(url:String):void {
+		nc.connect(url, {
+			uid: params.uid
+			, sid: params.sid
+			, nativeSsl: 'best' == params.proxyType
+		});
+	}
+
+	private function connect(callback:Function):void {
+		if (nc == null || !nc.connected) {
+			url = params.url;
+			debug("NetConnection is not connected", url);
+			nc = new NetConnection();
+			nc.addEventListener(NetStatusEvent.NET_STATUS, function onConnectionStatus(e:NetStatusEvent):void {
+				debug("ConnectionStatus: " + e.info.code);
+				switch (e.info.code) {
+					case 'NetConnection.Connect.Failed':
+						if (!fallback) {
+							fallback = true;
+							url = params.fallback;
+							_connect(url);
+						}
+						break;
+					case 'NetConnection.Connect.Success':
+						callback();
+						break;
+					//TODO other cases
+				}
+			});
+			nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {
+				debug("login Async error" + event);
+			});
+			nc.client = {
+				onMetaData: function (infoObject:Object):void {
+					debug("onMetaData::", infoObject);
+				}
+				, onBWDone: function(...rest):void {
+					debug("onBWDone");
+				}
+				, onBWCheck: function(...rest):Number {
+					debug("onBWCheck");
+					return 0;
+				}
+				, setId: function (id:Number):void {
+					debug("id: " + id); //TODO save connection id
+				}
+			};
+			_connect(url);
+		} else {
+			callback();
+		}
+	}
+
+	public function broadcast(name:String, cam:Camera, mic:Microphone):void {
+		connect(function():void {
+			_publish(BROADCAST, name, cam, mic, null);
+		});
+	}
+
+	public function record(name:String, cam:Camera, mic:Microphone, f:Function):void {
+		connect(function():void {
+			_publish(RECORD, name, cam, mic, f);
+		});
+	}
+
+	public function play(name:String):void {
+		connect(function():void {
+			debug("PLAY::", name);
+			if (ns != null){
+				reset();
+			}
+			mode = PLAY;
+			createStream();
+			//invokes Method in baseVideoView which shows the stream
+			getVideo().attachNetStream(ns);
+			//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events
+			//after re-syncing the stream
+			//this.setBuffer(0.1);
+			ns.play(name);
+		});
+	}
+
+	public function reset():void {
+		if (ns != null) {
+			switch (mode) {
+				case PLAY:
+					ns.pause();
+					ns.dispose();
+					clear();
+					break;
+				case BROADCAST:
+				case RECORD:
+					ns.publish(null); //false in original code
+				default:
+					clear();
+					ns.dispose();
+					break;
+			}
+		} else {
+			clear();
+		}
+		ns = null;
+	}
+}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/networktesting.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/networktesting.lzx b/openmeetings-flash/src/main/swf10/networkTesting/networktesting.lzx
index df65c1b..da55d60 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/networktesting.lzx
+++ b/openmeetings-flash/src/main/swf10/networkTesting/networktesting.lzx
@@ -1,89 +1,89 @@
-<?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="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;
-		}
-		var config = ExternalInterface.call("getConfig");
-		doDebugInit();
-		getSettings(config);
-		canvas.showTests();
-	]]></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>
-
-	<method name="getSettings" args="config">
-		if ($debug) Debug.write("getSettings:: ", config);
-		canvas.setAttribute("rtmpProtocol", config.flashProtocol);
-		canvas.setAttribute("proxyType", config.proxy);
-		canvas.setAttribute("rtmpHost", config.host);
-		canvas.setAttribute("rtmpPort", config.flashPort);
-		
-		canvas.setAttribute("httpProtocol", config.httpProtocol);
-		canvas.setAttribute("httpHost", config.host);
-		canvas.setAttribute("httpPort", config.httpPort);
-
-		canvas.setAttribute("uriContext", '/' + config.path);
-		canvas.setAttribute("rtmpUriPath", canvas.uriContext + "hibernate");
-	</method>
-
-	<method name="showTests">
-		var tests = new lz.TestsView(canvas, {name:"testsView"});
-		tests.testAll();
-	</method>
-
-	<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="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;
+		}
+		var config = ExternalInterface.call("getConfig");
+		doDebugInit();
+		getSettings(config);
+		canvas.showTests();
+	]]></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>
+
+	<method name="getSettings" args="config">
+		if ($debug) Debug.write("getSettings:: ", config);
+		canvas.setAttribute("rtmpProtocol", config.flashProtocol);
+		canvas.setAttribute("proxyType", config.proxy);
+		canvas.setAttribute("rtmpHost", config.host);
+		canvas.setAttribute("rtmpPort", config.flashPort);
+		
+		canvas.setAttribute("httpProtocol", config.httpProtocol);
+		canvas.setAttribute("httpHost", config.host);
+		canvas.setAttribute("httpPort", config.httpPort);
+
+		canvas.setAttribute("uriContext", '/' + config.path);
+		canvas.setAttribute("rtmpUriPath", canvas.uriContext + "hibernate");
+	</method>
+
+	<method name="showTests">
+		var tests = new lz.TestsView(canvas, {name:"testsView"});
+		tests.testAll();
+	</method>
+
+	<attribute name="busy" type="boolean" value="false"/>
+	<attribute name="log" type="string" value="" />
+
+	<attribute name="testsView" value="null"/>
+
+</canvas>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-flash/src/main/swf10/networkTesting/rtmpConnection.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf10/networkTesting/rtmpConnection.lzx b/openmeetings-flash/src/main/swf10/networkTesting/rtmpConnection.lzx
index ad1958f..0cb20a6 100644
--- a/openmeetings-flash/src/main/swf10/networkTesting/rtmpConnection.lzx
+++ b/openmeetings-flash/src/main/swf10/networkTesting/rtmpConnection.lzx
@@ -1,367 +1,367 @@
-<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.
-
--->
-
-<class name="rtmpConnection" extends="node">
-	<switch>
-		<when property="$as3">
-			<passthrough>
-				import flash.net.NetConnection;
-				import flash.events.NetStatusEvent;
-			</passthrough>
-		</when>
-	</switch>
-
-	<attribute name="debug" value="false" type="boolean" />
-
-	<event name="onconnect"/>
-	<event name="onerror"/>
-
-	<!-- this attribute holds a reference to the current/last called netremoteCall,
-	in case of error you can debug that way which call did fail -->
-	<attribute name="lastCalled" value="null" />
-
-	<attribute name="src" value="" type="string"/>
-
-	<method name="connect">
-		this._nc = new NetConnection();
-
-		// local reference to rtmpconnection
-		//this._nc.t = this;
-
-		this._nc.proxyType = canvas.proxyType;
-
-		var ok = this._nc.connect(src == "null" ? null : src, {
-			uid: "noclient"
-		});
-		if (this.debug) {
-			if($debug) Debug.write("*** debug ***");
-		}
-
-		this._nc.addEventListener(NetStatusEvent.NET_STATUS, _onStatus);
-
-		if($debug) Debug.write("devRtmpConnection/registerMethods()");
-		var clientObj = {};
-		clientObj.setId = this.setId;
-
-		this._nc.client = clientObj;
-
-		//Register Methods
-		//this.registerMethods();
-	</method>
-
-	<method name="setId" args="tId">
-		if ($debug) Debug.write("setId ", tId);
-	</method>
-
-	<method name="_onStatus" args="stats"><![CDATA[
-		if ($debug) {
-			Debug.write("devrtmpconnection", this, "_onStatus", stats.info.code);
-		}
-
-		var msg = "";
-		var s;
-
-		switch (stats.info.code) {
-
-			case "NetConnection.Connect.Success": {
-				// The connection attempt succeeded.
-				//canvas.currentNC is the reference to the NetConnection that is used in the NetStream
-				msg = stats.info.code;
-				canvas.currentNC = this._nc;
-				s = 2;
-				break;
-			}
-
-			case "NetConnection.Connect.Closed": {
-				msg = stats.info.code;
-				this._nc = null;
-				canvas.currentNC = null;
-				s = 0;
-				break;
-			}
-
-			default: {
-				msg = stats.info.code;
-				s = 0;
-				break;
-			}
-
-		}
-
-		this.setAttribute("status", msg);
-
-		if (s == 2) {
-			this.onconnect.sendEvent();
-		} else {
-			this.onerror.sendEvent();
-		}
-
-	]]>
-	</method>
-
-	<method name="disconnect">
-		if ($debug) Debug.write(" DISCONNECT ");
-		if (this._nc != null) {
-			this._nc.close();
-		}
-	</method>
-	<!---
-		With this function all methods are registered to the NetConnection
-		A server can invoke this Method with a call for it from the Client
-		Only subnodes of rtmpconnections which are a instance of netRemoteCallHib
-		are registered, to add dynamically methods to the remotefunction you will
-		have to invoke this method once again
-		-swagner
-	 -->
-	<method name="registerMethods">
-		<![CDATA[
-			if (this.subnodes!=null){
-				var clientObj = {};
-				//Register all methods which are onstanceof netRemoteCallHib
-				for (var i=0;i<this.subnodes.length;i++){
-					//If it is of Type netRemoteCallHib then register it to the NetConnection
-					if (this.subnodes[i] instanceof lz.netRemoteCallHib){
-						clientObj[this.subnodes[i].funcname] = function( args ){
-							return canvas.thishib.remoteCallMethod(arguments.callee,arguments);
-							//return hib.remoteCallMethod(arguments.callee,args);
-						}
-					}
-				}
-				this._nc.client = clientObj;
-			}
-		]]>
-	</method>
-
-	<!--
-		Process the RemoteCall to the Right Funtion
-		-swagner
-	 -->
-	<method name="remoteCallMethod" args="callee,args">
-		<![CDATA[
-			for (var eg in this._nc){
-				if (this._nc[eg]==callee){
-					if (this.debug) {
-						//_root.Debug.write.write("DEBUG invoked a function remotely: ",eg,args);
-					}
-					if (args.length == 1) {
-						return this.callFuntion(eg,args[0]);
-					} else {
-						return this.callFuntion(eg,args);
-					}
-					//return this.callFuntion(eg,args);
-				}
-			}
-		]]>
-	</method>
-
-	<!--
-		Map the Function to a netRemoteCallHib
-		-swagner
-	 -->
-	<method name="callFuntion" args="funcname,args">
-		<![CDATA[
-			for (var i=0;i<this.subnodes.length;i++){
-				if (this.subnodes[i].funcname==funcname){
-					return this.subnodes[i].onResult(args);
-				}
-			}
-		]]>
-	</method>
-
-	<method name="callRPC" args="func, obj, params">
-		//if ($debug) Debug.write("*** call: func, obj, params",func,obj, typeof (params) ,params.length);
-		if (params.length != 0){
-			//does this really work?
-			//ASSetPropFlags(_global, null, 8, 1);
-			//setPropertyIsEnumerable(8, 1);
-			//Debug.write("does it work?",arguments);
-			<!--
-			this._nc.call.apply(this._nc,arguments);
-			 -->
-			if (params.length==1){
-				this._nc.call(func, obj,params[0]);
-			} else if (params.length==2){
-				this._nc.call(func, obj,params[0],params[1]);
-			} else if (params.length==3){
-				this._nc.call(func, obj,params[0],params[1],params[2]);
-			} else if (params.length==4){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3]);
-			} else if (params.length==5){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4]);
-			} else if (params.length==6){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5]);
-			} else if (params.length==7){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6]);
-			} else if (params.length==8){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7]);
-			} else if (params.length==9){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]);
-			} else if (params.length==10){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]);
-			} else if (params.length==11){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10]);
-			} else if (params.length==12){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11]);
-			} else if (params.length==13){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12]);
-			} else if (params.length==14){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13]);
-			} else if (params.length==15){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14]);
-			} else if (params.length==16){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15]);
-			} else if (params.length==17){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16]);
-			} else if (params.length==18){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17]);
-			} else if (params.length==19){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18]);
-			} else if (params.length==20){
-				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18],params[19]);
-			}
-		} else {
-			this._nc.call(func, obj);
-		}
-	</method>
-</class>
-
-
-	<!---
-		Net remote call.
-		@todo Document netremotecall class.
-	-->
-	<class name="netremotecall" extends="node">
-		<switch>
-			<when property="$as3">
-				<passthrough>
-					import flash.net.Responder;
-				</passthrough>
-			</when>
-		</switch>
-
-		<!--- Name of the remote function. -->
-		<attribute name="funcname" value="$once{null}" type="string" />
-
-		<attribute name="remotecontext" value="null" />
-
-		<attribute name="dataobject" value="null" />
-
-		<attribute name="responder" value="null" />
-
-		<!--- Data handling event. args="value"  -->
-		<event name="ondata" />
-
-		<!--- Error handling event. -->
-		<event name="onerror"/>
-
-		<!--- Call the remote method, passing the array of params. -->
-		<method name="callRPC" args="params"><![CDATA[
-			if (this.funcname == null) {
-				//Debug.write("No funcname given");
-				if (this.onerror) this.onerror.sendEvent("No funcname given");
-				return;
-			}
-
-			if (params == null) {
-				params = new Array();
-
-				var subnodes = this.subnodes;
-				if (subnodes != null) {
-					var i;
-					var n = subnodes.length;
-					for (i = 0; i < n; i++) {
-						// If getValue method is declared in param, call that
-						// instead to get value.
-						var tsi = subnodes[i];
-						//TODO: fixme
-						//if ((tsi["getValue"] != null) && (tsi.getValue["prototype"] != null)) {
-						//	params[i] = tsi.getValue();
-						//	Debug.write("tsi.getValue():", tsi.getValue());
-						//} else {
-						//	params[i] = tsi.value;
-						//}
-						params[i] = tsi.getValue();
-					}
-				}
-
-			} else if (params.__proto__ != Array.prototype) {
-				//Debug.write(this.name, "error: first argument (params) is not an array");
-				return -1;
-			}
-
-			//if ($debug) Debug.write("call", this, this.parent, this.parent.status);
-			var rtmpObject = null;
-			if (this.parent instanceof lz.rtmpConnection){
-				rtmpObject = this.parent;
-			} else if(this.remotecontext  instanceof lz.rtmpConnection){
-				rtmpObject = this.remotecontext;
-			} else {
-				if ($debug) Debug.warn("ERROR: no remotecontext availible abort call", this.funcname, this);
-				return;
-			}
-			//Debug.write('call', this, rtmpObject, rtmpObject.status);
-			//Debug.write('call', this.remotecontext);
-			if (rtmpObject.debug) Debug.write('call', this, rtmpObject, rtmpObject.status);
-			rtmpObject.lastCalled = this;
-
-			this.responder = new Responder(onResult);
-
-			rtmpObject.callRPC(this.funcname, this.responder, params);
-
-		]]>
-		</method>
-
-		<!--- Handle the result returned from the remote method. -->
-		<method name="onResult" args="value"><![CDATA[
-			// Can be overriden.
-			// Would be great if it can be used with dataobject,
-			// but I don't know how to convert Array/primitive to LzDataset/LzDataPointer.
-			////Debug.write("netremotecall", this, "onResult", value);
-
-			if (this.dataobject!=null) {
-				if ( this.dataobject instanceof LzDataset ) {
-					//Debug.write("onResult: ",this,value,dataobject);
-					var element = LzDataElement.valueToElement(value);
-					this.dataobject.setData(element.childNodes);
-				} else if ( this.dataobject instanceof LzDataElement ) {
-					var element = LzDataElement.valueToElement(value);
-					this.dataobject.appendChild( element );
-				} else {
-					//TODO:fixme
-					//Debug.warn("dataobject is not LzDataset or LzDataElement: ",this,this.dataobject,delegate);
-				}
-			}
-			this.ondata.sendEvent(value);
-		]]>
-		</method>
-	</class>
-
-	<!---
-		Net parameter.
-		Element to use inside netremotecall.
-		@todo Document netparam class.
-	-->
-	<class name="netparam" extends="node">
-		<!--- The value of the netparam. -->
-		<attribute name="value" value="null"/>
-	</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.
+
+-->
+
+<class name="rtmpConnection" extends="node">
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.net.NetConnection;
+				import flash.events.NetStatusEvent;
+			</passthrough>
+		</when>
+	</switch>
+
+	<attribute name="debug" value="false" type="boolean" />
+
+	<event name="onconnect"/>
+	<event name="onerror"/>
+
+	<!-- this attribute holds a reference to the current/last called netremoteCall,
+	in case of error you can debug that way which call did fail -->
+	<attribute name="lastCalled" value="null" />
+
+	<attribute name="src" value="" type="string"/>
+
+	<method name="connect">
+		this._nc = new NetConnection();
+
+		// local reference to rtmpconnection
+		//this._nc.t = this;
+
+		this._nc.proxyType = canvas.proxyType;
+
+		var ok = this._nc.connect(src == "null" ? null : src, {
+			uid: "noclient"
+		});
+		if (this.debug) {
+			if($debug) Debug.write("*** debug ***");
+		}
+
+		this._nc.addEventListener(NetStatusEvent.NET_STATUS, _onStatus);
+
+		if($debug) Debug.write("devRtmpConnection/registerMethods()");
+		var clientObj = {};
+		clientObj.setId = this.setId;
+
+		this._nc.client = clientObj;
+
+		//Register Methods
+		//this.registerMethods();
+	</method>
+
+	<method name="setId" args="tId">
+		if ($debug) Debug.write("setId ", tId);
+	</method>
+
+	<method name="_onStatus" args="stats"><![CDATA[
+		if ($debug) {
+			Debug.write("devrtmpconnection", this, "_onStatus", stats.info.code);
+		}
+
+		var msg = "";
+		var s;
+
+		switch (stats.info.code) {
+
+			case "NetConnection.Connect.Success": {
+				// The connection attempt succeeded.
+				//canvas.currentNC is the reference to the NetConnection that is used in the NetStream
+				msg = stats.info.code;
+				canvas.currentNC = this._nc;
+				s = 2;
+				break;
+			}
+
+			case "NetConnection.Connect.Closed": {
+				msg = stats.info.code;
+				this._nc = null;
+				canvas.currentNC = null;
+				s = 0;
+				break;
+			}
+
+			default: {
+				msg = stats.info.code;
+				s = 0;
+				break;
+			}
+
+		}
+
+		this.setAttribute("status", msg);
+
+		if (s == 2) {
+			this.onconnect.sendEvent();
+		} else {
+			this.onerror.sendEvent();
+		}
+
+	]]>
+	</method>
+
+	<method name="disconnect">
+		if ($debug) Debug.write(" DISCONNECT ");
+		if (this._nc != null) {
+			this._nc.close();
+		}
+	</method>
+	<!---
+		With this function all methods are registered to the NetConnection
+		A server can invoke this Method with a call for it from the Client
+		Only subnodes of rtmpconnections which are a instance of netRemoteCallHib
+		are registered, to add dynamically methods to the remotefunction you will
+		have to invoke this method once again
+		-swagner
+	 -->
+	<method name="registerMethods">
+		<![CDATA[
+			if (this.subnodes!=null){
+				var clientObj = {};
+				//Register all methods which are onstanceof netRemoteCallHib
+				for (var i=0;i<this.subnodes.length;i++){
+					//If it is of Type netRemoteCallHib then register it to the NetConnection
+					if (this.subnodes[i] instanceof lz.netRemoteCallHib){
+						clientObj[this.subnodes[i].funcname] = function( args ){
+							return canvas.thishib.remoteCallMethod(arguments.callee,arguments);
+							//return hib.remoteCallMethod(arguments.callee,args);
+						}
+					}
+				}
+				this._nc.client = clientObj;
+			}
+		]]>
+	</method>
+
+	<!--
+		Process the RemoteCall to the Right Funtion
+		-swagner
+	 -->
+	<method name="remoteCallMethod" args="callee,args">
+		<![CDATA[
+			for (var eg in this._nc){
+				if (this._nc[eg]==callee){
+					if (this.debug) {
+						//_root.Debug.write.write("DEBUG invoked a function remotely: ",eg,args);
+					}
+					if (args.length == 1) {
+						return this.callFuntion(eg,args[0]);
+					} else {
+						return this.callFuntion(eg,args);
+					}
+					//return this.callFuntion(eg,args);
+				}
+			}
+		]]>
+	</method>
+
+	<!--
+		Map the Function to a netRemoteCallHib
+		-swagner
+	 -->
+	<method name="callFuntion" args="funcname,args">
+		<![CDATA[
+			for (var i=0;i<this.subnodes.length;i++){
+				if (this.subnodes[i].funcname==funcname){
+					return this.subnodes[i].onResult(args);
+				}
+			}
+		]]>
+	</method>
+
+	<method name="callRPC" args="func, obj, params">
+		//if ($debug) Debug.write("*** call: func, obj, params",func,obj, typeof (params) ,params.length);
+		if (params.length != 0){
+			//does this really work?
+			//ASSetPropFlags(_global, null, 8, 1);
+			//setPropertyIsEnumerable(8, 1);
+			//Debug.write("does it work?",arguments);
+			<!--
+			this._nc.call.apply(this._nc,arguments);
+			 -->
+			if (params.length==1){
+				this._nc.call(func, obj,params[0]);
+			} else if (params.length==2){
+				this._nc.call(func, obj,params[0],params[1]);
+			} else if (params.length==3){
+				this._nc.call(func, obj,params[0],params[1],params[2]);
+			} else if (params.length==4){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3]);
+			} else if (params.length==5){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4]);
+			} else if (params.length==6){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5]);
+			} else if (params.length==7){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6]);
+			} else if (params.length==8){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7]);
+			} else if (params.length==9){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]);
+			} else if (params.length==10){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]);
+			} else if (params.length==11){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10]);
+			} else if (params.length==12){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11]);
+			} else if (params.length==13){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12]);
+			} else if (params.length==14){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13]);
+			} else if (params.length==15){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14]);
+			} else if (params.length==16){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15]);
+			} else if (params.length==17){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16]);
+			} else if (params.length==18){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17]);
+			} else if (params.length==19){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18]);
+			} else if (params.length==20){
+				this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18],params[19]);
+			}
+		} else {
+			this._nc.call(func, obj);
+		}
+	</method>
+</class>
+
+
+	<!---
+		Net remote call.
+		@todo Document netremotecall class.
+	-->
+	<class name="netremotecall" extends="node">
+		<switch>
+			<when property="$as3">
+				<passthrough>
+					import flash.net.Responder;
+				</passthrough>
+			</when>
+		</switch>
+
+		<!--- Name of the remote function. -->
+		<attribute name="funcname" value="$once{null}" type="string" />
+
+		<attribute name="remotecontext" value="null" />
+
+		<attribute name="dataobject" value="null" />
+
+		<attribute name="responder" value="null" />
+
+		<!--- Data handling event. args="value"  -->
+		<event name="ondata" />
+
+		<!--- Error handling event. -->
+		<event name="onerror"/>
+
+		<!--- Call the remote method, passing the array of params. -->
+		<method name="callRPC" args="params"><![CDATA[
+			if (this.funcname == null) {
+				//Debug.write("No funcname given");
+				if (this.onerror) this.onerror.sendEvent("No funcname given");
+				return;
+			}
+
+			if (params == null) {
+				params = new Array();
+
+				var subnodes = this.subnodes;
+				if (subnodes != null) {
+					var i;
+					var n = subnodes.length;
+					for (i = 0; i < n; i++) {
+						// If getValue method is declared in param, call that
+						// instead to get value.
+						var tsi = subnodes[i];
+						//TODO: fixme
+						//if ((tsi["getValue"] != null) && (tsi.getValue["prototype"] != null)) {
+						//	params[i] = tsi.getValue();
+						//	Debug.write("tsi.getValue():", tsi.getValue());
+						//} else {
+						//	params[i] = tsi.value;
+						//}
+						params[i] = tsi.getValue();
+					}
+				}
+
+			} else if (params.__proto__ != Array.prototype) {
+				//Debug.write(this.name, "error: first argument (params) is not an array");
+				return -1;
+			}
+
+			//if ($debug) Debug.write("call", this, this.parent, this.parent.status);
+			var rtmpObject = null;
+			if (this.parent instanceof lz.rtmpConnection){
+				rtmpObject = this.parent;
+			} else if(this.remotecontext  instanceof lz.rtmpConnection){
+				rtmpObject = this.remotecontext;
+			} else {
+				if ($debug) Debug.warn("ERROR: no remotecontext availible abort call", this.funcname, this);
+				return;
+			}
+			//Debug.write('call', this, rtmpObject, rtmpObject.status);
+			//Debug.write('call', this.remotecontext);
+			if (rtmpObject.debug) Debug.write('call', this, rtmpObject, rtmpObject.status);
+			rtmpObject.lastCalled = this;
+
+			this.responder = new Responder(onResult);
+
+			rtmpObject.callRPC(this.funcname, this.responder, params);
+
+		]]>
+		</method>
+
+		<!--- Handle the result returned from the remote method. -->
+		<method name="onResult" args="value"><![CDATA[
+			// Can be overriden.
+			// Would be great if it can be used with dataobject,
+			// but I don't know how to convert Array/primitive to LzDataset/LzDataPointer.
+			////Debug.write("netremotecall", this, "onResult", value);
+
+			if (this.dataobject!=null) {
+				if ( this.dataobject instanceof LzDataset ) {
+					//Debug.write("onResult: ",this,value,dataobject);
+					var element = LzDataElement.valueToElement(value);
+					this.dataobject.setData(element.childNodes);
+				} else if ( this.dataobject instanceof LzDataElement ) {
+					var element = LzDataElement.valueToElement(value);
+					this.dataobject.appendChild( element );
+				} else {
+					//TODO:fixme
+					//Debug.warn("dataobject is not LzDataset or LzDataElement: ",this,this.dataobject,delegate);
+				}
+			}
+			this.ondata.sendEvent(value);
+		]]>
+		</method>
+	</class>
+
+	<!---
+		Net parameter.
+		Element to use inside netremotecall.
+		@todo Document netparam class.
+	-->
+	<class name="netparam" extends="node">
+		<!--- The value of the netparam. -->
+		<attribute name="value" value="null"/>
+	</class>
+
+</library>


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.js
index fc60d0a..8e353d8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.js
@@ -1,329 +1,329 @@
-/*
- * Licensed MIT https://github.com/ROMB/jquery-dialogextend/blob/master/LICENSE.md
- */
-(function() {
-  var $;
-
-  $ = jQuery;
-
-  $.widget("ui.dialogExtend", {
-    version: "2.0.4",
-    modes: {},
-    options: {
-      "closable": true,
-      "dblclick": false,
-      "titlebar": false,
-      "icons": {
-        "close": "ui-icon-closethick",
-        "restore": "ui-icon-newwin"
-      },
-      "load": null,
-      "beforeRestore": null,
-      "restore": null
-    },
-    _create: function() {
-      this._state = "normal";
-      if (!$(this.element[0]).data("ui-dialog")) {
-        $.error("jQuery.dialogExtend Error : Only jQuery UI Dialog element is accepted");
-      }
-      this._verifyOptions();
-      this._initStyles();
-      this._initButtons();
-      this._initTitleBar();
-      this._setState("normal");
-      this._on("load", function(e) {
-        return console.log("test", e);
-      });
-      return this._trigger("load");
-    },
-    _setState: function(state) {
-      $(this.element[0]).removeClass("ui-dialog-" + this._state).addClass("ui-dialog-" + state);
-      return this._state = state;
-    },
-    _verifyOptions: function() {
-      var name, _ref, _results;
-
-      if (this.options.dblclick && !(this.options.dblclick in this.modes)) {
-        $.error("jQuery.dialogExtend Error : Invalid <dblclick> value '" + this.options.dblclick + "'");
-        this.options.dblclick = false;
-      }
-      if (this.options.titlebar && ((_ref = this.options.titlebar) !== "none" && _ref !== "transparent")) {
-        $.error("jQuery.dialogExtend Error : Invalid <titlebar> value '" + this.options.titlebar + "'");
-        this.options.titlebar = false;
-      }
-      _results = [];
-      for (name in this.modes) {
-        if (this["_verifyOptions_" + name]) {
-          _results.push(this["_verifyOptions_" + name]());
-        } else {
-          _results.push(void 0);
-        }
-      }
-      return _results;
-    },
-    _initStyles: function() {
-      var name, style, _results;
-
-      if (!$(".dialog-extend-css").length) {
-        style = '';
-        style += '<style class="dialog-extend-css" type="text/css">';
-        style += '.ui-dialog .ui-dialog-titlebar-buttonpane>a { float: right; }';
-        style += '.ui-dialog .ui-dialog-titlebar-restore { width: 19px; height: 18px; }';
-        style += '.ui-dialog .ui-dialog-titlebar-restore span { display: block; margin: 1px; }';
-        style += '.ui-dialog .ui-dialog-titlebar-restore:hover,';
-        style += '.ui-dialog .ui-dialog-titlebar-restore:focus { padding: 0; }';
-        style += '.ui-dialog .ui-dialog-titlebar ::selection { background-color: transparent; }';
-        style += '</style>';
-        $(style).appendTo("body");
-      }
-      _results = [];
-      for (name in this.modes) {
-        _results.push(this["_initStyles_" + name]());
-      }
-      return _results;
-    },
-    _initButtons: function() {
-      var buttonPane, mode, name, titlebar, _ref,
-        _this = this;
-
-      titlebar = $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar");
-      buttonPane = $('<div class="ui-dialog-titlebar-buttonpane"></div>').appendTo(titlebar);
-      buttonPane.css({
-        "position": "absolute",
-        "top": "50%",
-        "right": "0.3em",
-        "margin-top": "-10px",
-        "height": "18px"
-      });
-      titlebar.find(".ui-dialog-titlebar-close").css({
-        "position": "relative",
-        "float": "right",
-        "top": "auto",
-        "right": "auto",
-        "margin": 0
-      }).find(".ui-icon").removeClass("ui-icon-closethick").addClass(this.options.icons.close).end().appendTo(buttonPane).end();
-      buttonPane.append('<a class="ui-dialog-titlebar-restore ui-corner-all ui-state-default" href="#"><span class="ui-icon ' + this.options.icons.restore + '" title="restore">restore</span></a>').find('.ui-dialog-titlebar-restore').attr("role", "button").mouseover(function() {
-        return $(this).addClass("ui-state-hover");
-      }).mouseout(function() {
-        return $(this).removeClass("ui-state-hover");
-      }).focus(function() {
-        return $(this).addClass("ui-state-focus");
-      }).blur(function() {
-        return $(this).removeClass("ui-state-focus");
-      }).end().find(".ui-dialog-titlebar-close").toggle(this.options.closable).end().find(".ui-dialog-titlebar-restore").hide().click(function(e) {
-        e.preventDefault();
-        return _this.restore();
-      }).end();
-      _ref = this.modes;
-      for (name in _ref) {
-        mode = _ref[name];
-        this._initModuleButton(name, mode);
-      }
-      return titlebar.dblclick(function(evt) {
-        if (_this.options.dblclick) {
-          if (_this._state !== "normal") {
-            return _this.restore();
-          } else {
-            return _this[_this.options.dblclick]();
-          }
-        }
-      }).select(function() {
-        return false;
-      });
-    },
-    _initModuleButton: function(name, mode) {
-      var buttonPane,
-        _this = this;
-
-      buttonPane = $(this.element[0]).dialog("widget").find('.ui-dialog-titlebar-buttonpane');
-      return buttonPane.append('<a class="ui-dialog-titlebar-' + name + ' ui-corner-all ui-state-default" href="#" title="' + name + '"><span class="ui-icon ' + this.options.icons[name] + '">' + name + '</span></a>').find(".ui-dialog-titlebar-" + name).attr("role", "button").mouseover(function() {
-        return $(this).addClass("ui-state-hover");
-      }).mouseout(function() {
-        return $(this).removeClass("ui-state-hover");
-      }).focus(function() {
-        return $(this).addClass("ui-state-focus");
-      }).blur(function() {
-        return $(this).removeClass("ui-state-focus");
-      }).end().find(".ui-dialog-titlebar-" + name).toggle(this.options[mode.option]).click(function(e) {
-        e.preventDefault();
-        return _this[name]();
-      }).end();
-    },
-    _initTitleBar: function() {
-      var handle;
-
-      switch (this.options.titlebar) {
-        case false:
-          return 0;
-        case "none":
-          if ($(this.element[0]).dialog("option", "draggable")) {
-            handle = $("<div />").addClass("ui-dialog-draggable-handle").css("cursor", "move").height(5);
-            $(this.element[0]).dialog("widget").prepend(handle).draggable("option", "handle", handle);
-          }
-          return $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").find(".ui-dialog-title").html("&nbsp;").end().css({
-            "background-color": "transparent",
-            "background-image": "none",
-            "border": 0,
-            "position": "absolute",
-            "right": 0,
-            "top": 0,
-            "z-index": 9999
-          }).end();
-        case "transparent":
-          return $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").css({
-            "background-color": "transparent",
-            "background-image": "none",
-            "border": 0
-          });
-        default:
-          return $.error("jQuery.dialogExtend Error : Invalid <titlebar> value '" + this.options.titlebar + "'");
-      }
-    },
-    state: function() {
-      return this._state;
-    },
-    restore: function() {
-      this._trigger("beforeRestore");
-      this._restore();
-      this._toggleButtons();
-      return this._trigger("restore");
-    },
-    _restore: function() {
-      if (this._state !== "normal") {
-        this["_restore_" + this._state]();
-        this._setState("normal");
-        return $(this.element[0]).dialog("widget").focus();
-      }
-    },
-    _saveSnapshot: function() {
-      if (this._state === "normal") {
-        this.original_config_resizable = $(this.element[0]).dialog("option", "resizable");
-        this.original_config_draggable = $(this.element[0]).dialog("option", "draggable");
-        this.original_size_height = $(this.element[0]).dialog("widget").outerHeight();
-        this.original_size_width = $(this.element[0]).dialog("option", "width");
-        this.original_size_maxHeight = $(this.element[0]).dialog("option", "maxHeight");
-        this.original_position_mode = $(this.element[0]).dialog("widget").css("position");
-        this.original_position_left = $(this.element[0]).dialog("widget").offset().left - $('body').scrollLeft();
-        this.original_position_top = $(this.element[0]).dialog("widget").offset().top - $('body').scrollTop();
-        return this.original_titlebar_wrap = $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").css("white-space");
-      }
-    },
-    _loadSnapshot: function() {
-      return {
-        "config": {
-          "resizable": this.original_config_resizable,
-          "draggable": this.original_config_draggable
-        },
-        "size": {
-          "height": this.original_size_height,
-          "width": this.original_size_width,
-          "maxHeight": this.original_size_maxHeight
-        },
-        "position": {
-          "mode": this.original_position_mode,
-          "left": this.original_position_left,
-          "top": this.original_position_top
-        },
-        "titlebar": {
-          "wrap": this.original_titlebar_wrap
-        }
-      };
-    },
-    _toggleButtons: function(newstate) {
-      var mode, name, state, _ref, _ref1, _results;
-
-      state = newstate || this._state;
-      $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-restore").toggle(state !== "normal").css({
-        "right": "1.4em"
-      }).end();
-      _ref = this.modes;
-      for (name in _ref) {
-        mode = _ref[name];
-        $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-" + name).toggle(state !== mode.state && this.options[mode.option]);
-      }
-      _ref1 = this.modes;
-      _results = [];
-      for (name in _ref1) {
-        mode = _ref1[name];
-        if (mode.state === state) {
-          _results.push($(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-restore").insertAfter($(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-" + name)).end());
-        } else {
-          _results.push(void 0);
-        }
-      }
-      return _results;
-    }
-  });
-
-}).call(this);
-
-(function() {
-  var $;
-
-  $ = jQuery;
-
-  $.extend(true, $.ui.dialogExtend.prototype, {
-    modes: {
-      "collapse": {
-        option: "collapsable",
-        state: "collapsed"
-      }
-    },
-    options: {
-      "collapsable": false,
-      "icons": {
-        "collapse": "ui-icon-triangle-1-s"
-      },
-      "beforeCollapse": null,
-      "collapse": null
-    },
-    collapse: function() {
-      var newHeight, pos;
-
-      newHeight = $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").height() + 2;
-      this._trigger("beforeCollapse");
-      if (this._state !== "normal") {
-        this._restore();
-      }
-      this._saveSnapshot();
-      pos = $(this.element[0]).dialog("widget").position();
-      $(this.element[0]).dialog("option", {
-        "resizable": false,
-        "height": newHeight,
-        "maxHeight": newHeight,
-        "position": [pos.left - $(document).scrollLeft(), pos.top - $(document).scrollTop()]
-      }).on('dialogclose', this._collapse_restore).dialog("widget").find(".ui-dialog-buttonpane:visible").hide().end().find(".ui-dialog-titlebar").css("white-space", "nowrap").end().find(".ui-dialog-content");
-      this._setState("collapsed");
-      this._toggleButtons();
-      return this._trigger("collapse");
-    },
-    _restore_collapsed: function() {
-      var original;
-
-      original = this._loadSnapshot();
-      return $(this.element[0]).show().dialog("widget").find(".ui-dialog-buttonpane:hidden").show().end().find(".ui-dialog-titlebar").css("white-space", original.titlebar.wrap).end().find(".ui-dialog-content").dialog("option", {
-        "resizable": original.config.resizable,
-        "height": original.size.height,
-        "maxHeight": original.size.maxHeight
-      }).off('dialogclose', this._collapse_restore);
-    },
-    _initStyles_collapse: function() {
-      var style;
-
-      if (!$(".dialog-extend-collapse-css").length) {
-        style = '';
-        style += '<style class="dialog-extend-collapse-css" type="text/css">';
-        style += '.ui-dialog .ui-dialog-titlebar-collapse { width: 19px; height: 18px; }';
-        style += '.ui-dialog .ui-dialog-titlebar-collapse span { display: block; margin: 1px; }';
-        style += '.ui-dialog .ui-dialog-titlebar-collapse:hover,';
-        style += '.ui-dialog .ui-dialog-titlebar-collapse:focus { padding: 0; }';
-        style += '</style>';
-        return $(style).appendTo("body");
-      }
-    },
-    _collapse_restore: function() {
-      return $(this).dialogExtend("restore");
-    }
-  });
-
-}).call(this);
+/*
+ * Licensed MIT https://github.com/ROMB/jquery-dialogextend/blob/master/LICENSE.md
+ */
+(function() {
+  var $;
+
+  $ = jQuery;
+
+  $.widget("ui.dialogExtend", {
+    version: "2.0.4",
+    modes: {},
+    options: {
+      "closable": true,
+      "dblclick": false,
+      "titlebar": false,
+      "icons": {
+        "close": "ui-icon-closethick",
+        "restore": "ui-icon-newwin"
+      },
+      "load": null,
+      "beforeRestore": null,
+      "restore": null
+    },
+    _create: function() {
+      this._state = "normal";
+      if (!$(this.element[0]).data("ui-dialog")) {
+        $.error("jQuery.dialogExtend Error : Only jQuery UI Dialog element is accepted");
+      }
+      this._verifyOptions();
+      this._initStyles();
+      this._initButtons();
+      this._initTitleBar();
+      this._setState("normal");
+      this._on("load", function(e) {
+        return console.log("test", e);
+      });
+      return this._trigger("load");
+    },
+    _setState: function(state) {
+      $(this.element[0]).removeClass("ui-dialog-" + this._state).addClass("ui-dialog-" + state);
+      return this._state = state;
+    },
+    _verifyOptions: function() {
+      var name, _ref, _results;
+
+      if (this.options.dblclick && !(this.options.dblclick in this.modes)) {
+        $.error("jQuery.dialogExtend Error : Invalid <dblclick> value '" + this.options.dblclick + "'");
+        this.options.dblclick = false;
+      }
+      if (this.options.titlebar && ((_ref = this.options.titlebar) !== "none" && _ref !== "transparent")) {
+        $.error("jQuery.dialogExtend Error : Invalid <titlebar> value '" + this.options.titlebar + "'");
+        this.options.titlebar = false;
+      }
+      _results = [];
+      for (name in this.modes) {
+        if (this["_verifyOptions_" + name]) {
+          _results.push(this["_verifyOptions_" + name]());
+        } else {
+          _results.push(void 0);
+        }
+      }
+      return _results;
+    },
+    _initStyles: function() {
+      var name, style, _results;
+
+      if (!$(".dialog-extend-css").length) {
+        style = '';
+        style += '<style class="dialog-extend-css" type="text/css">';
+        style += '.ui-dialog .ui-dialog-titlebar-buttonpane>a { float: right; }';
+        style += '.ui-dialog .ui-dialog-titlebar-restore { width: 19px; height: 18px; }';
+        style += '.ui-dialog .ui-dialog-titlebar-restore span { display: block; margin: 1px; }';
+        style += '.ui-dialog .ui-dialog-titlebar-restore:hover,';
+        style += '.ui-dialog .ui-dialog-titlebar-restore:focus { padding: 0; }';
+        style += '.ui-dialog .ui-dialog-titlebar ::selection { background-color: transparent; }';
+        style += '</style>';
+        $(style).appendTo("body");
+      }
+      _results = [];
+      for (name in this.modes) {
+        _results.push(this["_initStyles_" + name]());
+      }
+      return _results;
+    },
+    _initButtons: function() {
+      var buttonPane, mode, name, titlebar, _ref,
+        _this = this;
+
+      titlebar = $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar");
+      buttonPane = $('<div class="ui-dialog-titlebar-buttonpane"></div>').appendTo(titlebar);
+      buttonPane.css({
+        "position": "absolute",
+        "top": "50%",
+        "right": "0.3em",
+        "margin-top": "-10px",
+        "height": "18px"
+      });
+      titlebar.find(".ui-dialog-titlebar-close").css({
+        "position": "relative",
+        "float": "right",
+        "top": "auto",
+        "right": "auto",
+        "margin": 0
+      }).find(".ui-icon").removeClass("ui-icon-closethick").addClass(this.options.icons.close).end().appendTo(buttonPane).end();
+      buttonPane.append('<a class="ui-dialog-titlebar-restore ui-corner-all ui-state-default" href="#"><span class="ui-icon ' + this.options.icons.restore + '" title="restore">restore</span></a>').find('.ui-dialog-titlebar-restore').attr("role", "button").mouseover(function() {
+        return $(this).addClass("ui-state-hover");
+      }).mouseout(function() {
+        return $(this).removeClass("ui-state-hover");
+      }).focus(function() {
+        return $(this).addClass("ui-state-focus");
+      }).blur(function() {
+        return $(this).removeClass("ui-state-focus");
+      }).end().find(".ui-dialog-titlebar-close").toggle(this.options.closable).end().find(".ui-dialog-titlebar-restore").hide().click(function(e) {
+        e.preventDefault();
+        return _this.restore();
+      }).end();
+      _ref = this.modes;
+      for (name in _ref) {
+        mode = _ref[name];
+        this._initModuleButton(name, mode);
+      }
+      return titlebar.dblclick(function(evt) {
+        if (_this.options.dblclick) {
+          if (_this._state !== "normal") {
+            return _this.restore();
+          } else {
+            return _this[_this.options.dblclick]();
+          }
+        }
+      }).select(function() {
+        return false;
+      });
+    },
+    _initModuleButton: function(name, mode) {
+      var buttonPane,
+        _this = this;
+
+      buttonPane = $(this.element[0]).dialog("widget").find('.ui-dialog-titlebar-buttonpane');
+      return buttonPane.append('<a class="ui-dialog-titlebar-' + name + ' ui-corner-all ui-state-default" href="#" title="' + name + '"><span class="ui-icon ' + this.options.icons[name] + '">' + name + '</span></a>').find(".ui-dialog-titlebar-" + name).attr("role", "button").mouseover(function() {
+        return $(this).addClass("ui-state-hover");
+      }).mouseout(function() {
+        return $(this).removeClass("ui-state-hover");
+      }).focus(function() {
+        return $(this).addClass("ui-state-focus");
+      }).blur(function() {
+        return $(this).removeClass("ui-state-focus");
+      }).end().find(".ui-dialog-titlebar-" + name).toggle(this.options[mode.option]).click(function(e) {
+        e.preventDefault();
+        return _this[name]();
+      }).end();
+    },
+    _initTitleBar: function() {
+      var handle;
+
+      switch (this.options.titlebar) {
+        case false:
+          return 0;
+        case "none":
+          if ($(this.element[0]).dialog("option", "draggable")) {
+            handle = $("<div />").addClass("ui-dialog-draggable-handle").css("cursor", "move").height(5);
+            $(this.element[0]).dialog("widget").prepend(handle).draggable("option", "handle", handle);
+          }
+          return $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").find(".ui-dialog-title").html("&nbsp;").end().css({
+            "background-color": "transparent",
+            "background-image": "none",
+            "border": 0,
+            "position": "absolute",
+            "right": 0,
+            "top": 0,
+            "z-index": 9999
+          }).end();
+        case "transparent":
+          return $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").css({
+            "background-color": "transparent",
+            "background-image": "none",
+            "border": 0
+          });
+        default:
+          return $.error("jQuery.dialogExtend Error : Invalid <titlebar> value '" + this.options.titlebar + "'");
+      }
+    },
+    state: function() {
+      return this._state;
+    },
+    restore: function() {
+      this._trigger("beforeRestore");
+      this._restore();
+      this._toggleButtons();
+      return this._trigger("restore");
+    },
+    _restore: function() {
+      if (this._state !== "normal") {
+        this["_restore_" + this._state]();
+        this._setState("normal");
+        return $(this.element[0]).dialog("widget").focus();
+      }
+    },
+    _saveSnapshot: function() {
+      if (this._state === "normal") {
+        this.original_config_resizable = $(this.element[0]).dialog("option", "resizable");
+        this.original_config_draggable = $(this.element[0]).dialog("option", "draggable");
+        this.original_size_height = $(this.element[0]).dialog("widget").outerHeight();
+        this.original_size_width = $(this.element[0]).dialog("option", "width");
+        this.original_size_maxHeight = $(this.element[0]).dialog("option", "maxHeight");
+        this.original_position_mode = $(this.element[0]).dialog("widget").css("position");
+        this.original_position_left = $(this.element[0]).dialog("widget").offset().left - $('body').scrollLeft();
+        this.original_position_top = $(this.element[0]).dialog("widget").offset().top - $('body').scrollTop();
+        return this.original_titlebar_wrap = $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").css("white-space");
+      }
+    },
+    _loadSnapshot: function() {
+      return {
+        "config": {
+          "resizable": this.original_config_resizable,
+          "draggable": this.original_config_draggable
+        },
+        "size": {
+          "height": this.original_size_height,
+          "width": this.original_size_width,
+          "maxHeight": this.original_size_maxHeight
+        },
+        "position": {
+          "mode": this.original_position_mode,
+          "left": this.original_position_left,
+          "top": this.original_position_top
+        },
+        "titlebar": {
+          "wrap": this.original_titlebar_wrap
+        }
+      };
+    },
+    _toggleButtons: function(newstate) {
+      var mode, name, state, _ref, _ref1, _results;
+
+      state = newstate || this._state;
+      $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-restore").toggle(state !== "normal").css({
+        "right": "1.4em"
+      }).end();
+      _ref = this.modes;
+      for (name in _ref) {
+        mode = _ref[name];
+        $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-" + name).toggle(state !== mode.state && this.options[mode.option]);
+      }
+      _ref1 = this.modes;
+      _results = [];
+      for (name in _ref1) {
+        mode = _ref1[name];
+        if (mode.state === state) {
+          _results.push($(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-restore").insertAfter($(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-" + name)).end());
+        } else {
+          _results.push(void 0);
+        }
+      }
+      return _results;
+    }
+  });
+
+}).call(this);
+
+(function() {
+  var $;
+
+  $ = jQuery;
+
+  $.extend(true, $.ui.dialogExtend.prototype, {
+    modes: {
+      "collapse": {
+        option: "collapsable",
+        state: "collapsed"
+      }
+    },
+    options: {
+      "collapsable": false,
+      "icons": {
+        "collapse": "ui-icon-triangle-1-s"
+      },
+      "beforeCollapse": null,
+      "collapse": null
+    },
+    collapse: function() {
+      var newHeight, pos;
+
+      newHeight = $(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").height() + 2;
+      this._trigger("beforeCollapse");
+      if (this._state !== "normal") {
+        this._restore();
+      }
+      this._saveSnapshot();
+      pos = $(this.element[0]).dialog("widget").position();
+      $(this.element[0]).dialog("option", {
+        "resizable": false,
+        "height": newHeight,
+        "maxHeight": newHeight,
+        "position": [pos.left - $(document).scrollLeft(), pos.top - $(document).scrollTop()]
+      }).on('dialogclose', this._collapse_restore).dialog("widget").find(".ui-dialog-buttonpane:visible").hide().end().find(".ui-dialog-titlebar").css("white-space", "nowrap").end().find(".ui-dialog-content");
+      this._setState("collapsed");
+      this._toggleButtons();
+      return this._trigger("collapse");
+    },
+    _restore_collapsed: function() {
+      var original;
+
+      original = this._loadSnapshot();
+      return $(this.element[0]).show().dialog("widget").find(".ui-dialog-buttonpane:hidden").show().end().find(".ui-dialog-titlebar").css("white-space", original.titlebar.wrap).end().find(".ui-dialog-content").dialog("option", {
+        "resizable": original.config.resizable,
+        "height": original.size.height,
+        "maxHeight": original.size.maxHeight
+      }).off('dialogclose', this._collapse_restore);
+    },
+    _initStyles_collapse: function() {
+      var style;
+
+      if (!$(".dialog-extend-collapse-css").length) {
+        style = '';
+        style += '<style class="dialog-extend-collapse-css" type="text/css">';
+        style += '.ui-dialog .ui-dialog-titlebar-collapse { width: 19px; height: 18px; }';
+        style += '.ui-dialog .ui-dialog-titlebar-collapse span { display: block; margin: 1px; }';
+        style += '.ui-dialog .ui-dialog-titlebar-collapse:hover,';
+        style += '.ui-dialog .ui-dialog-titlebar-collapse:focus { padding: 0; }';
+        style += '</style>';
+        return $(style).appendTo("body");
+      }
+    },
+    _collapse_restore: function() {
+      return $(this).dialogExtend("restore");
+    }
+  });
+
+}).call(this);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.min.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.min.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.min.js
index 4eb412e..293458c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.min.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/jquery.dialogextend.min.js
@@ -1,3 +1,3 @@
-/* Licensed MIT */
-/*! jquery-dialogextend 2.0.4 2014-07-08 */
+/* Licensed MIT */
+/*! jquery-dialogextend 2.0.4 2014-07-08 */
 (function(){var i;i=jQuery,i.widget("ui.dialogExtend",{version:"2.0.4",modes:{},options:{closable:!0,dblclick:!1,titlebar:!1,icons:{close:"ui-icon-closethick",restore:"ui-icon-newwin"},load:null,beforeRestore:null,restore:null},_create:function(){return this._state="normal",i(this.element[0]).data("ui-dialog")||i.error("jQuery.dialogExtend Error : Only jQuery UI Dialog element is accepted"),this._verifyOptions(),this._initStyles(),this._initButtons(),this._initTitleBar(),this._setState("normal"),this._on("load",function(i){return console.log("test",i)}),this._trigger("load")},_setState:function(t){return i(this.element[0]).removeClass("ui-dialog-"+this._state).addClass("ui-dialog-"+t),this._state=t},_verifyOptions:function(){var t,e,o;!this.options.dblclick||this.options.dblclick in this.modes||(i.error("jQuery.dialogExtend Error : Invalid <dblclick> value '"+this.options.dblclick+"'"),this.options.dblclick=!1),this.options.titlebar&&"none"!==(e=this.options.titlebar)&&"transparent"
 !==e&&(i.error("jQuery.dialogExtend Error : Invalid <titlebar> value '"+this.options.titlebar+"'"),this.options.titlebar=!1),o=[];for(t in this.modes)this["_verifyOptions_"+t]?o.push(this["_verifyOptions_"+t]()):o.push(void 0);return o},_initStyles:function(){var t,e,o;i(".dialog-extend-css").length||(e="",e+='<style class="dialog-extend-css" type="text/css">',e+=".ui-dialog .ui-dialog-titlebar-buttonpane>a { float: right; }",e+=".ui-dialog .ui-dialog-titlebar-restore { width: 19px; height: 18px; }",e+=".ui-dialog .ui-dialog-titlebar-restore span { display: block; margin: 1px; }",e+=".ui-dialog .ui-dialog-titlebar-restore:hover,",e+=".ui-dialog .ui-dialog-titlebar-restore:focus { padding: 0; }",e+=".ui-dialog .ui-dialog-titlebar ::selection { background-color: transparent; }",e+="</style>",i(e).appendTo("body")),o=[];for(t in this.modes)o.push(this["_initStyles_"+t]());return o},_initButtons:function(){var t,e,o,n,a,l=this;n=i(this.element[0]).dialog("widget").find(".ui-dialog-title
 bar"),t=i('<div class="ui-dialog-titlebar-buttonpane"></div>').appendTo(n),t.css({position:"absolute",top:"50%",right:"0.3em","margin-top":"-10px",height:"18px"}),n.find(".ui-dialog-titlebar-close").css({position:"relative","float":"right",top:"auto",right:"auto",margin:0}).find(".ui-icon").removeClass("ui-icon-closethick").addClass(this.options.icons.close).end().appendTo(t).end(),t.append('<a class="ui-dialog-titlebar-restore ui-corner-all ui-state-default" href="#"><span class="ui-icon '+this.options.icons.restore+'" title="restore">restore</span></a>').find(".ui-dialog-titlebar-restore").attr("role","button").mouseover(function(){return i(this).addClass("ui-state-hover")}).mouseout(function(){return i(this).removeClass("ui-state-hover")}).focus(function(){return i(this).addClass("ui-state-focus")}).blur(function(){return i(this).removeClass("ui-state-focus")}).end().find(".ui-dialog-titlebar-close").toggle(this.options.closable).end().find(".ui-dialog-titlebar-restore").hide().c
 lick(function(i){return i.preventDefault(),l.restore()}).end(),a=this.modes;for(o in a)e=a[o],this._initModuleButton(o,e);return n.dblclick(function(){return l.options.dblclick?"normal"!==l._state?l.restore():l[l.options.dblclick]():void 0}).select(function(){return!1})},_initModuleButton:function(t,e){var o,n=this;return o=i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-buttonpane"),o.append('<a class="ui-dialog-titlebar-'+t+' ui-corner-all ui-state-default" href="#" title="'+t+'"><span class="ui-icon '+this.options.icons[t]+'">'+t+"</span></a>").find(".ui-dialog-titlebar-"+t).attr("role","button").mouseover(function(){return i(this).addClass("ui-state-hover")}).mouseout(function(){return i(this).removeClass("ui-state-hover")}).focus(function(){return i(this).addClass("ui-state-focus")}).blur(function(){return i(this).removeClass("ui-state-focus")}).end().find(".ui-dialog-titlebar-"+t).toggle(this.options[e.option]).click(function(i){return i.preventDefault(),n[t]()})
 .end()},_initTitleBar:function(){var t;switch(this.options.titlebar){case!1:return 0;case"none":return i(this.element[0]).dialog("option","draggable")&&(t=i("<div />").addClass("ui-dialog-draggable-handle").css("cursor","move").height(5),i(this.element[0]).dialog("widget").prepend(t).draggable("option","handle",t)),i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").find(".ui-dialog-title").html("&nbsp;").end().css({"background-color":"transparent","background-image":"none",border:0,position:"absolute",right:0,top:0,"z-index":9999}).end();case"transparent":return i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").css({"background-color":"transparent","background-image":"none",border:0});default:return i.error("jQuery.dialogExtend Error : Invalid <titlebar> value '"+this.options.titlebar+"'")}},state:function(){return this._state},restore:function(){return this._trigger("beforeRestore"),this._restore(),this._toggleButtons(),this._trigger("restore")},_restore:
 function(){return"normal"!==this._state?(this["_restore_"+this._state](),this._setState("normal"),i(this.element[0]).dialog("widget").focus()):void 0},_saveSnapshot:function(){return"normal"===this._state?(this.original_config_resizable=i(this.element[0]).dialog("option","resizable"),this.original_config_draggable=i(this.element[0]).dialog("option","draggable"),this.original_size_height=i(this.element[0]).dialog("widget").outerHeight(),this.original_size_width=i(this.element[0]).dialog("option","width"),this.original_size_maxHeight=i(this.element[0]).dialog("option","maxHeight"),this.original_position_mode=i(this.element[0]).dialog("widget").css("position"),this.original_position_left=i(this.element[0]).dialog("widget").offset().left-i("body").scrollLeft(),this.original_position_top=i(this.element[0]).dialog("widget").offset().top-i("body").scrollTop(),this.original_titlebar_wrap=i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").css("white-space")):void 0},_loadSnapsho
 t:function(){return{config:{resizable:this.original_config_resizable,draggable:this.original_config_draggable},size:{height:this.original_size_height,width:this.original_size_width,maxHeight:this.original_size_maxHeight},position:{mode:this.original_position_mode,left:this.original_position_left,top:this.original_position_top},titlebar:{wrap:this.original_titlebar_wrap}}},_toggleButtons:function(t){var e,o,n,a,l,s;n=t||this._state,i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-restore").toggle("normal"!==n).css({right:"1.4em"}).end(),a=this.modes;for(o in a)e=a[o],i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-"+o).toggle(n!==e.state&&this.options[e.option]);l=this.modes,s=[];for(o in l)e=l[o],e.state===n?s.push(i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-restore").insertAfter(i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar-"+o)).end()):s.push(void 0);return s}})}).call(this),function(){var i;i=jQuery,i.extend(!0,i.ui.dia
 logExtend.prototype,{modes:{collapse:{option:"collapsable",state:"collapsed"}},options:{collapsable:!1,icons:{collapse:"ui-icon-triangle-1-s"},beforeCollapse:null,collapse:null},collapse:function(){var t,e;return t=i(this.element[0]).dialog("widget").find(".ui-dialog-titlebar").height()+2,this._trigger("beforeCollapse"),"normal"!==this._state&&this._restore(),this._saveSnapshot(),e=i(this.element[0]).dialog("widget").position(),i(this.element[0]).dialog("option",{resizable:!1,height:t,maxHeight:t,position:[e.left-i(document).scrollLeft(),e.top-i(document).scrollTop()]}).on("dialogclose",this._collapse_restore).dialog("widget").find(".ui-dialog-buttonpane:visible").hide().end().find(".ui-dialog-titlebar").css("white-space","nowrap").end().find(".ui-dialog-content"),this._setState("collapsed"),this._toggleButtons(),this._trigger("collapse")},_restore_collapsed:function(){var t;return t=this._loadSnapshot(),i(this.element[0]).show().dialog("widget").find(".ui-dialog-buttonpane:hidden")
 .show().end().find(".ui-dialog-titlebar").css("white-space",t.titlebar.wrap).end().find(".ui-dialog-content").dialog("option",{resizable:t.config.resizable,height:t.size.height,maxHeight:t.size.maxHeight}).off("dialogclose",this._collapse_restore)},_initStyles_collapse:function(){var t;return i(".dialog-extend-collapse-css").length?void 0:(t="",t+='<style class="dialog-extend-collapse-css" type="text/css">',t+=".ui-dialog .ui-dialog-titlebar-collapse { width: 19px; height: 18px; }",t+=".ui-dialog .ui-dialog-titlebar-collapse span { display: block; margin: 1px; }",t+=".ui-dialog .ui-dialog-titlebar-collapse:hover,",t+=".ui-dialog .ui-dialog-titlebar-collapse:focus { padding: 0; }",t+="</style>",i(t).appendTo("body"))},_collapse_restore:function(){return i(this).dialogExtend("restore")}})}.call(this);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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>


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

Posted by so...@apache.org.
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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 8af1814..8e937d5 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.StreamClient;
-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 StreamClient} 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 StreamClient add(StreamClient 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 StreamClient 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
-			StreamClient rcm = new StreamClient();
-			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<StreamClient> getClients() {
-		return cache.getClients();
-	}
-
-	@Override
-	public Collection<StreamClient> getClientsWithServer() {
-		return cache.getClientsWithServer();
-	}
-
-	@Override
-	public StreamClient 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 StreamClient getClientByPublicSID(String publicSID, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			List<StreamClient> 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<StreamClient>> entry : cache.getClientsByPublicSID(publicSID).entrySet()) {
-				for (StreamClient rcl : entry.getValue()) {
-					return new ClientSessionInfo(rcl, entry.getKey());
-				}
-			}
-		} catch (Exception err) {
-			log.error("[getClientByPublicSIDAnyServer]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public StreamClient getClientByUserId(Long userId) {
-		try {
-			for (StreamClient 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, StreamClient rcm, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			// get the corresponding user session object and update the settings
-			StreamClient 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());
-				StreamClient 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, StreamClient rcm, boolean updateRoomCount, Server server) {
-		if (server == null) {
-			server = serverUtil.getCurrentServer();
-		}
-		try {
-			StreamClient 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<StreamClient> getClientListByRoom(Long roomId) {
-		List<StreamClient> roomClientList = new ArrayList<>();
-		try {
-			for (StreamClient 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<StreamClient> getClientListByRoomAll(Long roomId) {
-		try {
-			return cache.getClientsByRoomId(roomId);
-		} catch (Exception err) {
-			log.error("[getClientListByRoomAll]", err);
-		}
-		return null;
-	}
-
-	@Override
-	public List<StreamClient> getCurrentModeratorByRoom(Long roomId) {
-		List<StreamClient> rclList = new LinkedList<>();
-		List<StreamClient> currentClients = this.getClientListByRoom(roomId);
-		for (StreamClient rcl : currentClients) {
-			if (rcl.getIsMod()) {
-				rclList.add(rcl);
-			}
-		}
-		return rclList;
-	}
-
-	@Override
-	public SearchResult<StreamClient> getListByStartAndMax(int start, int max, String orderby, boolean asc) {
-		SearchResult<StreamClient> sResult = new SearchResult<>();
-		sResult.setObjectName(StreamClient.class.getName());
-		sResult.setRecords(Long.valueOf(cache.size()));
-		sResult.setResult(cache.getClientsWithServer());
-		return sResult;
-	}
-
-	@Override
-	public long getRecordingCount(long roomId) {
-		List<StreamClient> currentClients = this.getClientListByRoom(roomId);
-		int numberOfRecordingUsers = 0;
-		for (StreamClient rcl : currentClients) {
-			if (rcl.isStartRecording()) {
-				numberOfRecordingUsers++;
-			}
-		}
-		return numberOfRecordingUsers;
-	}
-
-	@Override
-	public long getPublishingCount(long roomId) {
-		List<StreamClient> currentClients = this.getClientListByRoom(roomId);
-		int numberOfPublishingUsers = 0;
-		for (StreamClient 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.StreamClient;
+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 StreamClient} 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 StreamClient add(StreamClient 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 StreamClient 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
+			StreamClient rcm = new StreamClient();
+			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<StreamClient> getClients() {
+		return cache.getClients();
+	}
+
+	@Override
+	public Collection<StreamClient> getClientsWithServer() {
+		return cache.getClientsWithServer();
+	}
+
+	@Override
+	public StreamClient 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 StreamClient getClientByPublicSID(String publicSID, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			List<StreamClient> 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<StreamClient>> entry : cache.getClientsByPublicSID(publicSID).entrySet()) {
+				for (StreamClient rcl : entry.getValue()) {
+					return new ClientSessionInfo(rcl, entry.getKey());
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getClientByPublicSIDAnyServer]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public StreamClient getClientByUserId(Long userId) {
+		try {
+			for (StreamClient 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, StreamClient rcm, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			// get the corresponding user session object and update the settings
+			StreamClient 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());
+				StreamClient 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, StreamClient rcm, boolean updateRoomCount, Server server) {
+		if (server == null) {
+			server = serverUtil.getCurrentServer();
+		}
+		try {
+			StreamClient 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<StreamClient> getClientListByRoom(Long roomId) {
+		List<StreamClient> roomClientList = new ArrayList<>();
+		try {
+			for (StreamClient 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<StreamClient> getClientListByRoomAll(Long roomId) {
+		try {
+			return cache.getClientsByRoomId(roomId);
+		} catch (Exception err) {
+			log.error("[getClientListByRoomAll]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public List<StreamClient> getCurrentModeratorByRoom(Long roomId) {
+		List<StreamClient> rclList = new LinkedList<>();
+		List<StreamClient> currentClients = this.getClientListByRoom(roomId);
+		for (StreamClient rcl : currentClients) {
+			if (rcl.getIsMod()) {
+				rclList.add(rcl);
+			}
+		}
+		return rclList;
+	}
+
+	@Override
+	public SearchResult<StreamClient> getListByStartAndMax(int start, int max, String orderby, boolean asc) {
+		SearchResult<StreamClient> sResult = new SearchResult<>();
+		sResult.setObjectName(StreamClient.class.getName());
+		sResult.setRecords(Long.valueOf(cache.size()));
+		sResult.setResult(cache.getClientsWithServer());
+		return sResult;
+	}
+
+	@Override
+	public long getRecordingCount(long roomId) {
+		List<StreamClient> currentClients = this.getClientListByRoom(roomId);
+		int numberOfRecordingUsers = 0;
+		for (StreamClient rcl : currentClients) {
+			if (rcl.isStartRecording()) {
+				numberOfRecordingUsers++;
+			}
+		}
+		return numberOfRecordingUsers;
+	}
+
+	@Override
+	public long getPublishingCount(long roomId) {
+		List<StreamClient> currentClients = this.getClientListByRoom(roomId);
+		int numberOfPublishingUsers = 0;
+		for (StreamClient 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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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/8e63647c/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);
+		}
+	}
+}