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 2021/12/22 14:12:14 UTC

[openmeetings] branch java11-modules updated (6c00af6 -> c824bb4)

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a change to branch java11-modules
in repository https://gitbox.apache.org/repos/asf/openmeetings.git.


    from 6c00af6  Some more work on modules
     add 6b15ae4  [OPENMEETINGS-2640] slf4j tika, mysql, plugins
     add 88c38ee  [OPENMEETINGS-2640] logback
     add 8ac48db  [OPENMEETINGS-2640] some exclusions are added
     add 51c20bf  [OPENMEETINGS-2640] commons-dbcp, maven-source-plugin
     add 3a1b9c7  [OPENMEETINGS-2640] tomcat
     add e5f6815  [OPENMEETINGS-2639] invitation hash should be generated for password protected invitations
     add 3549481  no jira: hazelcast warning is eliminated
     add 613c13c  [OPENMEETINGS-2640] commons-pool, mssql
     add 41737f4  [OPENMEETINGS-2640] xstream
     add 8494d0c  [OPENMEETINGS-2640] ojdbc, tika, mockito
     add ebddc8e  [OPENMEETINGS-2640] tika
     add b13bf82  [OPENMEETINGS-2637] initial commit
     add 612551b  Merge branch 'master' into bootstrap-5
     add 45be7ab  [OPENMEETINGS-2637] More work on migration
     add 37c12d6  test parameters are removed
     add fee30bd  [OPENMEETINGS-2637] Merge branch 'bootstrap-5'
     add 600d411  [OPENMEETINGS-2640] wicket-bootstrap, prometheus
     add 50f8b34  OPENMEETINGS-2654 Update website with new commands for updating JS code dynamically. (#144)
     add 88a6de9  OPENMEETINGS-2655 Adjust sidebar and desktop sharer icon to fit into button and menu. (#145)
     add 2fa40b5  Merge branch 'master' of github.com:apache/openmeetings
     add c166be6  [OPENMEETINGS-2652] multi-select should work better
     add 595e2af  OPENMEETINGS-2420 GEnerates swagger and update generated website to link swagger doc.
     add ed711d9  OPENMEETINGS-2420 Add additional tab.
     add 6c233f3  OPENMEETINGS-2420 Add additional tab part2.
     add a8e0027  Merge pull request #146 from apache/feature/OPENMEETINGS-2420-generate-swagger-and-provide-to-users-using-swagger-ui
     add 9fcc79f  OPENMEETINGS-2420 Update documentation and tagging for documenting Rest API. Sync with website.
     add 17c1fa0  OPENMEETINGS-2420 Update dependency to move to top level.
     add 7db3f9a  OPENMEETINGS-2420 Update Rest API docs for RoomService.
     add 6e202af  Merge pull request #147 from apache/feature/OPENMEETINGS-2420-generate-swagger-improvements
     add 0d08259  [OPENMEETINGS-2420] whitespaces, dependency versions
     add 2f802e9  [OPENMEETINGS-2652] test is fixed
     add dcb1235  Merge branch 'master' into feature/OPENMEETINGS-2420-update-swagger-rest-api-docs-RoomService
     add ad654ee  OPENMEETINGS-2420 Fix typo in generated json.
     add 525bd84  Merge pull request #148 from apache/feature/OPENMEETINGS-2420-update-swagger-rest-api-docs-RoomService
     add 55fcb94  OPENMEETINGS-2660 Update response codes and objects to be generated. Add UserService API tags for documentation.
     add 8b6eb93  OPENMEETINGS-2660 Update and add WbWebService.
     add 6b078d5  OPENMEETINGS-2660 Add RecordingWebService.java API Rest docs.
     add c7f3429  OPENMEETINGS-2660 Add NetTestWebService and RecordingWebService.
     add b5d1544  OPENMEETINGS-2660 Add InfoService.
     add 26ee1b5  OPENMEETINGS-2660 Add Rest API documentation annotation for GroupService.
     add 397efd2  OPENMEETINGS-2660 Add Rest API documentation annotation for FileService.
     add 26d49e8  OPENMEETINGS-2660 Add Rest API documentation annotation for ErrorService.
     add cd29850  OPENMEETINGS-2660 Add Rest API documentation annotation for CalendarService.
     add 082ceca  Merge pull request #149 from apache/feature/OPENMEETINGS-2660-update-swagger-rest-api-docs-additional-Web-Services
     add 7ea9706  OPENMEETINGS-2660 Update specs generated so that ordering in generated docs is defined.
     add 66b8d30  Merge pull request #150 from apache/feature/OPENMEETINGS-2660-fix-api-docs-generated-API-order
     add 4a656bd  [OPENMEETINGS-2659] vertical lines in calendar
     add e1de3d2  [OPENMEETINGS-2640] maven-javadoc-plugin, font-awesome
     add e01c014  OPENMEETINGS-2664 Fix consumes tag so generated swagger is correct.
     add 65cceb3  Merge pull request #151 from apache/feature/OPENMEETINGS-2664-fix-consumes-tag-for-rest-apis
     add 73a96cd  OPENMEETINGS-2661 Add Rest examples and add Node.js Module.
     add 1fc5032  Merge pull request #152 from apache/feature/OPENMEETINGS-2661-update-rest-examples-add-node-js-module
     add 97d1730  OPENMEETINGS-2661 Fix link and typo.
     add 29b6c33  Merge pull request #153 from apache/feature/OPENMEETINGS-2661-fix-typo-and-link
     add 828f1f0  OPENMEETINGS-2661 Fix another typo.
     add a57aa10  Merge pull request #155 from apache/feature/OPENMEETINGS-2661-fix-another-typo
     add feb2545  Revert "OPENMEETINGS-2664 Fix consumes tag so generated swagger is correct."
     add 882e265  OPENMEETINGS-2420 Update news section on OpenAPI spec and Node.js integration.
     add f897caf  [OPENMEETINGS-2640] wicket namespace is updated
     add de05f65  [OPENMEETINGS-2640] wicket, maven-war-plugin
     add c46bdc7  [OPENMEETINGS-2640] wicketstuff, junit, tomcat
     add 9756d54  OPENMEETINGS-2420 Add both release and other news section for Node.js and OpenAPI swagger doc link.
     add 051dab4  Merge branch 'master' of github.com:apache/openmeetings
     add a3a8865  Merge branch 'master' of github.com:apache/openmeetings
     add b2f565b  [OPENMEETINGS-2640, OPENMEETINGS-2665] wicket-bootstrap
     add 5f787ce  no jira: urls are corrected
     add 65a56e7  [OPENMEETINGS-2637] minor UI issues
     add b5bfab6  [OPENMEETINGS-2666] Backup import is improved
     add 63dd35e  [OPENMEETINGS-2668] upload to various 'roots' should work
     add 4ed7cf0  OPENMEETINGS-2667 Add ServiceResult updated schema wrapper to match CXF-RS response structure including root element.
     add 1876650  OPENMEETINGS-2667 Fix schema with root element and example values for responses.
     add 4e3d592  OPENMEETINGS-2667 Fix RoomService to have correct response schema and an example value.
     add 642f4c2  OPENMEETINGS-2667 Fix Recording and WbService to have schema matching response and example values.
     add 600abcb  OPENMEETINGS-2667 Update Info Service with correct response schema and an example response.
     add 77f5211  OPENMEETINGS-2667 Fix GroupService to have correct response schema definition and an example value.
     add b949e0c  OPENMEETINGS-2667 Update FileService to have correct schema definition and an example response.
     add 845995e  OPENMEETINGS-2667 Update CalendarService with response schema matching actual response and add an example value.
     add 4daf7c1  Merge pull request #156 from apache/feature/OPENMEETINGS-2667-update-schema-definition-for-response-wrapping-in-root-element
     add ca98a7a  Merge branch 'master' of github.com:apache/openmeetings
     add f30ddd6  OPENMEETINGS-2674 Update and add section for PHP Composer client module.
     add 5af06ba  Merge pull request #157 from apache/feature/OPENMEETINGS-2674-update-with-php-example
     add 28446ce  OPENMEETINGS-2674 Fix typo in news section.
     add 30b7d1c  OPENMEETINGS-2674 Update link from swagger to PHP example integration.
     add c535508  [OPENMEETINGS-2640] junit, spring, tomcat, cxf, asterisk-java, postgres, swagger
     add 8497914  [OPENMEETINGS-2640] mockito, spring and wicket-jquery-ui
     add 80cdb0d  OPENMEETINGS-2678 Update and ignore if Notificaiton API is not available.
     add 127d137  OPENMEETINGS-2678 Add review comment.
     add 5b0e6b8  Merge pull request #159 from apache/feature/OPENMEETINGS-2678-ios-notification-api
     add f69af21  OPENMEETINGS-2681 Improve margins and when whiteboard is disabled.
     add bf1a5b0  Merge pull request #160 from apache/feature/OPENMEETINGS-2681-improve-and-remove-margins-that
     add d774bea  OPENMEETINGS-2681 revert fixed menu size, since it enlarges in mobile viewport.
     add 220f9fe  Merge pull request #161 from apache/feature/OPENMEETINGS-2681-improve-and-remove-margins-that
     add 7e33756  OPENMEETINGS-2684, OPENMEETINGS-2280 Apply viewport and fix height to adjust when resizing occurs for iOS/Mobile browsers.
     add 3102717  OPENMEETINGS-2684 Remove unused css.
     add 886ba52  Merge pull request #162 from apache/feature/OPENMEETINGS-2684-update-viewport-and-adjust-height
     add 4a85d9d  OPENMEETINGS-2684 replace whitespaces with tab.
     add 57aea57  Merge branch 'master' of github.com:apache/openmeetings
     add 8f94d1d  OPENMEETINGS-2683 Add manifest file for adding icon, splash screen and browser settings for when adding to home screen on mobile.
     add 56cb5fb  Merge pull request #164 from apache/feature/OPENMEETINGS-2683-manifest-file-for-saving-to-home-screen
     add 92e19ec  OPENMEETINGS-2692 Update manifest to get webapp name from base URL config.
     add c2b0254  Merge pull request #165 from apache/feature/OPENMEETINGS-2692-update-webapp-path-for-manifest-references
     add 3d7001d  OPENMEETINGS-2693 Update instructions on how to change Mobile Icons.
     add 6bbb3d5  OPENMEETINGS-2693 Update docs and convert to markdown.
     add 739d682  Merge pull request #167 from apache/feature/OPENMEETINGS-2693-update-instructions-how-to-change-icons
     add 45c0299  OPENMEETINGS-2693 Fix SVG header license.
     add d1259e6  OPENMEETINGS-2692 Update review comments on parsing path element.
     add bedde16  OPENMEETINGS-2692 Update to use URI.resolve.
     add 3cef7f5  OPENMEETINGS-2692 change to log without stack trace.
     add 86ef9ff  OPENMEETINGS-2692 Update review comments around method handling.
     add b25113a  Merge pull request #166 from apache/feature/OPENMEETINGS-2692-update-webapp-path-for-manifest-references
     add 01d376a  [OPENMEETINGS-2675] openjpa
     add 365fe62  [OPENMEETINGS-2675] mysql, postgres, spring
     add d122b24  6.2.0 Release Candidate 1
     add 50f1c35  6.2.0 Release Candidate 1
     add 303c1bb  6.2.0 Release Candidate 1
     add 349f810  Update Changelog file with correct list of issues fixed in 6.2.0
     add bf2a0a4  Update and add 1 additional Jira to Changelog.
     add bdb0760  6.2.0 Release Candidate 2
     add 31686b2  Merge branch 'master' into release-6-2-0
     add 6296bb1  Update information for v6.2.0 and additional changes.
     add a7216ac  6.2.0 Release Candidate 3
     add f14472b  Merge branch 'release-6-2-0'
     add 9880bdd  Update master with changes from release 6.2.0.
     add ebfa674  Fix repo URL to master.
     add 7a4b334  Merge pull request #169 from apache/feature/release-merge-back
     add 63fde57  OPENMEETINGS-2695 Update website screenshots.
     add 4062edc  OPENMEETINGS-2695 Resize to smaller file size.
     add eb4df3c  Merge pull request #168 from apache/feature/OPENMEETINGS-2695-update-website-screenshots
     add e4481c0  [OPENMEETINGS-2701] web-service errors are visible to user; build time is reduced
     add 8457e58  [OPENMEETINGS-2675] spring, commons-cli, postgres, jetty
     add 6b7ba12  [OPENMEETINGS-2701] tests should be fixed
     add 253f12b  [OPENMEETINGS-2701] tests should be fixed
     add 35c45c8  [OPENMEETINGS-2675] tomcat
     add 507751a  [OPENMEETINGS-2702] wb-tools selector is fixed
     add 3850b5a  [OPENMEETINGS-2701] another attempt to fix tests
     add 438fff8  [OPENMEETINGS-2703] browser warning should be eliminated, sonar should be happier
     add 1276607  [OPENMEETINGS-2703] code clean-up
     add 153278e  [OPENMEETINGS-2703] test is fixed
     add 8716d6c  [OPENMEETINGS-2700] screensharing is disabled if getDisplayMedia is unavailable
     add 206bbca  [OPENMEETINGS-2710] unenroll seems to be fixed
     add b54676a  [OPENMEETINGS-2709] room sidebar tab text should look better
     add eb368b3  [OPENMEETINGS-2708] wb dropdowns are fixed one more time
     add 08fbc69  [OPENMEETINGS-2706] confirm popup should be functional
     add 08d3670  [OPENMEETINGS-2712] alerts overlapping is fixed
     add f480c97  [OPENMEETINGS-2707] my-rooms header text looks better
     add 96aad9d  [OPENMEETINGS-2690] there is more room for Enter button
     add 5cee9a5  [OPENMEETINGS-2488] bootstrap-confirmation used instead of dialog
     add 6f36145  [OPENMEETINGS-2687] upload is blocked on start, progress is improved
     add 2ab8d3f  [OPENMEETINGS-2714] invitation is saved as expected
     add 0fb6820  [OPENMEETINGS-2648] UI backup import is more responsive
     add 0feade0  [OPENMEETINGS-2707] tooltip is added
     add 299425e  [OPENMEETINGS-2675] libraries, test logging
     new c824bb4  Merge branch 'master' into java11-modules Some errors are fixed

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitignore                                         |   3 +
 CHANGELOG.md                                       |  45 +-
 README.md                                          |  23 +-
 openmeetings-core/pom.xml                          |  18 -
 openmeetings-core/src/main/java/module-info.java   |  24 +-
 .../apache/openmeetings/core/mail/MailHandler.java |  30 +-
 .../org/apache/openmeetings/core/remote/KRoom.java |   2 +-
 .../core/util/ChatWebSocketHelper.java             |   2 +-
 .../openmeetings/core/util/WebSocketHelper.java    |   2 +-
 .../openmeetings/core/mail/TestMailSending.java    |  10 +-
 .../openmeetings/core/remote/BaseMockedTest.java   |  12 +-
 .../core/remote/TestNotConnectedMocked.java        |   2 +-
 .../core/remote/TestRecordingFlowMocked.java       |  10 +-
 .../core/remote/TestRoomFlowMocked.java            |  14 +-
 .../core/remote/TestSetupFlowMocked.java           |  20 +-
 openmeetings-db/pom.xml                            |  32 +-
 openmeetings-db/src/main/java/module-info.java     |  14 +-
 .../apache/openmeetings/{ => db}/IApplication.java |   2 +-
 .../apache/openmeetings/{ => db}/IWebSession.java  |   2 +-
 .../db/dao/basic/ConfigurationDao.java             |   2 +-
 .../openmeetings/db/dao/room/InvitationDao.java    |   8 +
 .../db/entity/calendar/Appointment.java            |   4 +
 .../openmeetings/db/entity/room/Invitation.java    |   4 +
 .../apache/openmeetings/db/entity/room/Room.java   |   4 +
 .../openmeetings/db/util/ApplicationHelper.java    |   4 +-
 .../openmeetings/db/util/ws/RoomMessage.java       |   1 +
 openmeetings-install/pom.xml                       |   5 +-
 .../src/main/java/module-info.java                 |  17 +-
 .../apache/openmeetings/backup/BackupExport.java   |  58 +-
 .../apache/openmeetings/backup/BackupImport.java   | 201 ++++---
 .../apache/openmeetings/backup/ProgressHolder.java |  35 --
 .../java/org/apache/openmeetings/cli/Admin.java    |  11 +-
 .../installation/ImportInitvalues.java             |   2 +-
 openmeetings-server/pom.xml                        |   6 +-
 .../src/site/markdown/LogoAndIcons.md              |  28 +
 .../Features_Screen_Conference_Room_Thumb.png      | Bin 230947 -> 0 bytes
 .../images/cut_administration_configuration.png    | Bin 203669 -> 0 bytes
 .../resources/images/cut_conference_room_om5.png   | Bin 209105 -> 0 bytes
 .../site/resources/images/cut_file_explorer.png    | Bin 390104 -> 0 bytes
 .../resources/images/cut_integrated_calendar.png   | Bin 55245 -> 0 bytes
 .../site/resources/images/cut_integration_api.png  | Bin 152877 -> 0 bytes
 .../site/resources/images/cut_private_messages.png | Bin 75489 -> 0 bytes
 .../resources/images/cut_recordings_playback.png   | Bin 311981 -> 0 bytes
 .../src/site/resources/images/desktopsharing.png   | Bin 35736 -> 0 bytes
 .../site/resources/images/recordings_timeleine.png | Bin 231190 -> 0 bytes
 .../screenshots/administration-configuration.png   | Bin 0 -> 434836 bytes
 .../images/screenshots/calendar-screenshot.png     | Bin 0 -> 234263 bytes
 .../screenshots/conference-room-av-settings.jpg    | Bin 0 -> 157090 bytes
 .../resources/images/screenshots/file-explorer.png | Bin 0 -> 646616 bytes
 .../images/screenshots/integration-api.png         | Bin 0 -> 251807 bytes
 .../images/screenshots/private-messages.png        | Bin 0 -> 312453 bytes
 .../images/screenshots/recordings-playback.png     | Bin 0 -> 527528 bytes
 .../images/screenshots/screenshot_OM6-2.jpg        | Bin 0 -> 136688 bytes
 .../resources/images/screenshots/share-screen.jpg  | Bin 0 -> 143210 bytes
 openmeetings-server/src/site/resources/js/site.js  |   2 +-
 openmeetings-server/src/site/site.xml              |   4 +-
 .../src/site/xdoc/BuildInstructions.xml            |  23 +-
 .../src/site/xdoc/ConfluencePlugin.xml             |   2 +-
 openmeetings-server/src/site/xdoc/JiraPlugin.xml   |   2 +-
 openmeetings-server/src/site/xdoc/NewsArchive.xml  |  32 +
 .../src/site/xdoc/RestAPISample.xml                | 121 +++-
 .../src/site/xdoc/WebappNamePath.xml               |   7 -
 openmeetings-server/src/site/xdoc/WebsiteGuide.xml |   2 +-
 openmeetings-server/src/site/xdoc/downloads.xml    |  30 +-
 openmeetings-server/src/site/xdoc/index.xml        | 107 ++--
 openmeetings-service/pom.xml                       |  10 -
 .../src/main/java/module-info.java                 |  35 +-
 .../service/calendar/caldav/IcalUtils.java         | 254 ++++----
 .../openmeetings/service/mail/EmailManager.java    |   2 +-
 .../mail/template/AbstractTemplatePanel.html       |   2 +-
 .../mail/template/AbstractTemplatePanel.java       |   4 +-
 .../service/mail/template/FeedbackTemplate.html    |   2 +-
 .../service/mail/template/InvitationTemplate.html  |   2 +-
 .../mail/template/RegisterUserTemplate.html        |   2 +-
 .../template/RequestContactConfirmTemplate.html    |   2 +-
 .../mail/template/RequestContactTemplate.html      |   2 +-
 .../mail/template/ResetPasswordTemplate.html       |   2 +-
 .../subject/AppointmentReminderTemplate.java       |   2 +-
 .../mail/template/subject/AppointmentTemplate.html |   2 +-
 .../mail/template/subject/AppointmentTemplate.java |   2 +-
 .../subject/CanceledAppointmentTemplate.java       |   2 +-
 .../subject/CreatedAppointmentTemplate.java        |   2 +-
 .../subject/InvitedAppointmentTemplate.html        |   2 +-
 .../subject/InvitedAppointmentTemplate.java        |   2 +-
 .../subject/NewGroupUsersNotificationTemplate.html |   2 +-
 .../subject/RecordingExpiringTemplate.html         |   2 +-
 .../subject/UpdatedAppointmentTemplate.java        |   2 +-
 .../service/room/InvitationManager.java            |  10 +-
 openmeetings-util/pom.xml                          |  40 +-
 openmeetings-util/src/main/java/module-info.java   |  30 +-
 .../openmeetings/util/OpenmeetingsVariables.java   |  19 +
 .../org/apache/openmeetings/util/StoredFile.java   |   2 +-
 .../openmeetings/util/crypt/CryptProvider.java     |   3 -
 .../util/mail/ByteArrayDataSource.java             |   2 +-
 .../apache/openmeetings/util/mail/IcalHandler.java |  25 +-
 openmeetings-util/src/test/java/module-info.test   |  25 -
 .../{NonJenkinsTests.java => NonJenkinsTest.java}  |  13 +-
 openmeetings-web/pom.xml                           | 119 +---
 openmeetings-web/src/main/front/chat/src/chat.js   |   2 +-
 openmeetings-web/src/main/front/main/src/index.js  |   7 +
 .../src/main/front/main/src/omutils.js             |  25 +-
 .../src/main/front/room/src/quick-poll.js          |   4 +-
 .../src/main/front/room/src/user-list.js           |   3 +-
 openmeetings-web/src/main/front/room/src/video.js  |   5 -
 .../src/main/front/settings/src/video-util.js      |  16 +-
 openmeetings-web/src/main/front/wb/src/wb-tools.js |  16 +-
 openmeetings-web/src/main/java/module-info.java    |  50 ++
 .../openmeetings/web/admin/AdminActionsPanel.html  |   2 +-
 .../openmeetings/web/admin/AdminActionsPanel.java  |   2 +-
 .../openmeetings/web/admin/AdminBasePanel.html     |   4 +-
 .../openmeetings/web/admin/backup/BackupPanel.html |  67 ++-
 .../openmeetings/web/admin/backup/BackupPanel.java | 170 ++----
 .../backup/BackupUploadResourceReference.java      |  99 +++
 .../web/admin/configurations/ConfigsPanel.html     |   4 +-
 .../web/admin/connection/ConnectionsPanel.html     |   6 +-
 .../web/admin/connection/ConnectionsPanel.java     |   4 +-
 .../openmeetings/web/admin/email/EmailForm.java    |   2 +-
 .../openmeetings/web/admin/email/EmailPanel.html   |   6 +-
 .../openmeetings/web/admin/extra/ExtraPanel.html   |   4 +-
 .../web/admin/groups/GroupUsersPanel.html          |   6 +-
 .../web/admin/groups/GroupUsersPanel.java          |   6 +-
 .../openmeetings/web/admin/groups/GroupsPanel.html |   4 +-
 .../openmeetings/web/admin/groups/GroupsPanel.java |   2 +-
 .../web/admin/labels/AddLanguageDialog.html        |   2 +-
 .../openmeetings/web/admin/labels/LangPanel.html   |  26 +-
 .../openmeetings/web/admin/labels/LangPanel.java   |   2 +-
 .../openmeetings/web/admin/ldaps/LdapsPanel.html   |   4 +-
 .../openmeetings/web/admin/oauth/OAuthForm.java    |   2 +-
 .../openmeetings/web/admin/oauth/OAuthPanel.html   |   8 +-
 .../openmeetings/web/admin/rooms/RoomForm.java     |   8 +-
 .../openmeetings/web/admin/rooms/RoomsPanel.html   |  16 +-
 .../web/admin/users/PasswordDialog.html            |   4 +-
 .../openmeetings/web/admin/users/UserForm.html     |   2 +-
 .../openmeetings/web/admin/users/UserForm.java     |   4 +-
 .../openmeetings/web/admin/users/UsersPanel.html   |   4 +-
 .../openmeetings/web/admin/users/UsersPanel.java   |   2 +-
 .../apache/openmeetings/web/app/Application.java   |  71 +--
 .../web/app/Application.properties.xml             |  23 +-
 .../web/app/Application_ar.properties.xml          |  16 +-
 .../web/app/Application_bg.properties.xml          |  23 +-
 .../web/app/Application_bn.properties.xml          |  23 +-
 .../web/app/Application_ca.properties.xml          |  23 +-
 .../web/app/Application_cs.properties.xml          |  23 +-
 .../web/app/Application_da.properties.xml          |  23 +-
 .../web/app/Application_de.properties.xml          |  12 +-
 .../web/app/Application_el.properties.xml          |  23 +-
 .../web/app/Application_es.properties.xml          |  12 +-
 .../web/app/Application_fa.properties.xml          |  12 +-
 .../web/app/Application_fi.properties.xml          |  23 +-
 .../web/app/Application_fr.properties.xml          |  12 +-
 .../web/app/Application_gl.properties.xml          |  23 +-
 .../web/app/Application_hi.properties.xml          |  23 +-
 .../web/app/Application_hu.properties.xml          |  12 +-
 .../web/app/Application_in.properties.xml          |  23 +-
 .../web/app/Application_it.properties.xml          |  12 +-
 .../web/app/Application_iw.properties.xml          |  23 +-
 .../web/app/Application_ja.properties.xml          |  12 +-
 .../web/app/Application_ko.properties.xml          |  23 +-
 .../web/app/Application_ku.properties.xml          |  23 +-
 .../web/app/Application_lo.properties.xml          |  14 +-
 .../web/app/Application_nl.properties.xml          |  23 +-
 .../web/app/Application_pl.properties.xml          |  14 +-
 .../web/app/Application_pt.properties.xml          |  23 +-
 .../web/app/Application_pt_BR.properties.xml       |  14 +-
 .../web/app/Application_ru.properties.xml          |  12 +-
 .../web/app/Application_sk.properties.xml          |  23 +-
 .../web/app/Application_sv.properties.xml          |  21 +-
 .../web/app/Application_ta.properties.xml          |  23 +-
 .../web/app/Application_th.properties.xml          |  23 +-
 .../web/app/Application_tk.properties.xml          |  23 +-
 .../web/app/Application_tr.properties.xml          |  23 +-
 .../web/app/Application_uk.properties.xml          |  12 +-
 .../web/app/Application_ur.properties.xml          |  23 +-
 .../web/app/Application_zh_CN.properties.xml       |  12 +-
 .../web/app/Application_zh_TW.properties.xml       |  23 +-
 .../apache/openmeetings/web/app/WebSession.java    |   2 +-
 .../openmeetings/web/app/WhiteboardManager.java    |   2 +-
 .../apache/openmeetings/web/common/Captcha.html    |   2 +-
 .../openmeetings/web/common/ComunityUserForm.html  |   2 +-
 .../openmeetings/web/common/ErrorMessagePanel.html |   2 +-
 .../openmeetings/web/common/FormActionsPanel.html  |   2 +-
 .../openmeetings/web/common/FormActionsPanel.java  |   2 +-
 .../openmeetings/web/common/GeneralUserForm.html   |   2 +-
 .../openmeetings/web/common/GeneralUserForm.java   |   2 +-
 .../openmeetings/web/common/HeaderPanel.html       |   2 +-
 .../apache/openmeetings/web/common/ImagePanel.html |   2 +-
 .../openmeetings/web/common/InvitationDialog.html  |   2 +-
 .../openmeetings/web/common/InvitationDialog.java  |   1 +
 .../openmeetings/web/common/InvitationForm.html    |   2 +-
 .../openmeetings/web/common/InvitationForm.java    |   8 +-
 .../apache/openmeetings/web/common/MainPanel.html  |   2 +-
 .../apache/openmeetings/web/common/MainPanel.java  |   2 +-
 .../apache/openmeetings/web/common/NameDialog.html |   4 +-
 .../openmeetings/web/common/OmPagingNavigator.html |   2 +-
 .../web/common/PagedEntityListPanel.html           |   6 +-
 .../web/common/PagingNavigatorPanel.html           |   6 +-
 .../web/common/UploadableImagePanel.html           |   2 +-
 .../web/common/UploadableImagePanel.java           |   2 +-
 .../common/confirmation/ConfirmableAjaxBorder.html |  26 -
 .../common/confirmation/ConfirmableAjaxBorder.java |  74 ---
 .../common/confirmation/ConfirmationBehavior.java  | 112 ----
 .../common/confirmation/ConfirmationConfig.java    | 114 ----
 .../common/confirmation/ConfirmationDialog.java    |  77 ---
 .../common/confirmation/ConfirmationHelper.java    |  47 ++
 .../common/confirmation/bootstrap-confirmation.js  | 596 ------------------
 .../common/datetime/AbstractOmDateTimePicker.html  |   2 +-
 .../openmeetings/web/common/menu/MenuPanel.html    |   2 +-
 .../web/common/tree/ConvertingErrorsDialog.html    |   2 +-
 .../web/common/tree/FileItemPanel.html             |   2 +-
 .../web/common/tree/FileTreePanel.html             |  25 +-
 .../web/common/tree/FileTreePanel.java             |  67 +--
 .../openmeetings/web/common/tree/FolderPanel.html  |   2 +-
 .../web/common/tree/OmTreeProvider.java            |   2 +-
 .../openmeetings/web/common/tree/filetree.js       |  13 +-
 .../upload/UploadForm.html}                        |  38 +-
 .../openmeetings/web/common/upload/UploadForm.java | 120 ++++
 .../web/common/upload/UploadResourceReference.java | 148 +++++
 .../openmeetings/web/common/upload/upload.js       | 126 ++++
 .../openmeetings/web/pages/AccessDeniedPage.html   |   2 +-
 .../apache/openmeetings/web/pages/BasePage.html    |  34 +-
 .../apache/openmeetings/web/pages/BasePage.java    |   2 +-
 .../apache/openmeetings/web/pages/HashPage.html    |   2 +-
 .../openmeetings/web/pages/InternalErrorPage.html  |   2 +-
 .../web/pages/InvitationPasswordDialog.html        |   2 +-
 .../apache/openmeetings/web/pages/MainPage.html    |   2 +-
 .../openmeetings/web/pages/NotInitedPage.html      |   2 +-
 .../apache/openmeetings/web/pages/PrivacyPage.html |   2 +-
 .../apache/openmeetings/web/pages/ResetPage.html   |   2 +-
 .../web/pages/auth/ForgetPasswordDialog.html       |  16 +-
 .../web/pages/auth/ForgetPasswordDialog.java       |   2 +-
 .../web/pages/auth/RegisterDialog.html             |  34 +-
 .../web/pages/auth/ResetPasswordDialog.html        |   8 +-
 .../openmeetings/web/pages/auth/SignInDialog.html  |  36 +-
 .../openmeetings/web/pages/auth/SignInPage.html    |   2 +-
 .../web/pages/install/CongratulationsPanel.html    |   2 +-
 .../web/pages/install/InstallWizard$DbStep.html    |   2 +-
 .../pages/install/InstallWizard$InstallStep.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep1.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep2.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep3.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep4.html   |   2 +-
 .../pages/install/InstallWizard$WelcomeStep.html   |   2 +-
 .../web/pages/install/InstallWizard.java           |   8 +-
 .../web/pages/install/InstallWizardPage.html       |   2 +-
 .../openmeetings/web/room/EventDetailDialog.html   |   2 +-
 .../openmeetings/web/room/IconTextModal.html       |   2 +-
 .../apache/openmeetings/web/room/NetTestPanel.html |  34 +-
 .../openmeetings/web/room/NicknameDialog.html      |   2 +-
 .../apache/openmeetings/web/room/RoomPanel.html    |  30 +-
 .../apache/openmeetings/web/room/RoomPanel.java    |  61 +-
 .../web/room/RoomResourceReference.java            |   2 +-
 .../openmeetings/web/room/VideoSettings.html       |  12 +-
 .../web/room/activities/ActivitiesPanel.html       |   6 +-
 .../openmeetings/web/room/menu/ActionsSubMenu.java |   7 +-
 .../web/room/menu/RoomInvitationForm.html          |   2 +-
 .../web/room/menu/RoomInvitationForm.java          |  19 +-
 .../openmeetings/web/room/menu/RoomMenuPanel.html  |   4 +-
 .../openmeetings/web/room/menu/RoomMenuPanel.java  |  10 +-
 .../web/room/menu/SipDialerDialog.html             |   2 +-
 .../web/room/poll/CreatePollDialog.html            |  10 +-
 .../web/room/poll/PollResultsDialog.html           |   2 +-
 .../web/room/poll/PollResultsDialog.java           |   2 +-
 .../openmeetings/web/room/poll/VoteDialog.html     |   6 +-
 .../apache/openmeetings/web/room/raw-nettest.js    |   2 +-
 .../web/room/sidebar/RoomFilePanel.java            |   2 +-
 .../sidebar/RoomFileUploadResourceReference.java   | 143 ++---
 .../openmeetings/web/room/sidebar/RoomSidebar.html |  12 +-
 .../openmeetings/web/room/sidebar/RoomSidebar.java |   2 +-
 .../RoomUploadForm.html}                           |  32 +-
 .../web/room/sidebar/RoomUploadForm.java           |  93 +++
 .../web/room/sidebar/UploadDialog.html             |  26 +-
 .../web/room/sidebar/UploadDialog.java             |  53 +-
 .../openmeetings/web/room/sidebar/room-upload.js   |  14 +
 .../apache/openmeetings/web/room/sidebar/upload.js | 112 ----
 .../openmeetings/web/room/wb/InterviewWbPanel.html |   2 +-
 .../apache/openmeetings/web/room/wb/WbPanel.html   |  70 +--
 .../web/room/wb/WbWebSocketHelper.java             |   2 +-
 .../openmeetings/web/room/wb/WsMessageWb.java      |   2 +-
 .../openmeetings/web/room/wb/WsMessageWbFile.java  |   2 +-
 .../apache/openmeetings/web/user/AboutDialog.html  |  10 +-
 .../web/user/InviteUserMessageDialog.html          |   2 +-
 .../web/user/InviteUserToRoomDialog.html           |   2 +-
 .../openmeetings/web/user/MessageDialog.html       |   2 +-
 .../openmeetings/web/user/MessageDialog.java       |   5 +-
 .../openmeetings/web/user/OmWysiwygToolbar.html    |   6 +-
 .../openmeetings/web/user/UserInfoDialog.html      |   2 +-
 .../web/user/calendar/AppointmentDialog.html       |   8 +-
 .../web/user/calendar/AppointmentDialog.java       |   9 +-
 .../web/user/calendar/CalendarDialog.html          |   2 +-
 .../web/user/calendar/CalendarDialog.java          |   2 +-
 .../web/user/calendar/CalendarPanel.html           |   4 +-
 .../web/user/calendar/CalendarPanel.java           |   2 +-
 .../apache/openmeetings/web/user/chat/Chat.html    |   6 +-
 .../apache/openmeetings/web/user/chat/Chat.java    |   4 +-
 .../openmeetings/web/user/chat/ChatPanel.html      |   4 +-
 .../openmeetings/web/user/chat/ChatToolbar.html    |  16 +-
 .../openmeetings/web/user/chat/ChatToolbar.java    |   8 +-
 .../web/user/dashboard/MyRoomsWidgetView.html      |   2 +-
 .../web/user/dashboard/OmDashboardPanel.html       |   2 +-
 .../web/user/dashboard/RecentRoomsWidgetView.html  |   2 +-
 .../web/user/dashboard/RssWidgetView.html          |   6 +-
 .../web/user/dashboard/StartWidgetView.html        |  10 +-
 .../web/user/dashboard/WelcomeWidgetView.html      |   2 +-
 .../dashboard/admin/AdminCleanupInfoDialog.html    |   2 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |   2 +-
 .../web/user/dashboard/admin/AdminWidgetView.html  |   2 +-
 .../dashboard/admin/CleanupEntityUnitPanel.html    |   2 +-
 .../web/user/dashboard/admin/CleanupUnitPanel.html |   2 +-
 .../apache/openmeetings/web/user/dashboard/rss.js  |   2 +-
 .../web/user/profile/ChangePasswordDialog.html     |   2 +-
 .../web/user/profile/EditProfileForm.html          |   2 +-
 .../web/user/profile/EditProfilePanel.html         |   2 +-
 .../web/user/profile/InvitationDetails.java        |   2 +-
 .../web/user/profile/InvitationsPanel.html         |  14 +-
 .../web/user/profile/InvitationsPanel.java         |   2 +-
 .../web/user/profile/MessagesContactsPanel.html    |   8 +-
 .../web/user/profile/MessagesContactsPanel.java    |   4 +-
 .../web/user/profile/UserProfilePanel.html         |   2 +-
 .../web/user/profile/UserSearchPanel.html          |   6 +-
 .../web/user/profile/UserSearchPanel.java          |   2 +-
 .../web/user/profile/WidgetsPanel.html             |   4 +-
 .../web/user/profile/WidgetsPanel.java             |   4 +-
 .../web/user/record/RecordingInvitationForm.html   |   2 +-
 .../web/user/record/RecordingInvitationForm.java   |   9 +-
 .../web/user/record/RecordingsPanel.html           |   4 +-
 .../web/user/record/RecordingsPanel.java           |   7 +-
 .../openmeetings/web/user/record/VideoInfo.html    |   2 +-
 .../openmeetings/web/user/record/VideoPlayer.html  |   2 +-
 .../openmeetings/web/user/rooms/RoomListPanel.html |   6 +-
 .../openmeetings/web/user/rooms/RoomListPanel.java |   2 +-
 .../openmeetings/web/user/rooms/RoomsPanel.html    |   4 +-
 .../openmeetings/web/user/rooms/RoomsPanel.java    |   2 +-
 .../web/user/rooms/RoomsSelectorPanel.html         |   4 +-
 .../web/user/rooms/RoomsSelectorPanel.java         |  11 +-
 .../web/user/rooms/RoomsTabbedPanel.html           |   2 +-
 .../web/util/GroupLogoResourceReference.java       |   4 +-
 .../web/util/ProfileImageResourceReference.java    |   9 +-
 .../apache/openmeetings/web/util/ThreadHelper.java |  13 +-
 .../web/util/UserDashboardPersister.java           |   2 +-
 .../util/logging/OpenMeetingsMetricsServlet.java   |   3 +-
 .../web/util/logging/TomcatGenericExports.java     |  13 +-
 .../classes/META-INF/oracle_persistence.xml        |   2 +-
 .../main/webapp/WEB-INF/classes/cxf-servlet.xml    |   1 +
 .../src/main/webapp/WEB-INF/classes/hazelcast.xml  |   2 +-
 .../src/main/webapp/css/raw-activities.css         |   2 +-
 openmeetings-web/src/main/webapp/css/raw-admin.css |   4 +-
 .../src/main/webapp/css/raw-calendar.css           |   7 +
 openmeetings-web/src/main/webapp/css/raw-chat.css  |   7 +-
 .../src/main/webapp/css/raw-general.css            |  22 +-
 openmeetings-web/src/main/webapp/css/raw-menu.css  |   6 +-
 .../src/main/webapp/css/raw-nettest.css            |  20 +-
 openmeetings-web/src/main/webapp/css/raw-room.css  | 111 ++--
 openmeetings-web/src/main/webapp/css/raw-tree.css  |  18 +-
 .../src/main/webapp/css/raw-variables.css          |   3 +-
 openmeetings-web/src/main/webapp/css/raw-wb.css    |   4 +-
 .../main/webapp/images/icons/apple-icon-180.png    | Bin 0 -> 10696 bytes
 .../webapp/images/icons/apple-splash-1125-2436.jpg | Bin 0 -> 66463 bytes
 .../webapp/images/icons/apple-splash-1136-640.jpg  | Bin 0 -> 24945 bytes
 .../webapp/images/icons/apple-splash-1170-2532.jpg | Bin 0 -> 69906 bytes
 .../webapp/images/icons/apple-splash-1242-2208.jpg | Bin 0 -> 72120 bytes
 .../webapp/images/icons/apple-splash-1242-2688.jpg | Bin 0 -> 75659 bytes
 .../webapp/images/icons/apple-splash-1284-2778.jpg | Bin 0 -> 78823 bytes
 .../webapp/images/icons/apple-splash-1334-750.jpg  | Bin 0 -> 31010 bytes
 .../webapp/images/icons/apple-splash-1536-2048.jpg | Bin 0 -> 88952 bytes
 .../webapp/images/icons/apple-splash-1620-2160.jpg | Bin 0 -> 95661 bytes
 .../webapp/images/icons/apple-splash-1668-2224.jpg | Bin 0 -> 99240 bytes
 .../webapp/images/icons/apple-splash-1668-2388.jpg | Bin 0 -> 101273 bytes
 .../webapp/images/icons/apple-splash-1792-828.jpg  | Bin 0 -> 32864 bytes
 .../webapp/images/icons/apple-splash-2048-1536.jpg | Bin 0 -> 83104 bytes
 .../webapp/images/icons/apple-splash-2048-2732.jpg | Bin 0 -> 130068 bytes
 .../webapp/images/icons/apple-splash-2160-1620.jpg | Bin 0 -> 89441 bytes
 .../webapp/images/icons/apple-splash-2208-1242.jpg | Bin 0 -> 60178 bytes
 .../webapp/images/icons/apple-splash-2224-1668.jpg | Bin 0 -> 92538 bytes
 .../webapp/images/icons/apple-splash-2388-1668.jpg | Bin 0 -> 92578 bytes
 .../webapp/images/icons/apple-splash-2436-1125.jpg | Bin 0 -> 50367 bytes
 .../webapp/images/icons/apple-splash-2532-1170.jpg | Bin 0 -> 53274 bytes
 .../webapp/images/icons/apple-splash-2688-1242.jpg | Bin 0 -> 57573 bytes
 .../webapp/images/icons/apple-splash-2732-2048.jpg | Bin 0 -> 121595 bytes
 .../webapp/images/icons/apple-splash-2778-1284.jpg | Bin 0 -> 60820 bytes
 .../webapp/images/icons/apple-splash-640-1136.jpg  | Bin 0 -> 30165 bytes
 .../webapp/images/icons/apple-splash-750-1334.jpg  | Bin 0 -> 37214 bytes
 .../webapp/images/icons/apple-splash-828-1792.jpg  | Bin 0 -> 44404 bytes
 .../images/icons/manifest-icon-192.maskable.png    | Bin 0 -> 11489 bytes
 .../images/icons/manifest-icon-512.maskable.png    | Bin 0 -> 40763 bytes
 .../webapp/images/icons/openmeetings-logo-icon.svg | 110 ++++
 .../apache/openmeetings/AbstractSpringTest.java    |  48 --
 .../calendar/TestAppointmentAddAppointment.java    |   4 +-
 .../calendar/TestAppointmentSchedulerTask.java     |   4 +-
 .../calendar/TestDatabaseStructureAppointment.java |   4 +-
 ...TestDatabaseStructureGetAppointmentByRange.java |   4 +-
 .../TestDatabaseStructureGetUserStart.java         |   4 +-
 .../TestDatabaseStructureMeetingMember.java        |   4 +-
 .../openmeetings/calendar/TestGetAppointment.java  |   4 +-
 .../openmeetings/calendar/TestOmCalendar.java      |   4 +-
 .../openmeetings/calendar/TestSendIcalMessage.java |  33 +-
 .../openmeetings/{cli => cmdline}/TestAdmin.java   |  16 +-
 .../openmeetings/{cli => cmdline}/TestPatcher.java |   9 +-
 .../org/apache/openmeetings/config/TestConfig.java |   4 +-
 .../openmeetings/core/file/TestFileProcessor.java  |   4 +-
 .../apache/openmeetings/domain/TestAddGroup.java   |   4 +-
 .../domain/TestUserGroupAggregation.java           |   4 +-
 .../openmeetings/invitiation/TestInvitation.java   |   6 +-
 .../org/apache/openmeetings/ldap/TestLdap.java     |   6 +-
 .../apache/openmeetings/smoke/TestSmokeBasic.java  |   4 +-
 .../apache/openmeetings/user/TestUserContact.java  |   6 +-
 .../apache/openmeetings/user/TestUserCount.java    |   4 +-
 .../apache/openmeetings/user/TestUserGroup.java    |   6 +-
 .../org/apache/openmeetings/userdata/TestAuth.java |   4 +-
 .../apache/openmeetings/userdata/TestLogin.java    |   4 +-
 .../org/apache/openmeetings/web/TestCalendar.java  |   8 +-
 .../org/apache/openmeetings/web/TestMainAreas.java |   6 +-
 .../org/apache/openmeetings/web/TestMainMenu.java  |   6 +-
 .../openmeetings/web/app/TestApplication.java      |   4 +-
 .../web/app/TestApplicationMocked.java             |   6 +-
 .../web/app/TestOmAuthenticationStrategy.java      |   4 +-
 .../web/app/TestUserManagerMocked.java             |   2 +
 .../openmeetings/web/app/TestWebSession.java       |   4 +-
 .../openmeetings/web/pages/TestHashPage.java       |   8 +-
 .../openmeetings/web/pages/auth/TestLoginUI.java   |   4 +-
 .../web/pages/install/TestInstall.java             |  26 +-
 .../service/mail}/TestEmailTemplate.java           |  12 +-
 .../service/mail}/TestSubjTemplate.java            |  14 +-
 .../test/AbstractOmServerTest.java}                |  34 +-
 .../test/AbstractWicketTesterTest.java}            |  10 +-
 .../apache/openmeetings/web/test/IsolatedTest.java |  11 +-
 .../apache/openmeetings/web/test/RegularTest.java  |  11 +-
 .../{ => web/test}/backup/AbstractTestImport.java  |  10 +-
 .../{ => web/test}/backup/TestExport.java          |  11 +-
 .../{ => web/test}/backup/TestImport.java          |   5 +-
 .../{ => web/test}/backup/TestImportCalendar.java  |   4 +-
 .../{ => web/test}/backup/TestImportConfig.java    |   4 +-
 .../{ => web/test}/backup/TestImportOld.java       |   8 +-
 .../{ => web/test}/backup/TestImportRoom.java      |   4 +-
 .../{ => web/test}/backup/TestImportUser.java      |   5 +-
 .../{db/dao => web/test/db}/TestFileDao.java       |   6 +-
 .../{db/dao => web/test/db}/TestRoomDao.java       |   6 +-
 .../scheduler => web/test/job}/TestJob.java        |  10 +-
 .../openmeetings/{ => web}/util/TestDateTime.java  |   6 +-
 .../{ => web}/util/TestStoredFile.java             |   7 +-
 .../webservice/AbstractWebServiceTest.java         |  50 +-
 .../webservice/CreateTomcatExtension.java          |  82 +++
 .../webservice/TestCalendarService.java            |  14 +-
 .../openmeetings/webservice/TestErrorService.java  |   2 +-
 .../openmeetings/webservice/TestFileService.java   |  13 +-
 .../openmeetings/webservice/TestGroupService.java  |   4 +-
 .../openmeetings/webservice/TestInfoService.java   |  31 +-
 .../webservice/TestRecordingService.java           |   2 +-
 .../openmeetings/webservice/TestUserService.java   |  24 +-
 openmeetings-web/src/test/jetty/web.xml            |   2 +-
 .../src/test/resources/logback-test.xml            |   1 +
 .../apache/openmeetings/backup/config/configs.xml  |   4 +-
 .../openmeetings/backup/config/skip/configs.xml    |   4 +-
 openmeetings-webservice/pom.xml                    | 107 +++-
 .../src/main/java/module-info.java                 |  16 +-
 .../webservice/CalendarWebService.java             | 128 +++-
 .../openmeetings/webservice/ErrorWebService.java   |  41 +-
 .../openmeetings/webservice/FileWebService.java    | 136 ++++-
 .../openmeetings/webservice/GroupWebService.java   | 113 +++-
 .../openmeetings/webservice/InfoWebService.java    |  67 ++-
 .../openmeetings/webservice/NetTestWebService.java |  50 +-
 .../webservice/RecordingWebService.java            |  68 ++-
 .../openmeetings/webservice/RoomWebService.java    | 202 ++++++-
 .../openmeetings/webservice/UserWebService.java    |  97 ++-
 .../openmeetings/webservice/WbWebService.java      |  72 ++-
 .../schema/AppointmentDTOListWrapper.java          | 157 +++++
 .../webservice/schema/AppointmentDTOWrapper.java   | 153 +++++
 .../schema/FileExplorerObjectWrapper.java          |  79 +++
 .../webservice/schema/FileItemDTOListWrapper.java  |  60 ++
 .../webservice/schema/FileItemDTOWrapper.java      |  56 ++
 .../webservice/schema/GroupDTOListWrapper.java     |  49 +-
 .../webservice/schema/HealthWrapper.java           |  43 +-
 .../webservice/schema/InfoWrapper.java             |  38 +-
 .../webservice/schema/RecordingDTOListWrapper.java |  63 ++
 .../webservice/schema/RoomDTOListWrapper.java      | 124 ++++
 .../webservice/schema/RoomDTOWrapper.java          |  64 ++
 .../ServiceResultWrapper.java}                     |  35 +-
 .../webservice/schema/UserDTOListWrapper.java      | 111 ++++
 .../webservice/schema/UserDTOWrapper.java          |  68 +++
 .../webservice/schema/UserSearchResultWrapper.java |  94 +++
 ...ParamConverter.java => OmExceptionHandler.java} |  33 +-
 pom.xml                                            | 666 +++++++++++++++++----
 .../license/THIRD-PARTY.properties                 |   3 +-
 src/license/license-template.ftl                   |  93 +++
 483 files changed, 6152 insertions(+), 3852 deletions(-)
 rename openmeetings-db/src/main/java/org/apache/openmeetings/{ => db}/IApplication.java (98%)
 rename openmeetings-db/src/main/java/org/apache/openmeetings/{ => db}/IWebSession.java (96%)
 copy openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/IRecordingConverter.java => openmeetings-install/src/main/java/module-info.java (68%)
 delete mode 100644 openmeetings-install/src/main/java/org/apache/openmeetings/backup/ProgressHolder.java
 create mode 100644 openmeetings-server/src/site/markdown/LogoAndIcons.md
 delete mode 100644 openmeetings-server/src/site/resources/images/Features_Screen_Conference_Room_Thumb.png
 delete mode 100644 openmeetings-server/src/site/resources/images/cut_administration_configuration.png
 delete mode 100644 openmeetings-server/src/site/resources/images/cut_conference_room_om5.png
 delete mode 100644 openmeetings-server/src/site/resources/images/cut_file_explorer.png
 delete mode 100644 openmeetings-server/src/site/resources/images/cut_integrated_calendar.png
 delete mode 100644 openmeetings-server/src/site/resources/images/cut_integration_api.png
 delete mode 100644 openmeetings-server/src/site/resources/images/cut_private_messages.png
 delete mode 100644 openmeetings-server/src/site/resources/images/cut_recordings_playback.png
 delete mode 100644 openmeetings-server/src/site/resources/images/desktopsharing.png
 delete mode 100644 openmeetings-server/src/site/resources/images/recordings_timeleine.png
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/administration-configuration.png
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/calendar-screenshot.png
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/conference-room-av-settings.jpg
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/file-explorer.png
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/integration-api.png
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/private-messages.png
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/recordings-playback.png
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/screenshot_OM6-2.jpg
 create mode 100644 openmeetings-server/src/site/resources/images/screenshots/share-screen.jpg
 copy {openmeetings-core => openmeetings-service}/src/main/java/module-info.java (56%)
 delete mode 100644 openmeetings-util/src/test/java/module-info.test
 rename openmeetings-util/src/test/java/org/apache/openmeetings/test/{NonJenkinsTests.java => NonJenkinsTest.java} (69%)
 create mode 100644 openmeetings-web/src/main/java/module-info.java
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupUploadResourceReference.java
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.html
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmableAjaxBorder.java
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationBehavior.java
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationConfig.java
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationDialog.java
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/ConfirmationHelper.java
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/confirmation/bootstrap-confirmation.js
 copy openmeetings-web/src/main/java/org/apache/openmeetings/web/{room/sidebar/UploadDialog.html => common/upload/UploadForm.html} (50%)
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/upload/UploadForm.java
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/upload/UploadResourceReference.java
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/common/upload/upload.js
 copy openmeetings-web/src/main/java/org/apache/openmeetings/web/room/{poll/PollResultsDialog.html => sidebar/RoomUploadForm.html} (51%)
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomUploadForm.java
 create mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/room-upload.js
 delete mode 100644 openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/upload.js
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-icon-180.png
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1125-2436.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1136-640.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1170-2532.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1242-2208.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1242-2688.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1284-2778.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1334-750.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1536-2048.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1620-2160.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1668-2224.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1668-2388.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-1792-828.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2048-1536.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2048-2732.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2160-1620.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2208-1242.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2224-1668.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2388-1668.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2436-1125.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2532-1170.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2688-1242.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2732-2048.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-2778-1284.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-640-1136.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-750-1334.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/apple-splash-828-1792.jpg
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/manifest-icon-192.maskable.png
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/manifest-icon-512.maskable.png
 create mode 100644 openmeetings-web/src/main/webapp/images/icons/openmeetings-logo-icon.svg
 delete mode 100644 openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{cli => cmdline}/TestAdmin.java (87%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{cli => cmdline}/TestPatcher.java (90%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{service/mail/template => web/service/mail}/TestEmailTemplate.java (78%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{service/mail/template/subject => web/service/mail}/TestSubjTemplate.java (79%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{AbstractJUnitDefaults.java => web/test/AbstractOmServerTest.java} (87%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{AbstractWicketTester.java => web/test/AbstractWicketTesterTest.java} (97%)
 copy openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedApplication.java => openmeetings-web/src/test/java/org/apache/openmeetings/web/test/IsolatedTest.java (85%)
 copy openmeetings-util/src/main/java/org/apache/openmeetings/util/logging/TimedApplication.java => openmeetings-web/src/test/java/org/apache/openmeetings/web/test/RegularTest.java (85%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/AbstractTestImport.java (88%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/TestExport.java (92%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/TestImport.java (97%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/TestImportCalendar.java (95%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/TestImportConfig.java (95%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/TestImportOld.java (95%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/TestImportRoom.java (93%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web/test}/backup/TestImportUser.java (95%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{db/dao => web/test/db}/TestFileDao.java (92%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{db/dao => web/test/db}/TestRoomDao.java (95%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{service/scheduler => web/test/job}/TestJob.java (93%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web}/util/TestDateTime.java (95%)
 rename openmeetings-web/src/test/java/org/apache/openmeetings/{ => web}/util/TestStoredFile.java (87%)
 create mode 100644 openmeetings-web/src/test/java/org/apache/openmeetings/webservice/CreateTomcatExtension.java
 copy openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/IRecordingConverter.java => openmeetings-webservice/src/main/java/module-info.java (71%)
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOListWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/AppointmentDTOWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/FileExplorerObjectWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/FileItemDTOListWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/FileItemDTOWrapper.java
 copy openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java => openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/GroupDTOListWrapper.java (50%)
 copy openmeetings-util/src/main/java/org/apache/openmeetings/util/ImportHelper.java => openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/HealthWrapper.java (54%)
 copy openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestInfoService.java => openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/InfoWrapper.java (55%)
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/RecordingDTOListWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/RoomDTOListWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/RoomDTOWrapper.java
 copy openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/{error/ServiceException.java => schema/ServiceResultWrapper.java} (54%)
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/UserDTOListWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/UserDTOWrapper.java
 create mode 100644 openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/schema/UserSearchResultWrapper.java
 copy openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/{UserParamConverter.java => OmExceptionHandler.java} (59%)
 rename THIRD-PARTY.properties => src/license/THIRD-PARTY.properties (82%)
 create mode 100644 src/license/license-template.ftl

[openmeetings] 01/01: Merge branch 'master' into java11-modules Some errors are fixed

Posted by so...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch java11-modules
in repository https://gitbox.apache.org/repos/asf/openmeetings.git

commit c824bb40d2c1d06a6853ecd24fae844428867d17
Merge: 6c00af6 299425e
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Dec 22 21:11:22 2021 +0700

    Merge branch 'master' into java11-modules
    Some errors are fixed

 .gitignore                                         |   3 +
 CHANGELOG.md                                       |  45 +-
 README.md                                          |  23 +-
 openmeetings-core/pom.xml                          |  18 -
 openmeetings-core/src/main/java/module-info.java   |  24 +-
 .../apache/openmeetings/core/mail/MailHandler.java |  30 +-
 .../org/apache/openmeetings/core/remote/KRoom.java |   2 +-
 .../core/util/ChatWebSocketHelper.java             |   2 +-
 .../openmeetings/core/util/WebSocketHelper.java    |   2 +-
 .../openmeetings/core/mail/TestMailSending.java    |  10 +-
 .../openmeetings/core/remote/BaseMockedTest.java   |  12 +-
 .../core/remote/TestNotConnectedMocked.java        |   2 +-
 .../core/remote/TestRecordingFlowMocked.java       |  10 +-
 .../core/remote/TestRoomFlowMocked.java            |  14 +-
 .../core/remote/TestSetupFlowMocked.java           |  20 +-
 openmeetings-db/pom.xml                            |  32 +-
 openmeetings-db/src/main/java/module-info.java     |  14 +-
 .../apache/openmeetings/{ => db}/IApplication.java |   2 +-
 .../apache/openmeetings/{ => db}/IWebSession.java  |   2 +-
 .../db/dao/basic/ConfigurationDao.java             |   2 +-
 .../openmeetings/db/dao/room/InvitationDao.java    |   8 +
 .../db/entity/calendar/Appointment.java            |   4 +
 .../openmeetings/db/entity/room/Invitation.java    |   4 +
 .../apache/openmeetings/db/entity/room/Room.java   |   4 +
 .../openmeetings/db/util/ApplicationHelper.java    |   4 +-
 .../openmeetings/db/util/ws/RoomMessage.java       |   1 +
 openmeetings-install/pom.xml                       |   5 +-
 .../src/main/java/module-info.java                 |  16 +-
 .../apache/openmeetings/backup/BackupExport.java   |  58 +-
 .../apache/openmeetings/backup/BackupImport.java   | 201 ++++---
 .../java/org/apache/openmeetings/cli/Admin.java    |  11 +-
 .../installation/ImportInitvalues.java             |   2 +-
 openmeetings-server/pom.xml                        |   6 +-
 .../src/site/markdown/LogoAndIcons.md              |  28 +
 .../Features_Screen_Conference_Room_Thumb.png      | Bin 230947 -> 0 bytes
 .../images/cut_administration_configuration.png    | Bin 203669 -> 0 bytes
 .../resources/images/cut_conference_room_om5.png   | Bin 209105 -> 0 bytes
 .../site/resources/images/cut_file_explorer.png    | Bin 390104 -> 0 bytes
 .../resources/images/cut_integrated_calendar.png   | Bin 55245 -> 0 bytes
 .../site/resources/images/cut_integration_api.png  | Bin 152877 -> 0 bytes
 .../site/resources/images/cut_private_messages.png | Bin 75489 -> 0 bytes
 .../resources/images/cut_recordings_playback.png   | Bin 311981 -> 0 bytes
 .../src/site/resources/images/desktopsharing.png   | Bin 35736 -> 0 bytes
 .../site/resources/images/recordings_timeleine.png | Bin 231190 -> 0 bytes
 .../screenshots/administration-configuration.png   | Bin 0 -> 434836 bytes
 .../images/screenshots/calendar-screenshot.png     | Bin 0 -> 234263 bytes
 .../screenshots/conference-room-av-settings.jpg    | Bin 0 -> 157090 bytes
 .../resources/images/screenshots/file-explorer.png | Bin 0 -> 646616 bytes
 .../images/screenshots/integration-api.png         | Bin 0 -> 251807 bytes
 .../images/screenshots/private-messages.png        | Bin 0 -> 312453 bytes
 .../images/screenshots/recordings-playback.png     | Bin 0 -> 527528 bytes
 .../images/screenshots/screenshot_OM6-2.jpg        | Bin 0 -> 136688 bytes
 .../resources/images/screenshots/share-screen.jpg  | Bin 0 -> 143210 bytes
 openmeetings-server/src/site/resources/js/site.js  |   2 +-
 openmeetings-server/src/site/site.xml              |   4 +-
 .../src/site/xdoc/BuildInstructions.xml            |  23 +-
 .../src/site/xdoc/ConfluencePlugin.xml             |   2 +-
 openmeetings-server/src/site/xdoc/JiraPlugin.xml   |   2 +-
 openmeetings-server/src/site/xdoc/NewsArchive.xml  |  32 +
 .../src/site/xdoc/RestAPISample.xml                | 121 +++-
 .../src/site/xdoc/WebappNamePath.xml               |   7 -
 openmeetings-server/src/site/xdoc/WebsiteGuide.xml |   2 +-
 openmeetings-server/src/site/xdoc/downloads.xml    |  30 +-
 openmeetings-server/src/site/xdoc/index.xml        | 107 ++--
 openmeetings-service/pom.xml                       |  10 -
 .../src/main/java/module-info.java                 |  35 +-
 .../service/calendar/caldav/IcalUtils.java         | 254 ++++----
 .../openmeetings/service/mail/EmailManager.java    |   2 +-
 .../mail/template/AbstractTemplatePanel.html       |   2 +-
 .../mail/template/AbstractTemplatePanel.java       |   4 +-
 .../service/mail/template/FeedbackTemplate.html    |   2 +-
 .../service/mail/template/InvitationTemplate.html  |   2 +-
 .../mail/template/RegisterUserTemplate.html        |   2 +-
 .../template/RequestContactConfirmTemplate.html    |   2 +-
 .../mail/template/RequestContactTemplate.html      |   2 +-
 .../mail/template/ResetPasswordTemplate.html       |   2 +-
 .../subject/AppointmentReminderTemplate.java       |   2 +-
 .../mail/template/subject/AppointmentTemplate.html |   2 +-
 .../mail/template/subject/AppointmentTemplate.java |   2 +-
 .../subject/CanceledAppointmentTemplate.java       |   2 +-
 .../subject/CreatedAppointmentTemplate.java        |   2 +-
 .../subject/InvitedAppointmentTemplate.html        |   2 +-
 .../subject/InvitedAppointmentTemplate.java        |   2 +-
 .../subject/NewGroupUsersNotificationTemplate.html |   2 +-
 .../subject/RecordingExpiringTemplate.html         |   2 +-
 .../subject/UpdatedAppointmentTemplate.java        |   2 +-
 .../service/room/InvitationManager.java            |  10 +-
 openmeetings-util/pom.xml                          |  40 +-
 openmeetings-util/src/main/java/module-info.java   |  30 +-
 .../openmeetings/util/OpenmeetingsVariables.java   |  19 +
 .../org/apache/openmeetings/util/StoredFile.java   |   2 +-
 .../openmeetings/util/crypt/CryptProvider.java     |   3 -
 .../util/mail/ByteArrayDataSource.java             |   2 +-
 .../apache/openmeetings/util/mail/IcalHandler.java |  25 +-
 .../{NonJenkinsTests.java => NonJenkinsTest.java}  |  13 +-
 openmeetings-web/pom.xml                           | 119 +---
 openmeetings-web/src/main/front/chat/src/chat.js   |   2 +-
 openmeetings-web/src/main/front/main/src/index.js  |   7 +
 .../src/main/front/main/src/omutils.js             |  25 +-
 .../src/main/front/room/src/quick-poll.js          |   4 +-
 .../src/main/front/room/src/user-list.js           |   3 +-
 openmeetings-web/src/main/front/room/src/video.js  |   5 -
 .../src/main/front/settings/src/video-util.js      |  16 +-
 openmeetings-web/src/main/front/wb/src/wb-tools.js |  16 +-
 openmeetings-web/src/main/java/module-info.java    |  50 ++
 .../openmeetings/web/admin/AdminActionsPanel.html  |   2 +-
 .../openmeetings/web/admin/AdminActionsPanel.java  |   2 +-
 .../openmeetings/web/admin/AdminBasePanel.html     |   4 +-
 .../openmeetings/web/admin/backup/BackupPanel.html |  67 ++-
 .../openmeetings/web/admin/backup/BackupPanel.java | 170 ++----
 .../backup/BackupUploadResourceReference.java      |  99 +++
 .../web/admin/configurations/ConfigsPanel.html     |   4 +-
 .../web/admin/connection/ConnectionsPanel.html     |   6 +-
 .../web/admin/connection/ConnectionsPanel.java     |   4 +-
 .../openmeetings/web/admin/email/EmailForm.java    |   2 +-
 .../openmeetings/web/admin/email/EmailPanel.html   |   6 +-
 .../openmeetings/web/admin/extra/ExtraPanel.html   |   4 +-
 .../web/admin/groups/GroupUsersPanel.html          |   6 +-
 .../web/admin/groups/GroupUsersPanel.java          |   6 +-
 .../openmeetings/web/admin/groups/GroupsPanel.html |   4 +-
 .../openmeetings/web/admin/groups/GroupsPanel.java |   2 +-
 .../web/admin/labels/AddLanguageDialog.html        |   2 +-
 .../openmeetings/web/admin/labels/LangPanel.html   |  26 +-
 .../openmeetings/web/admin/labels/LangPanel.java   |   2 +-
 .../openmeetings/web/admin/ldaps/LdapsPanel.html   |   4 +-
 .../openmeetings/web/admin/oauth/OAuthForm.java    |   2 +-
 .../openmeetings/web/admin/oauth/OAuthPanel.html   |   8 +-
 .../openmeetings/web/admin/rooms/RoomForm.java     |   8 +-
 .../openmeetings/web/admin/rooms/RoomsPanel.html   |  16 +-
 .../web/admin/users/PasswordDialog.html            |   4 +-
 .../openmeetings/web/admin/users/UserForm.html     |   2 +-
 .../openmeetings/web/admin/users/UserForm.java     |   4 +-
 .../openmeetings/web/admin/users/UsersPanel.html   |   4 +-
 .../openmeetings/web/admin/users/UsersPanel.java   |   2 +-
 .../apache/openmeetings/web/app/Application.java   |  71 +--
 .../web/app/Application.properties.xml             |  23 +-
 .../web/app/Application_ar.properties.xml          |  16 +-
 .../web/app/Application_bg.properties.xml          |  23 +-
 .../web/app/Application_bn.properties.xml          |  23 +-
 .../web/app/Application_ca.properties.xml          |  23 +-
 .../web/app/Application_cs.properties.xml          |  23 +-
 .../web/app/Application_da.properties.xml          |  23 +-
 .../web/app/Application_de.properties.xml          |  12 +-
 .../web/app/Application_el.properties.xml          |  23 +-
 .../web/app/Application_es.properties.xml          |  12 +-
 .../web/app/Application_fa.properties.xml          |  12 +-
 .../web/app/Application_fi.properties.xml          |  23 +-
 .../web/app/Application_fr.properties.xml          |  12 +-
 .../web/app/Application_gl.properties.xml          |  23 +-
 .../web/app/Application_hi.properties.xml          |  23 +-
 .../web/app/Application_hu.properties.xml          |  12 +-
 .../web/app/Application_in.properties.xml          |  23 +-
 .../web/app/Application_it.properties.xml          |  12 +-
 .../web/app/Application_iw.properties.xml          |  23 +-
 .../web/app/Application_ja.properties.xml          |  12 +-
 .../web/app/Application_ko.properties.xml          |  23 +-
 .../web/app/Application_ku.properties.xml          |  23 +-
 .../web/app/Application_lo.properties.xml          |  14 +-
 .../web/app/Application_nl.properties.xml          |  23 +-
 .../web/app/Application_pl.properties.xml          |  14 +-
 .../web/app/Application_pt.properties.xml          |  23 +-
 .../web/app/Application_pt_BR.properties.xml       |  14 +-
 .../web/app/Application_ru.properties.xml          |  12 +-
 .../web/app/Application_sk.properties.xml          |  23 +-
 .../web/app/Application_sv.properties.xml          |  21 +-
 .../web/app/Application_ta.properties.xml          |  23 +-
 .../web/app/Application_th.properties.xml          |  23 +-
 .../web/app/Application_tk.properties.xml          |  23 +-
 .../web/app/Application_tr.properties.xml          |  23 +-
 .../web/app/Application_uk.properties.xml          |  12 +-
 .../web/app/Application_ur.properties.xml          |  23 +-
 .../web/app/Application_zh_CN.properties.xml       |  12 +-
 .../web/app/Application_zh_TW.properties.xml       |  23 +-
 .../apache/openmeetings/web/app/WebSession.java    |   2 +-
 .../openmeetings/web/app/WhiteboardManager.java    |   2 +-
 .../apache/openmeetings/web/common/Captcha.html    |   2 +-
 .../openmeetings/web/common/ComunityUserForm.html  |   2 +-
 .../openmeetings/web/common/ErrorMessagePanel.html |   2 +-
 .../openmeetings/web/common/FormActionsPanel.html  |   2 +-
 .../openmeetings/web/common/FormActionsPanel.java  |   2 +-
 .../openmeetings/web/common/GeneralUserForm.html   |   2 +-
 .../openmeetings/web/common/GeneralUserForm.java   |   2 +-
 .../openmeetings/web/common/HeaderPanel.html       |   2 +-
 .../apache/openmeetings/web/common/ImagePanel.html |   2 +-
 .../openmeetings/web/common/InvitationDialog.html  |   2 +-
 .../openmeetings/web/common/InvitationDialog.java  |   1 +
 .../openmeetings/web/common/InvitationForm.html    |   2 +-
 .../openmeetings/web/common/InvitationForm.java    |   8 +-
 .../apache/openmeetings/web/common/MainPanel.html  |   2 +-
 .../apache/openmeetings/web/common/MainPanel.java  |   2 +-
 .../apache/openmeetings/web/common/NameDialog.html |   4 +-
 .../openmeetings/web/common/OmPagingNavigator.html |   2 +-
 .../web/common/PagedEntityListPanel.html           |   6 +-
 .../web/common/PagingNavigatorPanel.html           |   6 +-
 .../web/common/UploadableImagePanel.html           |   2 +-
 .../web/common/UploadableImagePanel.java           |   2 +-
 .../common/confirmation/ConfirmableAjaxBorder.html |  26 -
 .../common/confirmation/ConfirmableAjaxBorder.java |  74 ---
 .../common/confirmation/ConfirmationBehavior.java  | 112 ----
 .../common/confirmation/ConfirmationConfig.java    | 114 ----
 .../common/confirmation/ConfirmationDialog.java    |  77 ---
 .../common/confirmation/ConfirmationHelper.java    |  47 ++
 .../common/confirmation/bootstrap-confirmation.js  | 596 ------------------
 .../common/datetime/AbstractOmDateTimePicker.html  |   2 +-
 .../openmeetings/web/common/menu/MenuPanel.html    |   2 +-
 .../web/common/tree/ConvertingErrorsDialog.html    |   2 +-
 .../web/common/tree/FileItemPanel.html             |   2 +-
 .../web/common/tree/FileTreePanel.html             |  25 +-
 .../web/common/tree/FileTreePanel.java             |  67 +--
 .../openmeetings/web/common/tree/FolderPanel.html  |   2 +-
 .../web/common/tree/OmTreeProvider.java            |   2 +-
 .../openmeetings/web/common/tree/filetree.js       |  13 +-
 .../upload/UploadForm.html}                        |  38 +-
 .../openmeetings/web/common/upload/UploadForm.java | 120 ++++
 .../web/common/upload/UploadResourceReference.java | 148 +++++
 .../openmeetings/web/common/upload/upload.js       | 126 ++++
 .../openmeetings/web/pages/AccessDeniedPage.html   |   2 +-
 .../apache/openmeetings/web/pages/BasePage.html    |  34 +-
 .../apache/openmeetings/web/pages/BasePage.java    |   2 +-
 .../apache/openmeetings/web/pages/HashPage.html    |   2 +-
 .../openmeetings/web/pages/InternalErrorPage.html  |   2 +-
 .../web/pages/InvitationPasswordDialog.html        |   2 +-
 .../apache/openmeetings/web/pages/MainPage.html    |   2 +-
 .../openmeetings/web/pages/NotInitedPage.html      |   2 +-
 .../apache/openmeetings/web/pages/PrivacyPage.html |   2 +-
 .../apache/openmeetings/web/pages/ResetPage.html   |   2 +-
 .../web/pages/auth/ForgetPasswordDialog.html       |  16 +-
 .../web/pages/auth/ForgetPasswordDialog.java       |   2 +-
 .../web/pages/auth/RegisterDialog.html             |  34 +-
 .../web/pages/auth/ResetPasswordDialog.html        |   8 +-
 .../openmeetings/web/pages/auth/SignInDialog.html  |  36 +-
 .../openmeetings/web/pages/auth/SignInPage.html    |   2 +-
 .../web/pages/install/CongratulationsPanel.html    |   2 +-
 .../web/pages/install/InstallWizard$DbStep.html    |   2 +-
 .../pages/install/InstallWizard$InstallStep.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep1.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep2.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep3.html   |   2 +-
 .../pages/install/InstallWizard$ParamsStep4.html   |   2 +-
 .../pages/install/InstallWizard$WelcomeStep.html   |   2 +-
 .../web/pages/install/InstallWizard.java           |   8 +-
 .../web/pages/install/InstallWizardPage.html       |   2 +-
 .../openmeetings/web/room/EventDetailDialog.html   |   2 +-
 .../openmeetings/web/room/IconTextModal.html       |   2 +-
 .../apache/openmeetings/web/room/NetTestPanel.html |  34 +-
 .../openmeetings/web/room/NicknameDialog.html      |   2 +-
 .../apache/openmeetings/web/room/RoomPanel.html    |  30 +-
 .../apache/openmeetings/web/room/RoomPanel.java    |  61 +-
 .../web/room/RoomResourceReference.java            |   2 +-
 .../openmeetings/web/room/VideoSettings.html       |  12 +-
 .../web/room/activities/ActivitiesPanel.html       |   6 +-
 .../openmeetings/web/room/menu/ActionsSubMenu.java |   7 +-
 .../web/room/menu/RoomInvitationForm.html          |   2 +-
 .../web/room/menu/RoomInvitationForm.java          |  19 +-
 .../openmeetings/web/room/menu/RoomMenuPanel.html  |   4 +-
 .../openmeetings/web/room/menu/RoomMenuPanel.java  |  10 +-
 .../web/room/menu/SipDialerDialog.html             |   2 +-
 .../web/room/poll/CreatePollDialog.html            |  10 +-
 .../web/room/poll/PollResultsDialog.html           |   2 +-
 .../web/room/poll/PollResultsDialog.java           |   2 +-
 .../openmeetings/web/room/poll/VoteDialog.html     |   6 +-
 .../apache/openmeetings/web/room/raw-nettest.js    |   2 +-
 .../web/room/sidebar/RoomFilePanel.java            |   2 +-
 .../sidebar/RoomFileUploadResourceReference.java   | 143 ++---
 .../openmeetings/web/room/sidebar/RoomSidebar.html |  12 +-
 .../openmeetings/web/room/sidebar/RoomSidebar.java |   2 +-
 .../RoomUploadForm.html}                           |  32 +-
 .../web/room/sidebar/RoomUploadForm.java           |  93 +++
 .../web/room/sidebar/UploadDialog.html             |  26 +-
 .../web/room/sidebar/UploadDialog.java             |  53 +-
 .../openmeetings/web/room/sidebar/room-upload.js   |  14 +
 .../apache/openmeetings/web/room/sidebar/upload.js | 112 ----
 .../openmeetings/web/room/wb/InterviewWbPanel.html |   2 +-
 .../apache/openmeetings/web/room/wb/WbPanel.html   |  70 +--
 .../web/room/wb/WbWebSocketHelper.java             |   2 +-
 .../openmeetings/web/room/wb/WsMessageWb.java      |   2 +-
 .../openmeetings/web/room/wb/WsMessageWbFile.java  |   2 +-
 .../apache/openmeetings/web/user/AboutDialog.html  |  10 +-
 .../web/user/InviteUserMessageDialog.html          |   2 +-
 .../web/user/InviteUserToRoomDialog.html           |   2 +-
 .../openmeetings/web/user/MessageDialog.html       |   2 +-
 .../openmeetings/web/user/MessageDialog.java       |   5 +-
 .../openmeetings/web/user/OmWysiwygToolbar.html    |   6 +-
 .../openmeetings/web/user/UserInfoDialog.html      |   2 +-
 .../web/user/calendar/AppointmentDialog.html       |   8 +-
 .../web/user/calendar/AppointmentDialog.java       |   9 +-
 .../web/user/calendar/CalendarDialog.html          |   2 +-
 .../web/user/calendar/CalendarDialog.java          |   2 +-
 .../web/user/calendar/CalendarPanel.html           |   4 +-
 .../web/user/calendar/CalendarPanel.java           |   2 +-
 .../apache/openmeetings/web/user/chat/Chat.html    |   6 +-
 .../apache/openmeetings/web/user/chat/Chat.java    |   4 +-
 .../openmeetings/web/user/chat/ChatPanel.html      |   4 +-
 .../openmeetings/web/user/chat/ChatToolbar.html    |  16 +-
 .../openmeetings/web/user/chat/ChatToolbar.java    |   8 +-
 .../web/user/dashboard/MyRoomsWidgetView.html      |   2 +-
 .../web/user/dashboard/OmDashboardPanel.html       |   2 +-
 .../web/user/dashboard/RecentRoomsWidgetView.html  |   2 +-
 .../web/user/dashboard/RssWidgetView.html          |   6 +-
 .../web/user/dashboard/StartWidgetView.html        |  10 +-
 .../web/user/dashboard/WelcomeWidgetView.html      |   2 +-
 .../dashboard/admin/AdminCleanupInfoDialog.html    |   2 +-
 .../dashboard/admin/AdminCleanupInfoDialog.java    |   2 +-
 .../web/user/dashboard/admin/AdminWidgetView.html  |   2 +-
 .../dashboard/admin/CleanupEntityUnitPanel.html    |   2 +-
 .../web/user/dashboard/admin/CleanupUnitPanel.html |   2 +-
 .../apache/openmeetings/web/user/dashboard/rss.js  |   2 +-
 .../web/user/profile/ChangePasswordDialog.html     |   2 +-
 .../web/user/profile/EditProfileForm.html          |   2 +-
 .../web/user/profile/EditProfilePanel.html         |   2 +-
 .../web/user/profile/InvitationDetails.java        |   2 +-
 .../web/user/profile/InvitationsPanel.html         |  14 +-
 .../web/user/profile/InvitationsPanel.java         |   2 +-
 .../web/user/profile/MessagesContactsPanel.html    |   8 +-
 .../web/user/profile/MessagesContactsPanel.java    |   4 +-
 .../web/user/profile/UserProfilePanel.html         |   2 +-
 .../web/user/profile/UserSearchPanel.html          |   6 +-
 .../web/user/profile/UserSearchPanel.java          |   2 +-
 .../web/user/profile/WidgetsPanel.html             |   4 +-
 .../web/user/profile/WidgetsPanel.java             |   4 +-
 .../web/user/record/RecordingInvitationForm.html   |   2 +-
 .../web/user/record/RecordingInvitationForm.java   |   9 +-
 .../web/user/record/RecordingsPanel.html           |   4 +-
 .../web/user/record/RecordingsPanel.java           |   7 +-
 .../openmeetings/web/user/record/VideoInfo.html    |   2 +-
 .../openmeetings/web/user/record/VideoPlayer.html  |   2 +-
 .../openmeetings/web/user/rooms/RoomListPanel.html |   6 +-
 .../openmeetings/web/user/rooms/RoomListPanel.java |   2 +-
 .../openmeetings/web/user/rooms/RoomsPanel.html    |   4 +-
 .../openmeetings/web/user/rooms/RoomsPanel.java    |   2 +-
 .../web/user/rooms/RoomsSelectorPanel.html         |   4 +-
 .../web/user/rooms/RoomsSelectorPanel.java         |  11 +-
 .../web/user/rooms/RoomsTabbedPanel.html           |   2 +-
 .../web/util/GroupLogoResourceReference.java       |   4 +-
 .../web/util/ProfileImageResourceReference.java    |   9 +-
 .../apache/openmeetings/web/util/ThreadHelper.java |  13 +-
 .../web/util/UserDashboardPersister.java           |   2 +-
 .../util/logging/OpenMeetingsMetricsServlet.java   |   3 +-
 .../web/util/logging/TomcatGenericExports.java     |  13 +-
 .../classes/META-INF/oracle_persistence.xml        |   2 +-
 .../main/webapp/WEB-INF/classes/cxf-servlet.xml    |   1 +
 .../src/main/webapp/WEB-INF/classes/hazelcast.xml  |   2 +-
 .../src/main/webapp/css/raw-activities.css         |   2 +-
 openmeetings-web/src/main/webapp/css/raw-admin.css |   4 +-
 .../src/main/webapp/css/raw-calendar.css           |   7 +
 openmeetings-web/src/main/webapp/css/raw-chat.css  |   7 +-
 .../src/main/webapp/css/raw-general.css            |  22 +-
 openmeetings-web/src/main/webapp/css/raw-menu.css  |   6 +-
 .../src/main/webapp/css/raw-nettest.css            |  20 +-
 openmeetings-web/src/main/webapp/css/raw-room.css  | 111 ++--
 openmeetings-web/src/main/webapp/css/raw-tree.css  |  18 +-
 .../src/main/webapp/css/raw-variables.css          |   3 +-
 openmeetings-web/src/main/webapp/css/raw-wb.css    |   4 +-
 .../main/webapp/images/icons/apple-icon-180.png    | Bin 0 -> 10696 bytes
 .../webapp/images/icons/apple-splash-1125-2436.jpg | Bin 0 -> 66463 bytes
 .../webapp/images/icons/apple-splash-1136-640.jpg  | Bin 0 -> 24945 bytes
 .../webapp/images/icons/apple-splash-1170-2532.jpg | Bin 0 -> 69906 bytes
 .../webapp/images/icons/apple-splash-1242-2208.jpg | Bin 0 -> 72120 bytes
 .../webapp/images/icons/apple-splash-1242-2688.jpg | Bin 0 -> 75659 bytes
 .../webapp/images/icons/apple-splash-1284-2778.jpg | Bin 0 -> 78823 bytes
 .../webapp/images/icons/apple-splash-1334-750.jpg  | Bin 0 -> 31010 bytes
 .../webapp/images/icons/apple-splash-1536-2048.jpg | Bin 0 -> 88952 bytes
 .../webapp/images/icons/apple-splash-1620-2160.jpg | Bin 0 -> 95661 bytes
 .../webapp/images/icons/apple-splash-1668-2224.jpg | Bin 0 -> 99240 bytes
 .../webapp/images/icons/apple-splash-1668-2388.jpg | Bin 0 -> 101273 bytes
 .../webapp/images/icons/apple-splash-1792-828.jpg  | Bin 0 -> 32864 bytes
 .../webapp/images/icons/apple-splash-2048-1536.jpg | Bin 0 -> 83104 bytes
 .../webapp/images/icons/apple-splash-2048-2732.jpg | Bin 0 -> 130068 bytes
 .../webapp/images/icons/apple-splash-2160-1620.jpg | Bin 0 -> 89441 bytes
 .../webapp/images/icons/apple-splash-2208-1242.jpg | Bin 0 -> 60178 bytes
 .../webapp/images/icons/apple-splash-2224-1668.jpg | Bin 0 -> 92538 bytes
 .../webapp/images/icons/apple-splash-2388-1668.jpg | Bin 0 -> 92578 bytes
 .../webapp/images/icons/apple-splash-2436-1125.jpg | Bin 0 -> 50367 bytes
 .../webapp/images/icons/apple-splash-2532-1170.jpg | Bin 0 -> 53274 bytes
 .../webapp/images/icons/apple-splash-2688-1242.jpg | Bin 0 -> 57573 bytes
 .../webapp/images/icons/apple-splash-2732-2048.jpg | Bin 0 -> 121595 bytes
 .../webapp/images/icons/apple-splash-2778-1284.jpg | Bin 0 -> 60820 bytes
 .../webapp/images/icons/apple-splash-640-1136.jpg  | Bin 0 -> 30165 bytes
 .../webapp/images/icons/apple-splash-750-1334.jpg  | Bin 0 -> 37214 bytes
 .../webapp/images/icons/apple-splash-828-1792.jpg  | Bin 0 -> 44404 bytes
 .../images/icons/manifest-icon-192.maskable.png    | Bin 0 -> 11489 bytes
 .../images/icons/manifest-icon-512.maskable.png    | Bin 0 -> 40763 bytes
 .../webapp/images/icons/openmeetings-logo-icon.svg | 110 ++++
 .../apache/openmeetings/AbstractSpringTest.java    |  48 --
 .../calendar/TestAppointmentAddAppointment.java    |   4 +-
 .../calendar/TestAppointmentSchedulerTask.java     |   4 +-
 .../calendar/TestDatabaseStructureAppointment.java |   4 +-
 ...TestDatabaseStructureGetAppointmentByRange.java |   4 +-
 .../TestDatabaseStructureGetUserStart.java         |   4 +-
 .../TestDatabaseStructureMeetingMember.java        |   4 +-
 .../openmeetings/calendar/TestGetAppointment.java  |   4 +-
 .../openmeetings/calendar/TestOmCalendar.java      |   4 +-
 .../openmeetings/calendar/TestSendIcalMessage.java |  33 +-
 .../openmeetings/{cli => cmdline}/TestAdmin.java   |  16 +-
 .../openmeetings/{cli => cmdline}/TestPatcher.java |   9 +-
 .../org/apache/openmeetings/config/TestConfig.java |   4 +-
 .../openmeetings/core/file/TestFileProcessor.java  |   4 +-
 .../apache/openmeetings/domain/TestAddGroup.java   |   4 +-
 .../domain/TestUserGroupAggregation.java           |   4 +-
 .../openmeetings/invitiation/TestInvitation.java   |   6 +-
 .../org/apache/openmeetings/ldap/TestLdap.java     |   6 +-
 .../apache/openmeetings/smoke/TestSmokeBasic.java  |   4 +-
 .../apache/openmeetings/user/TestUserContact.java  |   6 +-
 .../apache/openmeetings/user/TestUserCount.java    |   4 +-
 .../apache/openmeetings/user/TestUserGroup.java    |   6 +-
 .../org/apache/openmeetings/userdata/TestAuth.java |   4 +-
 .../apache/openmeetings/userdata/TestLogin.java    |   4 +-
 .../org/apache/openmeetings/web/TestCalendar.java  |   8 +-
 .../org/apache/openmeetings/web/TestMainAreas.java |   6 +-
 .../org/apache/openmeetings/web/TestMainMenu.java  |   6 +-
 .../openmeetings/web/app/TestApplication.java      |   4 +-
 .../web/app/TestApplicationMocked.java             |   6 +-
 .../web/app/TestOmAuthenticationStrategy.java      |   4 +-
 .../web/app/TestUserManagerMocked.java             |   2 +
 .../openmeetings/web/app/TestWebSession.java       |   4 +-
 .../openmeetings/web/pages/TestHashPage.java       |   8 +-
 .../openmeetings/web/pages/auth/TestLoginUI.java   |   4 +-
 .../web/pages/install/TestInstall.java             |  26 +-
 .../service/mail}/TestEmailTemplate.java           |  12 +-
 .../service/mail}/TestSubjTemplate.java            |  14 +-
 .../test/AbstractOmServerTest.java}                |  34 +-
 .../test/AbstractWicketTesterTest.java}            |  10 +-
 .../test/IsolatedTest.java}                        |  18 +-
 .../apache/openmeetings/web/test/RegularTest.java  |  23 +-
 .../{ => web/test}/backup/AbstractTestImport.java  |  10 +-
 .../{ => web/test}/backup/TestExport.java          |  11 +-
 .../{ => web/test}/backup/TestImport.java          |   5 +-
 .../{ => web/test}/backup/TestImportCalendar.java  |   4 +-
 .../{ => web/test}/backup/TestImportConfig.java    |   4 +-
 .../{ => web/test}/backup/TestImportOld.java       |   8 +-
 .../{ => web/test}/backup/TestImportRoom.java      |   4 +-
 .../{ => web/test}/backup/TestImportUser.java      |   5 +-
 .../{db/dao => web/test/db}/TestFileDao.java       |   6 +-
 .../{db/dao => web/test/db}/TestRoomDao.java       |   6 +-
 .../scheduler => web/test/job}/TestJob.java        |  10 +-
 .../openmeetings/{ => web}/util/TestDateTime.java  |   6 +-
 .../{ => web}/util/TestStoredFile.java             |   7 +-
 .../webservice/AbstractWebServiceTest.java         |  50 +-
 .../webservice/CreateTomcatExtension.java          |  82 +++
 .../webservice/TestCalendarService.java            |  14 +-
 .../openmeetings/webservice/TestErrorService.java  |   2 +-
 .../openmeetings/webservice/TestFileService.java   |  13 +-
 .../openmeetings/webservice/TestGroupService.java  |   4 +-
 .../openmeetings/webservice/TestInfoService.java   |  31 +-
 .../webservice/TestRecordingService.java           |   2 +-
 .../openmeetings/webservice/TestUserService.java   |  24 +-
 openmeetings-web/src/test/jetty/web.xml            |   2 +-
 .../src/test/resources/logback-test.xml            |   1 +
 .../apache/openmeetings/backup/config/configs.xml  |   4 +-
 .../openmeetings/backup/config/skip/configs.xml    |   4 +-
 openmeetings-webservice/pom.xml                    | 107 +++-
 .../src/main/java/module-info.java                 |  13 +-
 .../webservice/CalendarWebService.java             | 128 +++-
 .../openmeetings/webservice/ErrorWebService.java   |  41 +-
 .../openmeetings/webservice/FileWebService.java    | 136 ++++-
 .../openmeetings/webservice/GroupWebService.java   | 113 +++-
 .../openmeetings/webservice/InfoWebService.java    |  67 ++-
 .../openmeetings/webservice/NetTestWebService.java |  50 +-
 .../webservice/RecordingWebService.java            |  68 ++-
 .../openmeetings/webservice/RoomWebService.java    | 202 ++++++-
 .../openmeetings/webservice/UserWebService.java    |  97 ++-
 .../openmeetings/webservice/WbWebService.java      |  72 ++-
 .../schema/AppointmentDTOListWrapper.java          | 157 +++++
 .../webservice/schema/AppointmentDTOWrapper.java   | 153 +++++
 .../schema/FileExplorerObjectWrapper.java          |  79 +++
 .../webservice/schema/FileItemDTOListWrapper.java  |  60 ++
 .../webservice/schema/FileItemDTOWrapper.java      |  56 ++
 .../webservice/schema/GroupDTOListWrapper.java     |  58 ++
 .../webservice/schema/HealthWrapper.java           |  34 +-
 .../webservice/schema/InfoWrapper.java             |  38 +-
 .../webservice/schema/RecordingDTOListWrapper.java |  63 ++
 .../webservice/schema/RoomDTOListWrapper.java      | 124 ++++
 .../webservice/schema/RoomDTOWrapper.java          |  64 ++
 .../webservice/schema/ServiceResultWrapper.java    |  44 +-
 .../webservice/schema/UserDTOListWrapper.java      | 111 ++++
 .../webservice/schema/UserDTOWrapper.java          |  68 +++
 .../webservice/schema/UserSearchResultWrapper.java |  94 +++
 .../webservice/util/OmExceptionHandler.java        |  20 +-
 pom.xml                                            | 666 +++++++++++++++++----
 .../license/THIRD-PARTY.properties                 |   3 +-
 src/license/license-template.ftl                   |  93 +++
 481 files changed, 6195 insertions(+), 3760 deletions(-)

diff --cc openmeetings-core/pom.xml
index 01d7b75,145b416..3cabb9d
--- a/openmeetings-core/pom.xml
+++ b/openmeetings-core/pom.xml
@@@ -84,20 -80,12 +80,8 @@@
  		<dependency>
  			<groupId>org.apache.directory.api</groupId>
  			<artifactId>api-all</artifactId>
- 			<version>${api-all.version}</version>
- 			<exclusions>
- 				<exclusion>
- 					<groupId>xml-apis</groupId>
- 					<artifactId>xml-apis</artifactId>
- 				</exclusion>
- 			</exclusions>
- 		</dependency>
- 		<dependency>
- 			<groupId>com.sun.mail</groupId>
- 			<artifactId>javax.mail</artifactId>
- 			<version>${javax.mail.version}</version>
  		</dependency>
  		<dependency>
 -			<groupId>com.sun.mail</groupId>
 -			<artifactId>javax.mail</artifactId>
 -		</dependency>
 -		<dependency>
  			<groupId>org.jodconverter</groupId>
  			<artifactId>jodconverter-local</artifactId>
  		</dependency>
diff --cc openmeetings-core/src/main/java/module-info.java
index 696b002,0000000..0a2eb16
mode 100644,000000..100644
--- a/openmeetings-core/src/main/java/module-info.java
+++ b/openmeetings-core/src/main/java/module-info.java
@@@ -1,44 -1,0 +1,52 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one
 + * or more contributor license agreements.  See the NOTICE file
 + * distributed with this work for additional information
 + * regarding copyright ownership.  The ASF licenses this file
 + * to you under the Apache License, Version 2.0 (the
 + * "License") +  you may not use this file except in compliance
 + * with the License.  You may obtain a copy of the License at
 + *
 + *   http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing,
 + * software distributed under the License is distributed on an
 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + * KIND, either express or implied.  See the License for the
 + * specific language governing permissions and limitations
 + * under the License.
 + */
- module apache.openmeetings.core {
- 	requires transitive apache.openmeetings.db;
++module org.apache.openmeetings.core {
++	exports org.apache.openmeetings.core.converter;
++	exports org.apache.openmeetings.core.data.file;
++	exports org.apache.openmeetings.core.ldap;
++	exports org.apache.openmeetings.core.mail;
++	exports org.apache.openmeetings.core.notifier;
++	exports org.apache.openmeetings.core.remote;
++	exports org.apache.openmeetings.core.rss;
++	exports org.apache.openmeetings.core.sip;
++	exports org.apache.openmeetings.core.util;
++
++	requires transitive org.apache.openmeetings.db;
++
++	requires transitive org.apache.wicket.ioc;
 +
 +	requires transitive org.apache.commons.io;
 +
 +	requires kurento.client;
 +	requires kurento.commons;
 +	requires kurento.jsonrpc.client;
- 	requires java.activation;
 +	requires com.google.gson;
- 	requires java.mail;
 +	requires java.xml;
 +	requires xstream;
 +
 +	requires jodconverter.core;
 +	requires jodconverter.local;
 +	requires org.apache.directory.ldap.api.all;
- 	requires tika.parsers;
 +	requires javax.inject;
- 	requires wicket.ioc;
 +	requires java.annotation;
- 	requires apache.openmeetings.util;
 +	requires asterisk.java;
 +	requires jain.sip.ri;
++	requires org.apache.tika.parser.image;
++	requires transitive jakarta.mail;
 +}
- 
diff --cc openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
index 5e42772,5e42772..445d1a6
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
@@@ -40,24 -40,24 +40,10 @@@ import java.util.Date
  import java.util.List;
  import java.util.Properties;
  
--import javax.activation.DataHandler;
--import javax.mail.Authenticator;
--import javax.mail.BodyPart;
--import javax.mail.Message;
--import javax.mail.MessagingException;
--import javax.mail.Multipart;
--import javax.mail.PasswordAuthentication;
--import javax.mail.Session;
--import javax.mail.Transport;
--import javax.mail.internet.InternetAddress;
--import javax.mail.internet.MimeBodyPart;
--import javax.mail.internet.MimeMessage;
--import javax.mail.internet.MimeMultipart;
--import javax.mail.util.ByteArrayDataSource;
--
  import org.apache.openmeetings.db.dao.basic.MailMessageDao;
  import org.apache.openmeetings.db.entity.basic.MailMessage;
  import org.apache.openmeetings.db.entity.basic.MailMessage.Status;
++import org.apache.openmeetings.util.mail.ByteArrayDataSource;
  import org.apache.openmeetings.util.mail.MailUtil;
  import org.apache.wicket.util.string.Strings;
  import org.slf4j.Logger;
@@@ -66,6 -66,6 +52,20 @@@ import org.springframework.beans.factor
  import org.springframework.core.task.TaskExecutor;
  import org.springframework.stereotype.Component;
  
++import jakarta.activation.DataHandler;
++import jakarta.mail.Authenticator;
++import jakarta.mail.BodyPart;
++import jakarta.mail.Message;
++import jakarta.mail.MessagingException;
++import jakarta.mail.Multipart;
++import jakarta.mail.PasswordAuthentication;
++import jakarta.mail.Session;
++import jakarta.mail.Transport;
++import jakarta.mail.internet.InternetAddress;
++import jakarta.mail.internet.MimeBodyPart;
++import jakarta.mail.internet.MimeMessage;
++import jakarta.mail.internet.MimeMultipart;
++
  /**
   *
   * @author swagner
diff --cc openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
index 04c9a08,04c9a08..7408229
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
@@@ -30,8 -30,8 +30,8 @@@ import java.util.concurrent.atomic.Atom
  import javax.inject.Inject;
  
  import org.apache.commons.lang3.time.FastDateFormat;
--import org.apache.openmeetings.IApplication;
  import org.apache.openmeetings.core.util.WebSocketHelper;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.dao.record.RecordingDao;
  import org.apache.openmeetings.db.entity.basic.Client;
  import org.apache.openmeetings.db.entity.basic.Client.Activity;
diff --cc openmeetings-core/src/main/java/org/apache/openmeetings/core/util/ChatWebSocketHelper.java
index 33d3a8e,33d3a8e..b92ab6d
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/ChatWebSocketHelper.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/ChatWebSocketHelper.java
@@@ -26,10 -26,10 +26,10 @@@ import java.util.List
  import java.util.function.BiConsumer;
  
  import org.apache.commons.lang3.time.FastDateFormat;
--import org.apache.openmeetings.IApplication;
  import org.apache.openmeetings.core.util.ws.WsMessageChat;
  import org.apache.openmeetings.core.util.ws.WsMessageChat2All;
  import org.apache.openmeetings.core.util.ws.WsMessageChat2User;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.entity.basic.ChatMessage;
  import org.apache.openmeetings.db.entity.room.Room.Right;
  import org.apache.openmeetings.db.entity.user.User;
diff --cc openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
index 16c3698,16c3698..3ef9357
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
@@@ -28,12 -28,12 +28,12 @@@ import java.util.function.Function
  import java.util.function.Predicate;
  import java.util.stream.Stream;
  
--import org.apache.openmeetings.IApplication;
  import org.apache.openmeetings.core.util.ws.WsMessageAll;
  import org.apache.openmeetings.core.util.ws.WsMessageRoom;
  import org.apache.openmeetings.core.util.ws.WsMessageRoomMsg;
  import org.apache.openmeetings.core.util.ws.WsMessageRoomOthers;
  import org.apache.openmeetings.core.util.ws.WsMessageUser;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.entity.basic.Client;
  import org.apache.openmeetings.db.entity.basic.IWsClient;
  import org.apache.openmeetings.db.manager.IClientManager;
diff --cc openmeetings-core/src/test/java/org/apache/openmeetings/core/mail/TestMailSending.java
index e2572e9,e2572e9..3533970
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/core/mail/TestMailSending.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/core/mail/TestMailSending.java
@@@ -26,15 -26,15 +26,15 @@@ import static org.apache.openmeetings.u
  import static org.apache.openmeetings.util.OpenmeetingsVariables.setSmtpUser;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  
--import javax.mail.Message;
--import javax.mail.Transport;
--import javax.mail.internet.InternetAddress;
--import javax.mail.internet.MimeMessage;
--
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
++import jakarta.mail.Message;
++import jakarta.mail.Transport;
++import jakarta.mail.internet.InternetAddress;
++import jakarta.mail.internet.MimeMessage;
++
  /**
   *
   * @author swagner
diff --cc openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
index e405d55,ff8549d..a27d3b5
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
@@@ -35,8 -35,8 +35,8 @@@ import java.util.Set
  
  import javax.inject.Inject;
  
--import org.apache.openmeetings.IApplication;
  import org.apache.openmeetings.core.util.WebSocketHelper;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.dao.label.LabelDao;
  import org.apache.openmeetings.db.entity.basic.IWsClient;
  import org.apache.openmeetings.db.entity.label.OmLanguage;
diff --cc openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRecordingFlowMocked.java
index 377d48b,b8ddf50..9391a8e
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRecordingFlowMocked.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRecordingFlowMocked.java
@@@ -28,7 -28,7 +28,7 @@@ import static org.mockito.Mockito.doRet
  import static org.mockito.Mockito.verify;
  import static org.mockito.Mockito.when;
  
--import org.apache.openmeetings.IApplication;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.dao.record.RecordingDao;
  import org.apache.openmeetings.db.dao.room.RoomDao;
  import org.apache.openmeetings.db.dao.user.UserDao;
diff --cc openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRoomFlowMocked.java
index d120f9b,005bbe4..9d06f7f
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRoomFlowMocked.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRoomFlowMocked.java
@@@ -26,7 -26,7 +26,7 @@@ import static org.mockito.Mockito.doRet
  import static org.mockito.Mockito.lenient;
  import static org.mockito.Mockito.mock;
  
--import org.apache.openmeetings.IApplication;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.dao.record.RecordingDao;
  import org.apache.openmeetings.db.dao.room.RoomDao;
  import org.apache.openmeetings.db.dao.user.UserDao;
diff --cc openmeetings-db/src/main/java/module-info.java
index aa1690d,0000000..62479df
mode 100644,000000..100644
--- a/openmeetings-db/src/main/java/module-info.java
+++ b/openmeetings-db/src/main/java/module-info.java
@@@ -1,63 -1,0 +1,67 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one
 + * or more contributor license agreements.  See the NOTICE file
 + * distributed with this work for additional information
 + * regarding copyright ownership.  The ASF licenses this file
 + * to you under the Apache License, Version 2.0 (the
 + * "License") +  you may not use this file except in compliance
 + * with the License.  You may obtain a copy of the License at
 + *
 + *   http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing,
 + * software distributed under the License is distributed on an
 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + * KIND, either express or implied.  See the License for the
 + * specific language governing permissions and limitations
 + * under the License.
 + */
- module apache.openmeetings.db {
- 	exports org.apache.openmeetings;
++module org.apache.openmeetings.db {
++	exports org.apache.openmeetings.db;
++	exports org.apache.openmeetings.db.bind;
++	exports org.apache.openmeetings.db.bind.adapter;
 +	exports org.apache.openmeetings.db.dao;
 +	exports org.apache.openmeetings.db.dao.basic;
 +	exports org.apache.openmeetings.db.dao.calendar;
 +	exports org.apache.openmeetings.db.dao.file;
 +	exports org.apache.openmeetings.db.dao.label;
 +	exports org.apache.openmeetings.db.dao.log;
 +	exports org.apache.openmeetings.db.dao.record;
 +	exports org.apache.openmeetings.db.dao.room;
 +	exports org.apache.openmeetings.db.dao.server;
 +	exports org.apache.openmeetings.db.dao.user;
 +	exports org.apache.openmeetings.db.dto.basic;
 +	exports org.apache.openmeetings.db.dto.calendar;
 +	exports org.apache.openmeetings.db.dto.file;
 +	exports org.apache.openmeetings.db.dto.record;
 +	exports org.apache.openmeetings.db.dto.room;
 +	exports org.apache.openmeetings.db.dto.user;
 +	exports org.apache.openmeetings.db.entity;
 +	exports org.apache.openmeetings.db.entity.basic;
 +	exports org.apache.openmeetings.db.entity.calendar;
 +	exports org.apache.openmeetings.db.entity.file;
 +	exports org.apache.openmeetings.db.entity.label;
 +	exports org.apache.openmeetings.db.entity.log;
 +	exports org.apache.openmeetings.db.entity.record;
 +	exports org.apache.openmeetings.db.entity.room;
 +	exports org.apache.openmeetings.db.entity.server;
 +	exports org.apache.openmeetings.db.entity.user;
 +	exports org.apache.openmeetings.db.manager;
++	exports org.apache.openmeetings.db.mapper;
 +	exports org.apache.openmeetings.db.util;
 +	exports org.apache.openmeetings.db.util.ws;
 +
- 	requires transitive apache.openmeetings.util;
++	requires transitive org.apache.openmeetings.util;
 +	requires transitive org.apache.wicket.request;
 +	requires transitive org.apache.wicket.websocket.core;
++	requires transitive org.apache.commons.text;
++
 +	requires transitive spring.beans;
 +	requires transitive spring.web;
 +	requires transitive spring.core;
++	requires transitive org.apache.openjpa;
 +
 +	requires spring.tx;
 +	requires javax.persistence;
- 	requires openjpa;
 +	requires java.xml.bind;
- 	requires org.apache.commons.text;
 +}
diff --cc openmeetings-db/src/main/java/org/apache/openmeetings/db/IApplication.java
index 45f9f91,45f9f91..5da9209
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/IApplication.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/IApplication.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings;
++package org.apache.openmeetings.db;
  
  import java.util.Locale;
  import java.util.Set;
diff --cc openmeetings-db/src/main/java/org/apache/openmeetings/db/IWebSession.java
index 6f20e00,6f20e00..eccfb7f
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/IWebSession.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/IWebSession.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings;
++package org.apache.openmeetings.db;
  
  import java.util.Locale;
  
diff --cc openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 71b8a8d,71b8a8d..be53b79
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@@ -41,7 -41,7 +41,7 @@@ import org.apache.openjpa.event.RemoteC
  import org.apache.openjpa.event.TCPRemoteCommitProvider;
  import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
  import org.apache.openjpa.persistence.OpenJPAPersistence;
--import org.apache.openmeetings.IApplication;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.dao.IDataProviderDao;
  import org.apache.openmeetings.db.dao.server.OAuth2Dao;
  import org.apache.openmeetings.db.dao.user.UserDao;
diff --cc openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ApplicationHelper.java
index 06d68b4,06d68b4..22f3510
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ApplicationHelper.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ApplicationHelper.java
@@@ -34,8 -34,8 +34,8 @@@ import javax.servlet.FilterConfig
  import javax.servlet.ServletContext;
  import javax.servlet.ServletContextEvent;
  
--import org.apache.openmeetings.IApplication;
--import org.apache.openmeetings.IWebSession;
++import org.apache.openmeetings.db.IApplication;
++import org.apache.openmeetings.db.IWebSession;
  import org.apache.openmeetings.db.dao.label.LabelDao;
  import org.apache.openmeetings.util.OMContextListener;
  import org.apache.wicket.Application;
diff --cc openmeetings-install/src/main/java/module-info.java
index 5987c83,b3174f1..85b0322
--- a/openmeetings-install/src/main/java/module-info.java
+++ b/openmeetings-install/src/main/java/module-info.java
@@@ -16,10 -16,14 +16,16 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
- module org.apache.openmeetings.util.test {
- 	requires transitive org.apache.openmeetings.util;
 -package org.apache.openmeetings;
++module org.apache.openmeetings.install {
++	exports org.apache.openmeetings.cli;
++	exports org.apache.openmeetings.backup;
++	exports org.apache.openmeetings.installation;
  
- 	//tests
- 	requires org.junit.jupiter.engine;
- 	requires org.junit.jupiter.api;
 -import org.junit.jupiter.api.Test;
 -
 -class TestConnection {
 -
 -	@Test
 -	void testNoop() {
 -		//no-op
 -	}
++	requires transitive org.apache.openmeetings.core;
++	requires java.xml.bind;
++	requires org.apache.commons.io;
++	requires java.desktop;
++	requires spring.context.support;
++	requires commons.cli;
++	requires quartz;
  }
diff --cc openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
index 6990b12,33942d8..57a5d0b
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
@@@ -381,10 -382,10 +382,7 @@@ public class BackupExport 
  		writeList(zos, "extraMenus.xml", EXTRA_MENU_LIST_NODE, list);
  	}
  
--	/*
--	 * Package private for tests
--	 */
--	static <T> ByteArrayOutputStream stream(String listElement, List<T> list) throws Exception {
++	public static <T> ByteArrayOutputStream stream(String listElement, List<T> list) throws Exception {
  		ByteArrayOutputStream baos = new ByteArrayOutputStream(10 * 1024); //10K
  		writeList(baos, listElement, list);
  		return baos;
diff --cc openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index 8a66ea9,ec17fa0..58e2609f
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@@ -480,15 -483,23 +483,23 @@@ public class BackupImport 
  					}
  				}
  			}
+ 			log.info("File explorer item import complete");
+ 			success = true;
+ 		} catch (Exception e) {
+ 			throw e;
+ 		} finally {
+ 			if (f != null) {
+ 				log.info("Clearing temp files ...");
+ 				FileUtils.deleteDirectory(f);
+ 			}
+ 			cleanup();
+ 			if (success) {
+ 				progress.set(100);
+ 			}
  		}
- 		log.info("File explorer item import complete, clearing temp files");
- 
- 		FileUtils.deleteDirectory(f);
- 		cleanup();
- 		progressHolder.setProgress(100);
  	}
  
--	void cleanup() {
++	public void cleanup() {
  		ldapMap.clear();
  		oauthMap.clear();
  		userMap.clear();
@@@ -505,7 -516,7 +516,7 @@@
  		messageFolderMap.put(TRASH_FOLDER_ID, TRASH_FOLDER_ID);
  	}
  
--	static BackupVersion getVersion(File base) {
++	public static BackupVersion getVersion(File base) {
  		List<BackupVersion> list = new ArrayList<>(1);
  		readList(base, "version.xml", VERSION_LIST_NODE, VERSION_NODE, BackupVersion.class, list::add, true);
  		return list.isEmpty() ? new BackupVersion() : list.get(0);
@@@ -514,7 -525,7 +525,7 @@@
  	/*
  	 * ##################### Import Configs
  	 */
--	void importConfigs(File base) throws Exception {
++	public void importConfigs(File base) throws Exception {
  		final Map<Integer, String> keyMap = new HashMap<>();
  		Arrays.stream(KeyEvent.class.getDeclaredFields())
  				.filter(fld -> fld.getName().startsWith("VK_"))
@@@ -577,7 -588,7 +588,7 @@@
  	/*
  	 * ##################### Import Groups
  	 */
--	void importGroups(File base) throws Exception {
++	public void importGroups(File base) throws Exception {
  		log.info("Configs import complete, starting group import");
  		readList(base, "organizations.xml", GROUP_LIST_NODE, GROUP_NODE, Group.class, g -> {
  			Long oldId = g.getId();
@@@ -590,7 -601,7 +601,7 @@@
  	/*
  	 * ##################### Import LDAP Configs
  	 */
--	Long importLdap(File base) {
++	public Long importLdap(File base) {
  		log.info("Groups import complete, starting LDAP config import");
  		Long[] defaultLdapId = {cfgDao.getLong(CONFIG_DEFAULT_LDAP_ID, null)};
  		readList(base, "ldapconfigs.xml", "ldapconfigs", "ldapconfig", LdapConfig.class, c -> {
@@@ -613,7 -624,7 +624,7 @@@
  	/*
  	 * ##################### OAuth2 servers
  	 */
--	void importOauth(File base) {
++	public void importOauth(File base) {
  		log.info("Ldap config import complete, starting OAuth2 server import");
  		readList(base, "oauth2servers.xml", OAUTH_LIST_NODE, OAUTH_NODE, OAuthServer.class
  				, s -> {
@@@ -629,7 -640,7 +640,7 @@@
  	/*
  	 * ##################### Import Users
  	 */
--	void importUsers(File base) throws Exception {
++	public void importUsers(File base) throws Exception {
  		log.info("OAuth2 servers import complete, starting user import");
  		String jNameTimeZone = getDefaultTimezone();
  		//add existent emails from database
@@@ -755,7 -766,7 +766,7 @@@
  	/*
  	 * ##################### Import Room Groups
  	 */
--	void importRoomGroups(File base) throws Exception {
++	public void importRoomGroups(File base) throws Exception {
  		log.info("Room import complete, starting room groups import");
  		Class<RoomGroup> eClazz = RoomGroup.class;
  		JAXBContext jc = JAXBContext.newInstance(eClazz);
@@@ -784,7 -795,7 +795,7 @@@
  	/*
  	 * ##################### Import Chat messages
  	 */
--	void importChat(File base) throws Exception {
++	public void importChat(File base) throws Exception {
  		log.info("Room groups import complete, starting chat messages import");
  		Class<ChatMessage> eClazz = ChatMessage.class;
  		JAXBContext jc = JAXBContext.newInstance(eClazz);
@@@ -807,7 -818,7 +818,7 @@@
  	/*
  	 * ##################### Import Calendars
  	 */
--	void importCalendars(File base) throws Exception {
++	public void importCalendars(File base) throws Exception {
  		log.info("Chat messages import complete, starting calendar import");
  		Class<OmCalendar> eClazz = OmCalendar.class;
  		JAXBContext jc = JAXBContext.newInstance(eClazz);
@@@ -825,7 -836,7 +836,7 @@@
  	/*
  	 * ##################### Import Appointments
  	 */
--	void importAppointments(File base) throws Exception {
++	public void importAppointments(File base) throws Exception {
  		log.info("Calendar import complete, starting appointement import");
  		Class<Appointment> eClazz = Appointment.class;
  		JAXBContext jc = JAXBContext.newInstance(eClazz);
@@@ -860,7 -871,7 +871,7 @@@
  	 *
  	 * Reminder Invitations will be NOT send!
  	 */
--	void importMeetingMembers(File base) throws Exception {
++	public void importMeetingMembers(File base) throws Exception {
  		log.info("Appointement import complete, starting meeting members import");
  		Class<MeetingMember> eClazz = MeetingMember.class;
  		JAXBContext jc = JAXBContext.newInstance(eClazz);
@@@ -953,7 -964,7 +964,7 @@@
  	/*
  	 * ##################### Import Recordings
  	 */
--	void importRecordings(File base) throws Exception {
++	public void importRecordings(File base) throws Exception {
  		log.info("Meeting members import complete, starting recordings server import");
  		final Map<Long, Long> folders = new HashMap<>();
  		saveTree(base, "flvRecordings.xml", RECORDING_LIST_NODE, RECORDING_NODE, Recording.class, folders, r -> {
@@@ -996,7 -1007,7 +1007,7 @@@
  	/*
  	 * ##################### Import Private Message Folders
  	 */
--	void importPrivateMsgFolders(File base) {
++	public void importPrivateMsgFolders(File base) {
  		log.info("Recording import complete, starting private message folder import");
  		readList(base, "privateMessageFolder.xml", MSG_FOLDER_LIST_NODE, MSG_FOLDER_NODE, PrivateMessageFolder.class, p -> {
  			Long folderId = p.getId();
@@@ -1141,7 -1152,7 +1152,7 @@@
  		}, true);
  	}
  
--	void importExtraMenus(File base) throws Exception {
++	public void importExtraMenus(File base) throws Exception {
  		log.info("Room files complete, starting extra menus import");
  		Class<ExtraMenu> eClazz = ExtraMenu.class;
  		JAXBContext jc = JAXBContext.newInstance(eClazz);
diff --cc openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
index e653c2a,8a36fb8..297784b
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
@@@ -105,7 -105,7 +105,7 @@@ public class Admin 
  	private File home;
  	private String step;
  
--	Admin() {
++	public Admin() {
  		cfg = new InstallationConfig();
  		opts = buildOptions();
  		step = "Initialization";
@@@ -227,8 -227,8 +227,7 @@@
  		return context;
  	}
  
--	//package private wrapper for testing
--	void process(String... args) throws Exception {
++	public void process(String... args) throws Exception {
  		CommandLineParser parser = new DefaultParser();
  		try {
  			cmdl = parser.parse(opts, args);
diff --cc openmeetings-service/src/main/java/module-info.java
index 696b002,68a8763..d39d422
--- a/openmeetings-service/src/main/java/module-info.java
+++ b/openmeetings-service/src/main/java/module-info.java
@@@ -16,29 -16,33 +16,22 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
- module apache.openmeetings.core {
- 	requires transitive apache.openmeetings.db;
 -package org.apache.openmeetings.rdc;
 -
 -import java.awt.event.KeyEvent;
 -
 -import org.junit.jupiter.api.Test;
 -import org.slf4j.Logger;
 -import org.slf4j.LoggerFactory;
 -
 -class TestKeyCodesNumber {
 -	private static final Logger log = LoggerFactory.getLogger(TestKeyCodesNumber.class);
 -
 -	@Test
 -	void testKeyCodes() {
 -		try {
 -
 -			for (int i = 1; i < 600; i++) {
 -
 -				String charText = KeyEvent.getKeyText(i);
 -
 -				log.debug("ERROR " + i + " " + charText);
 -
 -			}
 -
 -		} catch (Exception err) {
 -			log.error("[testKeyCodes]", err);
 -		}
 -
 -	}
 -
++module org.apache.openmeetings.service {
++	exports org.apache.openmeetings.service.calendar;
++	exports org.apache.openmeetings.service.calendar.caldav;
++	exports org.apache.openmeetings.service.mail;
++	exports org.apache.openmeetings.service.mail.template;
++	exports org.apache.openmeetings.service.mail.template.subject;
++	exports org.apache.openmeetings.service.room;
++	exports org.apache.openmeetings.service.scheduler;
 +
- 	requires transitive org.apache.commons.io;
++	requires transitive org.apache.openmeetings.core;
 +
- 	requires kurento.client;
- 	requires kurento.commons;
- 	requires kurento.jsonrpc.client;
- 	requires java.activation;
- 	requires com.google.gson;
- 	requires java.mail;
- 	requires java.xml;
- 	requires xstream;
++	requires transitive org.apache.wicket.spring;
 +
- 	requires jodconverter.core;
- 	requires jodconverter.local;
- 	requires org.apache.directory.ldap.api.all;
- 	requires tika.parsers;
- 	requires javax.inject;
- 	requires wicket.ioc;
++	requires org.apache.httpcomponents.httpcore;
++	requires org.apache.httpcomponents.httpclient;
++	requires caldav4j;
++	requires jackrabbit.webdav;
 +	requires java.annotation;
- 	requires apache.openmeetings.util;
- 	requires asterisk.java;
- 	requires jain.sip.ri;
  }
- 
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/IcalUtils.java
index 57a3ce2,57a3ce2..8250564
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/IcalUtils.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/IcalUtils.java
@@@ -20,20 -20,20 +20,26 @@@ package org.apache.openmeetings.service
  
  import static java.util.UUID.randomUUID;
  import static org.apache.openmeetings.db.util.TimezoneUtil.getTimeZone;
++import static org.apache.openmeetings.util.CalendarHelper.getZoneDateTime;
  import static org.apache.openmeetings.util.mail.MailUtil.MAILTO;
  import static org.apache.openmeetings.util.mail.MailUtil.SCHEME_MAILTO;
  
  import java.net.URI;
  import java.text.ParsePosition;
++import java.time.Instant;
++import java.time.ZonedDateTime;
++import java.time.temporal.Temporal;
  import java.util.ArrayList;
  import java.util.Date;
  import java.util.HashSet;
  import java.util.List;
  import java.util.Locale;
  import java.util.NoSuchElementException;
++import java.util.Optional;
  import java.util.Set;
  import java.util.TimeZone;
  import java.util.UUID;
++import java.util.concurrent.atomic.AtomicReference;
  
  import org.apache.commons.lang3.time.FastDateFormat;
  import org.apache.openmeetings.db.dao.user.UserDao;
@@@ -50,12 -50,12 +56,8 @@@ import org.springframework.beans.factor
  
  import net.fortuna.ical4j.model.Calendar;
  import net.fortuna.ical4j.model.Component;
--import net.fortuna.ical4j.model.ComponentList;
--import net.fortuna.ical4j.model.DateTime;
  import net.fortuna.ical4j.model.Parameter;
  import net.fortuna.ical4j.model.Property;
--import net.fortuna.ical4j.model.PropertyList;
--import net.fortuna.ical4j.model.Recur.Frequency;
  import net.fortuna.ical4j.model.TimeZoneRegistry;
  import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
  import net.fortuna.ical4j.model.component.CalendarComponent;
@@@ -73,6 -73,6 +75,7 @@@ import net.fortuna.ical4j.model.propert
  import net.fortuna.ical4j.model.property.Transp;
  import net.fortuna.ical4j.model.property.Uid;
  import net.fortuna.ical4j.model.property.Version;
++import net.fortuna.ical4j.transform.recurrence.Frequency;
  
  /**
   * Class which provides iCalendar Utilities.
@@@ -81,6 -81,6 +84,8 @@@
  @org.springframework.stereotype.Component
  public class IcalUtils {
  	private static final Logger log = LoggerFactory.getLogger(IcalUtils.class);
++	private static final TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
++	private static final List<String> acceptedFormats = List.of("yyyyMMdd'T'HHmmss", "yyyyMMdd'T'HHmmss'Z'", "yyyyMMdd");
  	public static final String PROD_ID = "-//Events Calendar//Apache Openmeetings//EN";
  
  	@Autowired
@@@ -119,7 -119,7 +124,7 @@@
  	 */
  	public List<Appointment> parseCalendartoAppointments(Calendar calendar, Long ownerId) {
  		List<Appointment> appointments = new ArrayList<>();
--		ComponentList<CalendarComponent> events = calendar.getComponents(Component.VEVENT);
++		List<CalendarComponent> events = calendar.getComponents(Component.VEVENT);
  		User owner = userDao.get(ownerId);
  
  		for (CalendarComponent event : events) {
@@@ -148,14 -148,14 +153,22 @@@
  		if (calendar == null) {
  			return a;
  		}
--		CalendarComponent event = calendar.getComponent(Component.VEVENT);
--		if (event != null) {
++		calendar.getComponent(Component.VEVENT).ifPresent(event -> {
  			a.setEtag(etag);
--			a = addVEventPropertiestoAppointment(a, event);
--		}
++			addVEventPropertiestoAppointment(a, event);
++		});;
  		return a;
  	}
  
++	private Date getDate(CalendarComponent event, String prop) {
++		return getDate(event.getProperty(prop).get());
++	}
++
++	@SuppressWarnings("unchecked")
++	private Date getDate(Property prop) {
++		return Date.from(Instant.from(((DateProperty<? extends Temporal>)prop).getDate()));
++	}
++
  	/**
  	 * Add properties from the Given VEvent Component to the Appointment
  	 *
@@@ -164,51 -164,51 +177,21 @@@
  	 * @return Updated Appointment
  	 */
  	private Appointment addVEventPropertiestoAppointment(Appointment a, CalendarComponent event) {
--		DateProperty dtstart = (DateProperty)event.getProperty(Property.DTSTART)
--				, dtend = (DateProperty)event.getProperty(Property.DTEND)
--				, dtstamp = (DateProperty)event.getProperty(Property.DTSTAMP)
--				, lastmod = (DateProperty)event.getProperty(Property.LAST_MODIFIED);
--		Property uid = event.getProperty(Property.UID),
--				description = event.getProperty(Property.DESCRIPTION),
--				summary = event.getProperty(Property.SUMMARY),
--				location = event.getProperty(Property.LOCATION),
--				organizer = event.getProperty(Property.ORGANIZER),
--				recur = event.getProperty(Property.RRULE);
--		PropertyList<Attendee> attendees = event.getProperties(Property.ATTENDEE);
--
--		if (uid != null) {
--			a.setIcalId(uid.getValue());
--		}
--
--		Date d = dtstart.getDate();
--		a.setStart(d);
--		if (dtend == null) {
--			a.setEnd(addTimetoDate(d, java.util.Calendar.HOUR_OF_DAY, 1));
--		} else {
--			a.setEnd(dtend.getDate());
--		}
--
--		a.setInserted(dtstamp.getDate());
--
--		if (lastmod != null) {
--			a.setUpdated(lastmod.getDate());
--		}
++		event.getProperty(Property.UID).ifPresent(uid -> a.setIcalId(uid.getValue()));
  
--		if (description != null) {
--			a.setDescription(description.getValue());
--		}
--
--		if (summary != null) {
--			a.setTitle(summary.getValue());
--		}
++		Date d = getDate(event, Property.DTSTART);
++		a.setStart(getDate(event, Property.DTSTART));
++		event.getProperty(Property.DTEND).ifPresentOrElse(dtend -> a.setEnd(getDate(dtend))
++				, () -> a.setEnd(addTimetoDate(d, java.util.Calendar.HOUR_OF_DAY, 1)));
  
--		if (location != null) {
--			a.setLocation(location.getValue());
--		}
++		event.getProperty(Property.DTSTAMP).ifPresent(dtstamp -> a.setInserted(getDate(dtstamp)));
++		event.getProperty(Property.LAST_MODIFIED).ifPresent(lastmod -> a.setUpdated(getDate(lastmod)));
++		event.getProperty(Property.DESCRIPTION).ifPresent(description -> a.setDescription(description.getValue()));
++		event.getProperty(Property.SUMMARY).ifPresent(summary -> a.setTitle(summary.getValue()));
++		event.getProperty(Property.LOCATION).ifPresent(location -> a.setLocation(location.getValue()));
  
--		if (recur != null) {
--			Parameter freq = recur.getParameter("FREQ");
--			if (freq != null) {
++		event.getProperty(Property.RRULE).ifPresent(recur -> {
++			recur.getParameters().getFirst("FREQ").ifPresent(freq -> {
  				if (freq.getValue().equals(Frequency.DAILY.name())) {
  					a.setIsDaily(true);
  				} else if (freq.getValue().equals(Frequency.WEEKLY.name())) {
@@@ -218,22 -218,22 +201,22 @@@
  				} else if (freq.getValue().equals(Frequency.YEARLY.name())) {
  					a.setIsYearly(true);
  				}
--			}
--		}
++			});
++		});
  
  		Set<MeetingMember> attList = a.getMeetingMembers() == null ? new HashSet<>()
  				: new HashSet<>(a.getMeetingMembers());
--		String organizerEmail = null;
++		AtomicReference<String> organizerEmail = new AtomicReference<>();
  
  		//Note this value can be repeated in attendees as well.
--		if (organizer != null) {
++		event.getProperty(Property.ORGANIZER).ifPresent(organizer -> {
  			URI uri = URI.create(organizer.getValue());
  
  			//If the value of the organizer is an email
  			if (SCHEME_MAILTO.equals(uri.getScheme())) {
  				String email = uri.getSchemeSpecificPart();
  
--				organizerEmail = email;
++				organizerEmail.set(email);
  				if (!email.equals(a.getOwner().getAddress().getEmail())) {
  					//Contact or exist and owner
  					User org = userDao.getByEmail(email);
@@@ -245,29 -245,29 +228,26 @@@
  					}
  				}
  			}
--		}
++		});
  
--		if (attendees != null && !attendees.isEmpty()) {
--			for (Property attendee : attendees) {
--				URI uri = URI.create(attendee.getValue());
--				if (SCHEME_MAILTO.equals(uri.getScheme())) {
--					String email = uri.getSchemeSpecificPart();
--
--					Role role = attendee.getParameter(Role.CHAIR.getName());
--					if (role != null && role.getValue().equals(Role.CHAIR.getValue())
--							&& email.equals(organizerEmail)) {
--						continue;
--					}
++		event.getProperties(Property.ATTENDEE).forEach(attendee -> {
++			URI uri = URI.create(attendee.getValue());
++			if (SCHEME_MAILTO.equals(uri.getScheme())) {
++				String email = uri.getSchemeSpecificPart();
  
--					User u = userDao.getByEmail(email);
--					if (u == null) {
--						u = userDao.getContact(email, a.getOwner());
--					}
--					attList.add(createMeetingMember(a, u));
++				Optional<Role> role = attendee.getParameters().getFirst(Role.CHAIR.getName());
++				if (role.isPresent() && role.get().getValue().equals(Role.CHAIR.getValue()) && email.equals(organizerEmail.get())) {
++					return;
++				}
  
++				User u = userDao.getByEmail(email);
++				if (u == null) {
++					u = userDao.getContact(email, a.getOwner());
  				}
++				attList.add(createMeetingMember(a, u));
++
  			}
--		}
++		});
  
  		a.setMeetingMembers(attList.isEmpty() ? null : new ArrayList<>(attList));
  
@@@ -302,16 -302,16 +282,15 @@@
  	 * @return Parsed TimeZone
  	 */
  	public TimeZone parseTimeZone(Calendar calendar, User owner) {
--		if (calendar != null) {
--			Component timezone = calendar.getComponent(Component.VTIMEZONE);
--			if (timezone != null) {
--				Property tzid = timezone.getProperty(Property.TZID);
--				if (tzid != null) {
--					return getTimeZone(tzid.getValue());
--				}
--			}
--		}
--		return getTimeZone(owner);
++		return Optional.ofNullable(calendar)
++				.map(cal -> cal.getComponent(Component.VTIMEZONE))
++				.filter(Optional::isPresent)
++				.map(Optional::get)
++				.map(timezone -> timezone.getProperty(Property.TZID))
++				.filter(Optional::isPresent)
++				.map(Optional::get)
++				.map(tzid -> getTimeZone(tzid.getValue()))
++				.orElse(getTimeZone(owner));
  	}
  
  	/**
@@@ -327,13 -327,13 +306,9 @@@
  			return null;
  		}
  
--		String[] acceptedFormats = {"yyyyMMdd'T'HHmmss", "yyyyMMdd'T'HHmmss'Z'", "yyyyMMdd"};
--		Parameter tzid = dt.getParameter(Parameter.TZID);
--		if (tzid == null) {
--			return parseDate(dt.getValue(), acceptedFormats, timeZone);
--		} else {
--			return parseDate(dt.getValue(), acceptedFormats, getTimeZone(tzid.getValue()));
--		}
++		return dt.getParameters().getFirst(Parameter.TZID)
++				.map(tzid -> parseDate(dt.getValue(), getTimeZone(tzid.getValue())))
++				.orElse(parseDate(dt.getValue(), timeZone));
  	}
  
  	/**
@@@ -346,14 -346,14 +321,14 @@@
  	 * @return <code>java.util.Date</code> representation of string or
  	 * <code>null</code> if the Date could not be parsed.
  	 */
--	public Date parseDate(String str, String[] patterns, TimeZone inTimeZone) {
++	public Date parseDate(String str, TimeZone inTimeZone) {
  		FastDateFormat parser;
  		Locale locale = WebSession.get().getLocale();
  
  		TimeZone timeZone = str.endsWith("Z") ? TimeZone.getTimeZone("UTC") : inTimeZone;
  
  		ParsePosition pos = new ParsePosition(0);
--		for (String pattern : patterns) {
++		for (String pattern : acceptedFormats) {
  			parser = FastDateFormat.getInstance(pattern, timeZone, locale);
  			pos.setIndex(0);
  			Date date = parser.parse(str, pos);
@@@ -373,7 -373,7 +348,7 @@@
  	 * @param amount Amount to be Added
  	 * @return New Date
  	 */
--	public Date addTimetoDate(Date date, int field, int amount) {
++	public Date addTimetoDate(Date date, int field, int amount) { //FIXME TODO
  		java.util.Calendar c = java.util.Calendar.getInstance();
  		c.setTime(date);
  		c.add(field, amount);
@@@ -381,37 -381,37 +356,6 @@@
  	}
  
  	/**
--	 * Methods to parse Appointment to iCalendar according RFC 2445
--	 *
--	 * @param appointment to be converted to iCalendar
--	 * @return iCalendar representation of the Appointment
--	 */
--	public Calendar parseAppointmenttoCalendar(Appointment appointment) {
--		String tzid = parseTimeZone(null, appointment.getOwner()).getID();
--
--		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
--
--		net.fortuna.ical4j.model.TimeZone timeZone = registry.getTimeZone(tzid);
--		if (timeZone == null) {
--			throw new NoSuchElementException("Unable to get time zone by id provided: " + tzid);
--		}
--
--		Calendar icsCalendar = new Calendar();
--		icsCalendar.getProperties().add(new ProdId(PROD_ID));
--		icsCalendar.getProperties().add(Version.VERSION_2_0);
--		icsCalendar.getProperties().add(CalScale.GREGORIAN);
--		icsCalendar.getComponents().add(timeZone.getVTimeZone());
--
--		DateTime start = new DateTime(appointment.getStart()), end = new DateTime(appointment.getEnd());
--
--		VEvent meeting = new VEvent(start, end, appointment.getTitle());
--		addVEventpropsfromAppointment(appointment, meeting);
--		icsCalendar.getComponents().add(meeting);
--
--		return icsCalendar;
--	}
--
--	/**
  	 * Adds the Appointment Properties to the given VEvent
  	 *
  	 * @param appointment Appointment whose properties are taken
@@@ -460,35 -460,35 +404,61 @@@
  		meeting.getProperties().add(organizer);
  	}
  
--	/**
--	 * Parses a List of Appointments into a VCALENDAR component.
--	 *
--	 * @param appointments List of Appointments for the Calendar
--	 * @param ownerId      Owner of the Appointments
--	 * @return VCALENDAR representation of the Appointments
--	 */
--	public Calendar parseAppointmentstoCalendar(List<Appointment> appointments, Long ownerId) {
--		String tzid = parseTimeZone(null, userDao.get(ownerId)).getID();
--
--		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
--
++	private net.fortuna.ical4j.model.TimeZone getTimazone(String tzid) {
  		net.fortuna.ical4j.model.TimeZone timeZone = registry.getTimeZone(tzid);
  		if (timeZone == null) {
  			throw new NoSuchElementException("Unable to get time zone by id provided: " + tzid);
  		}
++		return timeZone;
++	}
  
++	private Calendar getCalendar(net.fortuna.ical4j.model.TimeZone timeZone) {
  		Calendar icsCalendar = new Calendar();
  		icsCalendar.getProperties().add(new ProdId(PROD_ID));
  		icsCalendar.getProperties().add(Version.VERSION_2_0);
  		icsCalendar.getProperties().add(CalScale.GREGORIAN);
  		icsCalendar.getComponents().add(timeZone.getVTimeZone());
++		return icsCalendar;
++	}
  
--		for (Appointment appointment : appointments) {
--			DateTime start = new DateTime(appointment.getStart()), end = new DateTime(appointment.getEnd());
++	private void parseAppointment(Appointment appointment, Calendar icsCalendar, net.fortuna.ical4j.model.TimeZone timeZone) {
++		ZonedDateTime start = getZoneDateTime(appointment.getStart(), timeZone.getID());
++		ZonedDateTime end = getZoneDateTime(appointment.getEnd(), timeZone.getID());
  
--			VEvent meeting = new VEvent(start, end, appointment.getTitle());
--			addVEventpropsfromAppointment(appointment, meeting);
--			icsCalendar.getComponents().add(meeting);
++		VEvent meeting = new VEvent(start, end, appointment.getTitle());
++		addVEventpropsfromAppointment(appointment, meeting);
++		icsCalendar.getComponents().add(meeting);
++	}
++
++	/**
++	 * Methods to parse Appointment to iCalendar according RFC 2445
++	 *
++	 * @param appointment to be converted to iCalendar
++	 * @return iCalendar representation of the Appointment
++	 */
++	public Calendar parseAppointmenttoCalendar(Appointment appointment) {
++		net.fortuna.ical4j.model.TimeZone timeZone = getTimazone(parseTimeZone(null, appointment.getOwner()).getID());
++
++		Calendar icsCalendar = getCalendar(timeZone);
++		parseAppointment(appointment, icsCalendar, timeZone);
++
++		return icsCalendar;
++	}
++
++	/**
++	 * Parses a List of Appointments into a VCALENDAR component.
++	 *
++	 * @param appointments List of Appointments for the Calendar
++	 * @param ownerId      Owner of the Appointments
++	 * @return VCALENDAR representation of the Appointments
++	 */
++	public Calendar parseAppointmentstoCalendar(List<Appointment> appointments, Long ownerId) {
++		net.fortuna.ical4j.model.TimeZone timeZone = getTimazone(parseTimeZone(null, userDao.get(ownerId)).getID());
++
++		Calendar icsCalendar = getCalendar(timeZone);
++
++		for (Appointment appointment : appointments) {
++			parseAppointment(appointment, icsCalendar, timeZone);
  		}
  		return icsCalendar;
  	}
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java
index 593c7c7,593c7c7..ae91fa0
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java
@@@ -23,8 -23,8 +23,8 @@@ import static org.apache.openmeetings.u
  import static org.apache.openmeetings.util.OpenmeetingsVariables.getWicketApplicationName;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.isSendRegisterEmail;
  
--import org.apache.openmeetings.IApplication;
  import org.apache.openmeetings.core.mail.MailHandler;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.service.mail.template.RegisterUserTemplate;
  import org.apache.wicket.Application;
  import org.apache.wicket.request.mapper.parameter.PageParameters;
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
index 39c0d5f,39c0d5f..ddd8113
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
@@@ -22,8 -22,8 +22,8 @@@ import static org.apache.openmeetings.d
  
  import java.util.Locale;
  
--import org.apache.openmeetings.IApplication;
--import org.apache.openmeetings.IWebSession;
++import org.apache.openmeetings.db.IApplication;
++import org.apache.openmeetings.db.IWebSession;
  import org.apache.wicket.AttributeModifier;
  import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
  import org.apache.wicket.markup.html.panel.Panel;
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
index 08149d8,08149d8..04dc2de
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
@@@ -47,7 -47,7 +47,7 @@@ public class AppointmentReminderTemplat
  	}
  
  	@Override
--	String getPrefix() {
++	public String getPrefix() {
  		return app.getOmString("1158", locale);
  	}
  }
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentTemplate.java
index 8f40f5f,8f40f5f..d2ab5d8
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentTemplate.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentTemplate.java
@@@ -59,7 -59,7 +59,7 @@@ public abstract class AppointmentTempla
  		add(new Label("end", format(a.getEnd())));
  	}
  
--	abstract String getPrefix();
++	public abstract String getPrefix();
  
  	@Override
  	Fragment getSubjectFragment() {
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java
index ebf807b,ebf807b..fd32229
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java
@@@ -47,7 -47,7 +47,7 @@@ public class CanceledAppointmentTemplat
  	}
  
  	@Override
--	String getPrefix() {
++	public String getPrefix() {
  		return app.getOmString("1157", locale);
  	}
  }
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java
index 161d10f,161d10f..627b34e
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java
@@@ -47,7 -47,7 +47,7 @@@ public class CreatedAppointmentTemplat
  	}
  
  	@Override
--	String getPrefix() {
++	public String getPrefix() {
  		return app.getOmString("1151", locale);
  	}
  }
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/InvitedAppointmentTemplate.java
index 7f0b00d,7f0b00d..ac4823e
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/InvitedAppointmentTemplate.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/InvitedAppointmentTemplate.java
@@@ -28,7 -28,7 +28,7 @@@ public abstract class InvitedAppointmen
  	private static final long serialVersionUID = 1L;
  	protected final String invitorName;
  
--	InvitedAppointmentTemplate(Locale locale, Appointment a, TimeZone tz, String invitorName) {
++	public InvitedAppointmentTemplate(Locale locale, Appointment a, TimeZone tz, String invitorName) {
  		super(locale, a, tz);
  		this.invitorName = invitorName;
  	}
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java
index cb9b315,cb9b315..f6231d0
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java
@@@ -47,7 -47,7 +47,7 @@@ public class UpdatedAppointmentTemplat
  	}
  
  	@Override
--	String getPrefix() {
++	public String getPrefix() {
  		return app.getOmString("1155", locale);
  	}
  }
diff --cc openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
index 32822a2,32822a2..9397ce7
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
@@@ -22,12 -22,12 +22,13 @@@ import static java.util.UUID.randomUUID
  import static org.apache.openmeetings.db.entity.calendar.Appointment.allowedStart;
  import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
  import static org.apache.openmeetings.db.util.TimezoneUtil.getTimeZone;
++import static org.apache.openmeetings.util.CalendarHelper.getZoneDateTime;
  
  import java.util.Date;
  import java.util.TimeZone;
  
--import org.apache.openmeetings.IApplication;
  import org.apache.openmeetings.core.mail.MailHandler;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.dao.room.InvitationDao;
  import org.apache.openmeetings.db.entity.basic.MailMessage;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
@@@ -117,14 -117,14 +118,15 @@@ public class InvitationManager implemen
  			if (invitationLink != null) {
  				desc += (desc.isEmpty() ? "" : "\n\n\n") + invitationLink;
  			}
++			String tzid = getTimeZone(owner).getID();
  			IcalHandler handler = new IcalHandler(MessageType.CANCEL == type ? IcalHandler.ICAL_METHOD_CANCEL : IcalHandler.ICAL_METHOD_REQUEST)
--					.createVEvent(getTimeZone(owner).getID(), a.getStart(), a.getEnd(), a.getTitle())
++					.createVEvent(getZoneDateTime(a.getStart(), tzid), getZoneDateTime(a.getEnd(), tzid), a.getTitle())
  					.addOrganizer(replyToEmail, owner.getDisplayName())
  					.setUid(a.getIcalId())
  					.addAttendee(email, i.getInvitee().getDisplayName(), isOwner)
--					.setCreated(a.getInserted())
++					.setCreated(getZoneDateTime(a.getInserted(), tzid))
  					.setDescription(desc)
--					.setModified(a.getUpdated())
++					.setModified(getZoneDateTime(a.getUpdated(), tzid))
  					.setLocation(a.getLocation())
  					.setSequence(0)
  					.build();
diff --cc openmeetings-util/pom.xml
index 5ac31ed,f066117..0dade93
--- a/openmeetings-util/pom.xml
+++ b/openmeetings-util/pom.xml
@@@ -146,8 -128,8 +128,18 @@@
  			<artifactId>aspectjtools</artifactId>
  		</dependency>
  		<dependency>
++			<groupId>com.sun.mail</groupId>
++			<artifactId>jakarta.mail</artifactId>
++		</dependency>
++		<dependency>
  			<groupId>io.prometheus</groupId>
--			<artifactId>simpleclient</artifactId>
++			<artifactId>simpleclient_servlet</artifactId>
++		</dependency>
++		<dependency>
++			<groupId>org.junit.jupiter</groupId>
++			<artifactId>junit-jupiter-engine</artifactId>
++			<scope>compile</scope>
++			<optional>true</optional>
  		</dependency>
  	</dependencies>
  </project>
diff --cc openmeetings-util/src/main/java/module-info.java
index ecd5250,0000000..2a5c013
mode 100644,000000..100644
--- a/openmeetings-util/src/main/java/module-info.java
+++ b/openmeetings-util/src/main/java/module-info.java
@@@ -1,48 -1,0 +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.
 + */
 +module org.apache.openmeetings.util {
++	exports org.apache.openmeetings.util;
++	exports org.apache.openmeetings.util.crypt;
++	exports org.apache.openmeetings.util.mail;
++	exports org.apache.openmeetings.util.process;
++	exports org.apache.openmeetings.util.ws;
++	exports org.apache.openmeetings.util.logging;
++
 +	requires transitive org.apache.wicket.util;
 +	requires transitive org.apache.wicket.core;
 +	requires transitive org.apache.wicket.extensions;
 +
 +	requires transitive org.apache.commons.codec;
 +	requires transitive org.apache.commons.lang3;
++	requires transitive org.apache.tika.core;
++
++	requires transitive jakarta.activation;
 +
 +	requires transitive com.github.openjson;
 +	requires transitive org.slf4j;
 +	requires transitive org.bouncycastle.provider;
- 	requires transitive jakarta.activation;
 +	requires transitive org.mnode.ical4j.core;
- 	requires org.aspectj.tools;
- 	requires transitive javax.servlet.api;
- 	requires transitive tika.core;
 +	requires transitive spring.context;
- 	requires transitive logback.classic;
- 	requires transitive logback.core;
++	requires transitive ch.qos.logback.classic;
++	requires transitive ch.qos.logback.core;
 +	requires transitive dom4j;
- 	requires transitive jcip.annotations;
- 	requires simpleclient;
- 
- 	exports org.apache.openmeetings.util;
- 	exports org.apache.openmeetings.util.crypt;
- 	exports org.apache.openmeetings.util.mail;
- 	exports org.apache.openmeetings.util.process;
- 	exports org.apache.openmeetings.util.ws;
- 	exports org.apache.openmeetings.util.logging;
++	requires javax.servlet.api;
++	requires simpleclient.servlet;
++	requires org.aspectj.tools;
 +}
diff --cc openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java
index 8910122,8910122..7ad0ff6
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java
@@@ -26,7 -26,7 +26,7 @@@ import java.io.IOException
  import java.io.InputStream;
  import java.io.OutputStream;
  
--import javax.activation.DataSource;
++import jakarta.activation.DataSource;
  
  public class ByteArrayDataSource implements DataSource {
  	private byte[] data; // data
diff --cc openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java
index 8314358,8314358..e4a498f
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java
@@@ -24,7 -24,7 +24,7 @@@ import java.io.ByteArrayOutputStream
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.net.URI;
--import java.util.Date;
++import java.time.ZonedDateTime;
  import java.util.NoSuchElementException;
  
  import org.slf4j.Logger;
@@@ -32,7 -32,7 +32,6 @@@ import org.slf4j.LoggerFactory
  
  import net.fortuna.ical4j.data.CalendarOutputter;
  import net.fortuna.ical4j.model.Calendar;
--import net.fortuna.ical4j.model.DateTime;
  import net.fortuna.ical4j.model.TimeZone;
  import net.fortuna.ical4j.model.TimeZoneRegistry;
  import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
@@@ -66,6 -66,6 +65,7 @@@ import net.fortuna.ical4j.validate.Vali
   */
  public class IcalHandler {
  	private static final Logger log = LoggerFactory.getLogger(IcalHandler.class);
++	private static final TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
  	static {
  		System.setProperty("net.fortuna.ical4j.timezone.update.enabled", "false");
  		System.setProperty("net.fortuna.ical4j.timezone.cache.impl", "net.fortuna.ical4j.util.MapTimeZoneCache");
@@@ -99,32 -99,32 +99,25 @@@
  		icsCalendar.getProperties().add(method);
  	}
  
--	public IcalHandler createVEvent(String tz, Date startDate, Date endDate, String name) {
--		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
--
--		timeZone = registry.getTimeZone(tz);
++	public IcalHandler createVEvent(ZonedDateTime start, ZonedDateTime end, String name) {
++		timeZone = registry.getTimeZone(start.getZone().getId());
  		if (timeZone == null) {
--			throw new NoSuchElementException("Unable to get time zone by id provided: " + tz);
++			throw new NoSuchElementException("Unable to get time zone by id provided: " + start.getZone());
  		}
  
--		DateTime start = new DateTime(startDate);
--		start.setTimeZone(timeZone);
--		DateTime end = new DateTime(endDate);
--		end.setTimeZone(timeZone);
--
  		meeting = new VEvent(start, end, name);
  		meeting.getProperties().add(Transp.OPAQUE);
  		meeting.getProperties().add(Status.VEVENT_CONFIRMED);
  		return this;
  	}
  
--	public IcalHandler setCreated(Date date) {
--		meeting.getProperties().add(new Created(new DateTime(date)));
++	public IcalHandler setCreated(ZonedDateTime date) {
++		meeting.getProperties().add(new Created(date.toInstant()));
  		return this;
  	}
  
--	public IcalHandler setModified(Date date) {
--		meeting.getProperties().add(new LastModified(new DateTime(date == null ? new Date() : date)));
++	public IcalHandler setModified(ZonedDateTime date) {
++		meeting.getProperties().add(new LastModified((date == null ? ZonedDateTime.now() : date).toInstant()));
  		return this;
  	}
  
diff --cc openmeetings-web/pom.xml
index 1255216,02fe510..49fe8eb
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@@ -622,17 -579,16 +579,8 @@@
  			<artifactId>commons-lang3</artifactId>
  		</dependency>
  		<dependency>
--			<groupId>io.prometheus</groupId>
--			<artifactId>simpleclient_servlet</artifactId>
--		</dependency>
--		<dependency>
--			<groupId>org.apache.tomcat</groupId>
--			<artifactId>tomcat-catalina</artifactId>
--		</dependency>
--		<dependency>
  			<groupId>org.webjars</groupId>
  			<artifactId>jquery-ui-touch-punch</artifactId>
- 			<version>0.2.3-2</version>
  		</dependency>
  		<!-- Test dependencies -->
  		<dependency>
diff --cc openmeetings-web/src/main/java/module-info.java
index 0000000,0000000..ad9ddf2
new file mode 100644
--- /dev/null
+++ b/openmeetings-web/src/main/java/module-info.java
@@@ -1,0 -1,0 +1,50 @@@
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you under the Apache License, Version 2.0 (the
++ * "License") +  you may not use this file except in compliance
++ * with the License.  You may obtain a copy of the License at
++ *
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing,
++ * software distributed under the License is distributed on an
++ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++ * KIND, either express or implied.  See the License for the
++ * specific language governing permissions and limitations
++ * under the License.
++ */
++module org.apache.openmeetings.web {
++	requires org.apache.openmeetings.service;
++	requires org.apache.wicket.auth.roles;
++	requires org.apache.wicket.devutils;
++
++	requires wicketstuff.dashboard.core;
++	requires wicketstuff.datastore.hazelcast;
++	requires wicketstuff.select2;
++	requires wicketstuff.urlfragment;
++
++	requires wicket.bootstrap.extensions;
++	requires wicket.bootstrap.core;
++	requires wicket.bootstrap.themes;
++
++	requires org.danekja.jdk.serializable.functional;
++	requires wicket.jquery.ui;
++	requires wicket.jquery.ui.calendar;
++	requires wicket.jquery.ui.core;
++	requires wicket.jquery.ui.plugins;
++	requires javax.websocket.api;
++	requires com.hazelcast.core;
++	requires java.management;
++	requires simpleclient.servlet;
++	requires commons.fileupload;
++	requires org.apache.openmeetings.install;
++	requires spring.orm;
++	requires java.net.http;
++	requires wicket.webjars;
++	requires jqplot;
++	requires jqplot4java;
++	requires java.ws.rs;
++}
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
index 9132b84,39160b7..2da273b
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@@ -18,9 -18,9 +18,9 @@@
   */
  package org.apache.openmeetings.web.admin.connection;
  
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
- import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelConfirm;
+ import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelConfirm;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  
  import java.lang.reflect.Field;
  import java.lang.reflect.Modifier;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
index a72f18f,a72f18f..53e64fe
--- 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
@@@ -19,9 -19,9 +19,9 @@@
  package org.apache.openmeetings.web.admin.groups;
  
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
++import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.getDefaultGroup;
--import static org.apache.openmeetings.web.app.WebSession.getRights;
  
  import java.util.Iterator;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
index 93cde50,2219359..25217e1
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
@@@ -19,8 -19,8 +19,8 @@@
  package org.apache.openmeetings.web.admin.labels;
  
  import static java.time.Duration.ZERO;
 -import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
+ import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
 +import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
- import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
  import static org.apache.wicket.request.resource.ContentDisposition.ATTACHMENT;
  
  import java.io.IOException;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index b93776d,afcb9b9..6f688a1
--- 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
@@@ -19,13 -19,13 +19,13 @@@
  package org.apache.openmeetings.web.admin.rooms;
  
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isRecordingsEnabled;
  import static org.apache.openmeetings.web.admin.AdminUserChoiceProvider.PAGE_SIZE;
  import static org.apache.openmeetings.web.app.Application.kickUser;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.web.common.BasePanel.EVT_CHANGE;
- import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+ import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isRecordingsEnabled;
  import static org.apache.wicket.validation.validator.StringValidator.maximumLength;
  
  import java.util.ArrayList;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
index b60059c,b60059c..6b561cf
--- 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
@@@ -23,10 -23,10 +23,10 @@@ import static org.apache.openmeetings.d
  import static org.apache.openmeetings.db.entity.user.User.DISPLAY_NAME_NA;
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.getMinLoginLength;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isSendRegisterEmail;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.getMinLoginLength;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isSendRegisterEmail;
  import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
  
  import java.util.ArrayList;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
index 6dba04d,6dba04d..eb701b8
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
@@@ -19,8 -19,8 +19,8 @@@
  package org.apache.openmeetings.web.admin.users;
  
  import static org.apache.openmeetings.db.dao.user.UserDao.getNewUserInstance;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  
  import org.apache.openmeetings.db.dao.user.UserDao;
  import org.apache.openmeetings.db.entity.user.User;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index a173df2,4dbb3b8..c196086
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@@ -45,10 -46,10 +46,10 @@@ import java.util.stream.Stream
  
  import javax.websocket.WebSocketContainer;
  
--import org.apache.openmeetings.IApplication;
  import org.apache.openmeetings.core.sip.SipManager;
  import org.apache.openmeetings.core.util.ChatWebSocketHelper;
  import org.apache.openmeetings.core.util.WebSocketHelper;
++import org.apache.openmeetings.db.IApplication;
  import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
  import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
  import org.apache.openmeetings.db.dao.label.LabelDao;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
index f64b4a1,957ee1d..d6076f2
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
index 89cd296,cad7b48..4d60bfb
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
@@@ -763,7 -763,7 +763,7 @@@ see https://openmeetings.apache.org/Lan
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
index 9e2563d,160dc48..ab8effa
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
index 531ec4d,a4894e6..507b7e5
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
index 15bc331,7882279..c40b777
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
index 9320649,3bb47dc..870fabb
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
index afc6e54,0d0afd6..4709e5e
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
index 69025b3,b5cf43e..be6c68b
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
index 413ac0a,db09cee..3bbf79d
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
index e0ac9f7,b9f9087..7c91881
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
index c6f6ba4,491aaff..501f548
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
index 9bb7d65,e4378c8..47cb519
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_iw.properties.xml
index f2c325f,8fd939c..b69d03c
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_iw.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_iw.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
index d542c70,707be0e..d569f96
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ku.properties.xml
index 729ecd5,1386623..1d05a23
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ku.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ku.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_lo.properties.xml
index 3423fcc,33ff47e..6b75be1
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_lo.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_lo.properties.xml
@@@ -763,7 -763,7 +763,7 @@@ see https://openmeetings.apache.org/Lan
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
index 14d1726,6f31705..10b5551
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
index 404f951,6d7df1b..2834dcd
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
@@@ -763,7 -763,7 +763,7 @@@ see https://openmeetings.apache.org/Lan
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
index b8076ac,bfe087d..57d96f9
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
index 1679a06,62eb69d..4c671d8
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
@@@ -763,7 -763,7 +763,7 @@@ see https://openmeetings.apache.org/Lan
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
index 15663b0,4912e6e..ef1cfa7
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
index 6a5e248,b6ca04e..140661a
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
@@@ -765,7 -774,7 +774,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
index 281e418,891c8e7..59fdcaf
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tk.properties.xml
index b273337,06bd4cb..aa96294
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tk.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
index 169e6cb,8dd2585..d50261d
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ur.properties.xml
index f64b4a1,957ee1d..d6076f2
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ur.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ur.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
index 01db3e1,5f3b4ba..5dabc7f
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
@@@ -763,7 -772,7 +772,7 @@@ To update your system
  	<entry key="install.wizard.params.step4.crypt"><![CDATA[Crypt Type]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName"><![CDATA[Crypt Class]]></entry>
  	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[You can use this default crypt type which is equal to
--	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.util.crypt.SCryptImplementation</b>
++	RFC 7914 - The scrypt Password-Based Key Derivation Function:<b>org.apache.openmeetings.web.util.crypt.SCryptImplementation</b>
  		for more information or to write your own Crypt-Style see: <a
  		href="https://openmeetings.apache.org/CustomCryptMechanism.html"
  		target="_blank">Custom Crypt Mechanism</a> You can edit this
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
index a4df318,a4df318..6621ed0
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
@@@ -41,8 -41,8 +41,8 @@@ import java.util.Set
  import java.util.TimeZone;
  
  import org.apache.commons.lang3.time.FastDateFormat;
--import org.apache.openmeetings.IWebSession;
  import org.apache.openmeetings.core.ldap.LdapLoginManager;
++import org.apache.openmeetings.db.IWebSession;
  import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
  import org.apache.openmeetings.db.dao.label.LabelDao;
  import org.apache.openmeetings.db.dao.room.InvitationDao;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java
index 6d24e77,6d24e77..1be3d6a
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java
@@@ -20,8 -20,8 +20,8 @@@ package org.apache.openmeetings.web.app
  
  import static org.apache.openmeetings.db.dto.room.Whiteboard.ATTR_SLIDE;
  import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.getDefaultLang;
  import static org.apache.openmeetings.web.room.wb.WbWebSocketHelper.sendWbAll;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.getDefaultLang;
  
  import java.util.ArrayList;
  import java.util.HashMap;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
index 75c1811,75c1811..9222ce8
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
@@@ -19,10 -19,10 +19,10 @@@
  package org.apache.openmeetings.web.common;
  
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isDisplayNameEditable;
  import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isDisplayNameEditable;
  
  import java.util.ArrayList;
  import java.util.List;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
index 8ea79c8,21aea80..8ba2189
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
@@@ -21,15 -21,16 +21,16 @@@ package org.apache.openmeetings.web.com
  import static de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal.BUTTON_MARKUP_ID;
  import static java.time.Duration.ZERO;
  import static java.util.UUID.randomUUID;
 -import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
 -import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
 -import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
 -import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
 -import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
+ import static org.apache.openmeetings.web.app.WebSession.getUserId;
+ import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
+ import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirmCfg;
+ import static org.apache.openmeetings.web.pages.BasePage.ALIGN_LEFT;
+ import static org.apache.openmeetings.web.pages.BasePage.ALIGN_RIGHT;
 +import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
 +import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
 +import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
 +import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
 +import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
- import static org.apache.openmeetings.web.app.WebSession.getUserId;
- import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
- import static org.apache.openmeetings.web.pages.BasePage.ALIGN_LEFT;
- import static org.apache.openmeetings.web.pages.BasePage.ALIGN_RIGHT;
  
  import java.io.File;
  import java.nio.file.Path;
@@@ -44,10 -45,8 +45,8 @@@ import org.apache.openmeetings.db.entit
  import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
  import org.apache.openmeetings.db.entity.file.FileItem;
  import org.apache.openmeetings.db.entity.record.Recording;
--import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.openmeetings.web.common.NameDialog;
- import org.apache.openmeetings.web.common.confirmation.ConfirmableAjaxBorder;
- import org.apache.openmeetings.web.common.confirmation.ConfirmationDialog;
++import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.wicket.AttributeModifier;
  import org.apache.wicket.Component;
  import org.apache.wicket.ajax.AjaxEventBehavior;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
index 1517e47,1517e47..f93c6b0
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
@@@ -19,9 -19,9 +19,9 @@@
  package org.apache.openmeetings.web.common.tree;
  
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isRecordingsEnabled;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isRecordingsEnabled;
  
  import java.util.ArrayList;
  import java.util.Iterator;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
index 92350d3,92350d3..66d9090
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java
@@@ -18,10 -18,10 +18,10 @@@
   */
  package org.apache.openmeetings.web.pages;
  
++import static org.apache.openmeetings.web.app.Application.isInstalled;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.getApplicationName;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.getGaCode;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.isInitComplete;
--import static org.apache.openmeetings.web.app.Application.isInstalled;
  import static org.apache.wicket.RuntimeConfigurationType.DEVELOPMENT;
  
  import java.util.HashMap;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
index ee2be61,ee2be61..9ed0701
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
@@@ -19,9 -19,9 +19,9 @@@
  package org.apache.openmeetings.web.pages.auth;
  
  import static java.util.UUID.randomUUID;
++import static org.apache.openmeetings.web.app.Application.urlForPage;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.getMinLoginLength;
--import static org.apache.openmeetings.web.app.Application.urlForPage;
  
  import java.util.Date;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
index 865e228,865e228..e265115
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
@@@ -19,9 -19,9 +19,9 @@@
  package org.apache.openmeetings.web.pages.install;
  
  import static org.apache.openmeetings.core.converter.BaseConverter.EXEC_EXT;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
  import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
  import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONE_SET;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
  import static org.apache.wicket.validation.validator.RangeValidator.range;
  import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
  import static org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext;
@@@ -45,17 -45,17 +45,17 @@@ import org.apache.openmeetings.db.dao.l
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.installation.ImportInitvalues;
  import org.apache.openmeetings.installation.InstallationConfig;
--import org.apache.openmeetings.util.ConnectionProperties;
--import org.apache.openmeetings.util.ConnectionProperties.DbType;
--import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.openmeetings.util.process.ProcessHelper;
  import org.apache.openmeetings.util.process.ProcessResult;
  import org.apache.openmeetings.web.app.Application;
  import org.apache.openmeetings.web.app.WebSession;
  import org.apache.openmeetings.web.common.ErrorMessagePanel;
  import org.apache.openmeetings.web.common.OmLabel;
++import org.apache.openmeetings.util.ConnectionProperties;
++import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.openmeetings.web.util.OmTooltipBehavior;
  import org.apache.openmeetings.web.util.ThreadHelper;
++import org.apache.openmeetings.util.ConnectionProperties.DbType;
  import org.apache.wicket.Component;
  import org.apache.wicket.ajax.AjaxRequestTarget;
  import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index de66749,0e84051..c0c4461
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@@ -23,10 -23,10 +23,10 @@@ import static java.time.Duration.ZERO
  import static org.apache.openmeetings.core.remote.KurentoHandler.activityAllowed;
  import static org.apache.openmeetings.core.util.ChatWebSocketHelper.ID_USER_PREFIX;
  import static org.apache.openmeetings.db.entity.calendar.Appointment.allowedStart;
--import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
  import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.web.room.wb.WbPanel.WB_JS_REFERENCE;
++import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
  
  import java.io.IOException;
  import java.nio.file.Files;
@@@ -59,7 -56,8 +56,7 @@@ import org.apache.openmeetings.db.util.
  import org.apache.openmeetings.db.util.ws.RoomMessage;
  import org.apache.openmeetings.db.util.ws.RoomMessage.Type;
  import org.apache.openmeetings.db.util.ws.TextRoomMessage;
--import org.apache.openmeetings.util.NullStringer;
+ import org.apache.openmeetings.web.app.Application;
  import org.apache.openmeetings.web.app.ClientManager;
  import org.apache.openmeetings.web.app.QuickPollManager;
  import org.apache.openmeetings.web.app.TimerService;
@@@ -73,6 -71,6 +70,7 @@@ import org.apache.openmeetings.web.room
  import org.apache.openmeetings.web.room.wb.WbAction;
  import org.apache.openmeetings.web.room.wb.WbPanel;
  import org.apache.openmeetings.web.util.ExtendedClientProperties;
++import org.apache.openmeetings.util.NullStringer;
  import org.apache.openmeetings.web.util.TouchPunchResourceReference;
  import org.apache.wicket.AttributeModifier;
  import org.apache.wicket.Component;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
index 98636ed,98636ed..ae9cb40
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
@@@ -19,11 -19,11 +19,11 @@@
  package org.apache.openmeetings.web.room;
  
  import static org.apache.openmeetings.db.dto.room.Whiteboard.ATTR_SLIDE;
++import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
  import static org.apache.openmeetings.util.OmFileHelper.MP4_MIME_TYPE;
  import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
  import static org.apache.openmeetings.util.OmFileHelper.getImagesDir;
--import static org.apache.openmeetings.web.app.WebSession.getUserId;
  
  import java.io.File;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
index 8ec7507,7655214..33e9f2c
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
@@@ -18,10 -18,10 +18,10 @@@
   */
  package org.apache.openmeetings.web.room.menu;
  
++import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
  import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.isSipEnabled;
--import static org.apache.openmeetings.web.app.WebSession.getUserId;
  
  import java.io.Serializable;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
index d96d16f,d96d16f..4fd172b
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
@@@ -18,16 -18,16 +18,16 @@@
   */
  package org.apache.openmeetings.web.room.menu;
  
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnabled;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.web.util.GroupLogoResourceReference.getUrl;
  import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_GROUP;
  import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_MY;
  import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnabled;
  
  import java.util.ArrayList;
  import java.util.Date;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
index 5eb979d,5eb979d..1468cc6
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
@@@ -18,9 -18,9 +18,9 @@@
   */
  package org.apache.openmeetings.web.room.sidebar;
  
--import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
++import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
  
  import org.apache.openmeetings.db.dao.file.FileItemDao;
  import org.apache.openmeetings.db.dao.record.RecordingDao;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
index 3894920,3894920..74bd097
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
@@@ -28,12 -28,12 +28,12 @@@ import java.util.function.Predicate
  
  import org.apache.openmeetings.db.entity.basic.Client;
  import org.apache.openmeetings.db.entity.file.BaseFileItem;
--import org.apache.openmeetings.util.NullStringer;
  import org.apache.openmeetings.util.ws.IClusterWsMessage;
  import org.apache.openmeetings.web.room.RoomPreviewResourceReference;
  import org.apache.openmeetings.web.room.RoomResourceReference;
  import org.apache.openmeetings.web.user.record.Mp4RecordingResourceReference;
  import org.apache.openmeetings.web.user.record.PngRecordingResourceReference;
++import org.apache.openmeetings.util.NullStringer;
  import org.apache.wicket.request.cycle.RequestCycle;
  import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
  import org.apache.wicket.request.mapper.parameter.PageParameters;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WsMessageWb.java
index 6c8018e,6c8018e..6d226d2
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WsMessageWb.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WsMessageWb.java
@@@ -18,8 -18,8 +18,8 @@@
   */
  package org.apache.openmeetings.web.room.wb;
  
--import org.apache.openmeetings.util.NullStringer;
  import org.apache.openmeetings.util.ws.IClusterWsMessage;
++import org.apache.openmeetings.util.NullStringer;
  
  import com.github.openjson.JSONObject;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WsMessageWbFile.java
index b3c7212,b3c7212..2051f48
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WsMessageWbFile.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WsMessageWbFile.java
@@@ -19,8 -19,8 +19,8 @@@
  package org.apache.openmeetings.web.room.wb;
  
  import org.apache.openmeetings.db.entity.file.BaseFileItem;
--import org.apache.openmeetings.util.NullStringer;
  import org.apache.openmeetings.util.ws.IClusterWsMessage;
++import org.apache.openmeetings.util.NullStringer;
  
  import com.github.openjson.JSONObject;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
index 4c51295,0481bee..eacf2e6
--- 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
@@@ -18,13 -18,13 +18,13 @@@
   */
  package org.apache.openmeetings.web.user.calendar;
  
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnabled;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.web.common.BasePanel.EVT_CHANGE;
- import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+ import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
  import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
  import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnabled;
  
  import java.time.LocalDateTime;
  import java.util.ArrayList;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
index 3d91602,3d91602..0ce06b1
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
@@@ -20,11 -20,11 +20,11 @@@ package org.apache.openmeetings.web.use
  
  import static org.apache.openmeetings.core.util.ChatWebSocketHelper.ID_ALL;
  import static org.apache.openmeetings.core.util.ChatWebSocketHelper.ID_ROOM_PREFIX;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_CHAT;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isChatSendOnEnter;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.web.room.RoomPanel.isModerator;
  import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_CHAT;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isChatSendOnEnter;
  import static org.apache.openmeetings.web.util.ProfileImageResourceReference.getUrl;
  import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
index 5d76376,44509eb..6a03349
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/admin/AdminCleanupInfoDialog.java
@@@ -23,10 -23,10 +23,10 @@@ import static org.apache.openmeetings.c
  import static org.apache.openmeetings.cli.CleanupHelper.getImportUnit;
  import static org.apache.openmeetings.cli.CleanupHelper.getProfileUnit;
  import static org.apache.openmeetings.cli.CleanupHelper.getRecUnit;
++import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
  import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
  import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
  import static org.apache.openmeetings.util.OmFileHelper.getUploadDir;
- import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
 -import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
  
  import org.apache.openmeetings.cli.CleanupEntityUnit;
  import org.apache.openmeetings.cli.CleanupUnit;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationsPanel.java
index 3be2347,3be2347..b51fc47
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/InvitationsPanel.java
@@@ -19,9 -19,9 +19,9 @@@
  package org.apache.openmeetings.web.user.profile;
  
  import static org.apache.openmeetings.db.util.FormatHelper.formatUser;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  
  import java.util.Iterator;
  import java.util.Set;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
index 83d6b73,f5f6819..489f7c9
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
@@@ -21,10 -21,10 +21,10 @@@ package org.apache.openmeetings.web.use
  import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
  import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
  import static org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER_ID;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
- import static org.apache.openmeetings.web.common.confirmation.ConfirmationBehavior.newOkCancelDangerConfirm;
+ import static org.apache.openmeetings.web.common.confirmation.ConfirmationHelper.newOkCancelDangerConfirm;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  
  import java.util.ArrayList;
  import java.util.HashSet;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
index 94afde3,94afde3..bf9a4c4
--- 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
@@@ -19,8 -19,8 +19,8 @@@
  package org.apache.openmeetings.web.user.profile;
  
  import static org.apache.openmeetings.db.util.TimezoneUtil.getTimeZone;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
  
  import java.util.ArrayList;
  import java.util.Iterator;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
index 0e80f38,0e80f38..988e127
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
@@@ -19,11 -19,11 +19,11 @@@
  package org.apache.openmeetings.web.user.profile;
  
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS;
  import static org.apache.openmeetings.web.app.Application.getDashboardContext;
  import static org.apache.openmeetings.web.app.WebSession.getDashboard;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS;
  
  import java.util.ArrayList;
  import java.util.Iterator;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
index 1cd806e,5a14902..12b8361
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
@@@ -18,9 -18,9 +18,9 @@@
   */
  package org.apache.openmeetings.web.user.record;
  
++import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
  import static org.apache.openmeetings.util.OmFileHelper.getRecordingChunk;
--import static org.apache.openmeetings.web.app.WebSession.getUserId;
  
  import java.util.List;
  
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
index 3576fc8,3576fc8..76073fc
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
@@@ -18,8 -18,8 +18,8 @@@
   */
  package org.apache.openmeetings.web.user.rooms;
  
--import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
  import static org.apache.openmeetings.web.common.BasePanel.EVT_CLICK;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
  
  import java.io.Serializable;
  import java.util.List;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
index 4760969,4760969..9ed7c0a
--- 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
@@@ -28,9 -28,9 +28,9 @@@ import org.apache.openmeetings.db.dao.r
  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.ClientManager;
  import org.apache.openmeetings.web.common.UserPanel;
++import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.wicket.ajax.AjaxRequestTarget;
  import org.apache.wicket.markup.html.WebMarkupContainer;
  import org.apache.wicket.markup.html.basic.Label;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
index ffff1f7,f8c7716..1650b31
--- 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
@@@ -18,10 -18,11 +18,11 @@@
   */
  package org.apache.openmeetings.web.user.rooms;
  
 -import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
--import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnabled;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.web.util.OmUrlFragment.TYPE_GROUP;
  import static org.apache.openmeetings.web.util.OmUrlFragment.TYPE_MY;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
++import static org.apache.openmeetings.util.OpenmeetingsVariables.isMyRoomsEnabled;
  
  import org.apache.openmeetings.db.dao.room.RoomDao;
  import org.apache.openmeetings.web.app.Application;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/util/GroupLogoResourceReference.java
index 060c838,060c838..bf066c9
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/GroupLogoResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/GroupLogoResourceReference.java
@@@ -19,10 -19,10 +19,10 @@@
  package org.apache.openmeetings.web.util;
  
  import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
--import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
--import static org.apache.openmeetings.util.OmFileHelper.getGroupLogo;
  import static org.apache.openmeetings.web.app.WebSession.getRights;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
++import static org.apache.openmeetings.util.OmFileHelper.getGroupLogo;
  
  import java.io.File;
  import java.io.IOException;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
index ce79595,ce79595..21bd5fb
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
@@@ -20,8 -20,8 +20,8 @@@ package org.apache.openmeetings.web.uti
  
  import org.apache.openmeetings.db.dao.user.UserDao;
  import org.apache.openmeetings.db.entity.user.User;
--import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.openmeetings.web.app.WebSession;
++import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.wicket.injection.Injector;
  import org.apache.wicket.request.cycle.RequestCycle;
  import org.apache.wicket.request.mapper.parameter.PageParameters;
@@@ -34,14 -34,14 +34,15 @@@ import org.slf4j.Logger
  import org.slf4j.LoggerFactory;
  
  import javax.servlet.http.HttpServletResponse;
++
++import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
++import static org.apache.openmeetings.util.OmFileHelper.SIP_USER_ID;
++
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.InputStream;
  import java.net.URI;
  
--import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
--import static org.apache.openmeetings.util.OmFileHelper.SIP_USER_ID;
--
  public class ProfileImageResourceReference extends ResourceReference {
  	private static final long serialVersionUID = 1L;
  	private static final Logger log = LoggerFactory.getLogger(ProfileImageResourceReference.class);
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
index 5b468ed,5b468ed..71274b9
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
@@@ -19,8 -19,8 +19,8 @@@
  package org.apache.openmeetings.web.util;
  
  import static java.nio.charset.StandardCharsets.UTF_8;
--import static org.apache.openmeetings.util.OmFileHelper.getUserDashboard;
  import static org.apache.openmeetings.web.app.WebSession.getUserId;
++import static org.apache.openmeetings.util.OmFileHelper.getUserDashboard;
  
  import java.io.File;
  import java.io.FileInputStream;
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/OpenMeetingsMetricsServlet.java
index 05c1555,05c1555..1b9bdd5
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/OpenMeetingsMetricsServlet.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/OpenMeetingsMetricsServlet.java
@@@ -21,8 -21,8 +21,7 @@@ package org.apache.openmeetings.web.uti
  import io.prometheus.client.exporter.MetricsServlet;
  
  public class OpenMeetingsMetricsServlet extends MetricsServlet {
--
--	private static final long serialVersionUID = -2488393857088858502L;
++	private static final long serialVersionUID = 1L;
  
  	public OpenMeetingsMetricsServlet() {
  		super();
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatGenericExports.java
index 8865859,8865859..0383d14
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatGenericExports.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/logging/TomcatGenericExports.java
@@@ -18,10 -18,10 +18,12 @@@
   */
  package org.apache.openmeetings.web.util.logging;
  
++import java.io.InputStream;
  import java.lang.management.ManagementFactory;
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.List;
++import java.util.Properties;
  import java.util.Set;
  
  import javax.management.Attribute;
@@@ -30,11 -30,11 +32,11 @@@ import javax.management.MBeanServer
  import javax.management.ObjectInstance;
  import javax.management.ObjectName;
  
--import org.apache.catalina.util.ServerInfo;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import io.prometheus.client.Collector;
++import io.prometheus.client.Collector.MetricFamilySamples;
  import io.prometheus.client.CounterMetricFamily;
  import io.prometheus.client.GaugeMetricFamily;
  
@@@ -293,7 -293,7 +295,14 @@@ public class TomcatGenericExports exten
  	private void addVersionInfo(List<MetricFamilySamples> mfs) {
  		GaugeMetricFamily tomcatInfo = new GaugeMetricFamily("tomcat_info", "tomcat version info",
  				List.of("version", "build"));
--		tomcatInfo.addMetric(List.of(ServerInfo.getServerNumber(), ServerInfo.getServerBuilt()), 1);
++		try (InputStream is = getClass().getResourceAsStream("/org/apache/catalina/util/ServerInfo.properties")) {
++			Properties props = new Properties();
++			props.load(is);
++			//server info can be get as props.getProperty("server.info");
++			tomcatInfo.addMetric(List.of(props.getProperty("server.number"), props.getProperty("server.built")), 1);
++		} catch (Throwable t) {
++			log.warn("Unable to read Tomcat version: ", t);
++		}
  		mfs.add(tomcatInfo);
  	}
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
index 5819d14,65ba0b0..695051c
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
@@@ -29,7 -29,7 +29,6 @@@ import java.util.ArrayList
  import java.util.Calendar;
  import java.util.Date;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
  import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
@@@ -38,6 -38,6 +37,7 @@@ import org.apache.openmeetings.db.entit
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.service.calendar.AppointmentLogic;
  import org.apache.openmeetings.web.app.WebSession;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.wicket.util.string.StringValue;
  import org.apache.wicket.util.string.Strings;
  import org.junit.jupiter.api.Test;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
index 642c15f,50996e8..c704dec
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
@@@ -23,9 -23,9 +23,9 @@@ import static org.apache.openmeetings.u
  import static org.apache.openmeetings.util.OpenmeetingsVariables.setBaseUrl;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.entity.basic.Configuration;
  import org.apache.openmeetings.service.calendar.AppointmentLogic;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
index a5993c2,21371c2..4d30e87
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
@@@ -24,8 -24,8 +24,8 @@@ import java.util.Date
  import java.util.Iterator;
  import java.util.List;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
index cf58b10,33f9a57..6b532c9
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
@@@ -23,9 -23,9 +23,9 @@@ import static org.junit.jupiter.api.Ass
  import java.util.ArrayList;
  import java.util.Calendar;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
  import org.apache.openmeetings.db.entity.calendar.MeetingMember;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
index 9898299,a40d9a8..e948b0d
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
@@@ -18,7 -18,7 +18,7 @@@
   */
  package org.apache.openmeetings.calendar;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
index 25e4d16,b29ffdb..c3d38c1
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
@@@ -18,10 -18,10 +18,10 @@@
   */
  package org.apache.openmeetings.calendar;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  
- class TestDatabaseStructureMeetingMember extends AbstractJUnitDefaults {
+ class TestDatabaseStructureMeetingMember extends AbstractOmServerTest {
  
  	@Test
  	void testUpdateMeetingMember(){
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
index 511b803,bde1652..047cf0a
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
@@@ -24,9 -24,9 +24,9 @@@ import static org.junit.jupiter.api.Ass
  import java.util.Calendar;
  import java.util.Date;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.dao.room.RoomDao;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
index 9b1483f,cf9e953..50f3d61
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
@@@ -21,10 -21,10 +21,10 @@@ package org.apache.openmeetings.calenda
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
  import org.apache.openmeetings.db.entity.calendar.OmCalendar;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
index 7da0ed6,2d3d2cf..d16c730
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
@@@ -19,6 -19,6 +19,7 @@@
  package org.apache.openmeetings.calendar;
  
  import static java.util.UUID.randomUUID;
++import static org.apache.openmeetings.util.CalendarHelper.getZoneDateTime;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
  import java.io.ByteArrayInputStream;
@@@ -27,24 -27,24 +28,25 @@@ import java.util.Date
  import java.util.TimeZone;
  
  import javax.activation.DataHandler;
--import javax.mail.BodyPart;
--import javax.mail.Message;
--import javax.mail.Multipart;
--import javax.mail.internet.InternetAddress;
--import javax.mail.internet.MimeBodyPart;
--import javax.mail.internet.MimeMessage;
--import javax.mail.internet.MimeMultipart;
--
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
++
  import org.apache.openmeetings.core.mail.MailHandler;
  import org.apache.openmeetings.util.mail.ByteArrayDataSource;
  import org.apache.openmeetings.util.mail.IcalHandler;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  
- class TestSendIcalMessage extends AbstractJUnitDefaults {
++import jakarta.mail.BodyPart;
++import jakarta.mail.Message;
++import jakarta.mail.Multipart;
++import jakarta.mail.internet.InternetAddress;
++import jakarta.mail.internet.MimeBodyPart;
++import jakarta.mail.internet.MimeMessage;
++import jakarta.mail.internet.MimeMultipart;
++
+ class TestSendIcalMessage extends AbstractOmServerTest {
  	private static final Logger log = LoggerFactory.getLogger(TestSendIcalMessage.class);
  
  	@Autowired
@@@ -65,8 -65,8 +67,9 @@@
  		Calendar endCal = Calendar.getInstance();
  		endCal.add(Calendar.HOUR_OF_DAY, 1);
  		Date end = endCal.getTime();
++		String tzid = TimeZone.getDefault().getID();
  		IcalHandler handler = new IcalHandler(IcalHandler.ICAL_METHOD_REQUEST)
--				.createVEvent(TimeZone.getDefault().getID(), start, end, "test event")
++				.createVEvent(getZoneDateTime(start, tzid), getZoneDateTime(end, tzid), "test event")
  				.setLocation("")
  				.setDescription("localhost:5080/link_openmeetings")
  				.setUid(randomUUID().toString())
@@@ -91,16 -91,16 +94,12 @@@
  
  		// -- Create a new message --
  		BodyPart msg = new MimeBodyPart();
--		msg.setDataHandler(new DataHandler(new ByteArrayDataSource(htmlBody,
--				"text/html; charset=\"utf-8\"")));
++		msg.setDataHandler(new DataHandler(new ByteArrayDataSource(htmlBody, "text/html; charset=\"utf-8\"")));
  
  		Multipart multipart = new MimeMultipart();
  
  		BodyPart iCalAttachment = new MimeBodyPart();
--		iCalAttachment.setDataHandler(new DataHandler(
--				new javax.mail.util.ByteArrayDataSource(
--						new ByteArrayInputStream(iCalMimeBody),
--						"text/calendar;method=REQUEST;charset=\"UTF-8\"")));
++		iCalAttachment.setDataHandler(new DataHandler(new jakarta.mail.util.ByteArrayDataSource(new ByteArrayInputStream(iCalMimeBody), "text/calendar;method=REQUEST;charset=\"UTF-8\"")));
  		iCalAttachment.setFileName("invite.ics");
  
  		multipart.addBodyPart(iCalAttachment);
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/cmdline/TestAdmin.java
index 38bcf05,5ba13a8..cfe624b
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/cmdline/TestAdmin.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/cmdline/TestAdmin.java
@@@ -16,14 -16,14 +16,9 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.cli;
++package org.apache.openmeetings.cmdline;
  
  import static org.apache.commons.io.FileUtils.deleteQuietly;
- import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
- import static org.apache.openmeetings.AbstractJUnitDefaults.email;
- import static org.apache.openmeetings.AbstractJUnitDefaults.group;
- import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
- import static org.apache.openmeetings.AbstractSpringTest.setOmHome;
 -import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
 -import static org.apache.openmeetings.AbstractOmServerTest.email;
 -import static org.apache.openmeetings.AbstractOmServerTest.group;
 -import static org.apache.openmeetings.AbstractOmServerTest.setOmHome;
 -import static org.apache.openmeetings.AbstractOmServerTest.userpass;
  import static org.apache.openmeetings.cli.Admin.OM_HOME;
  import static org.apache.openmeetings.db.util.ApplicationHelper.destroyApplication;
  import static org.apache.openmeetings.util.OmFileHelper.getOmHome;
@@@ -33,6 -33,6 +28,11 @@@ import static org.apache.openmeetings.u
  import static org.apache.openmeetings.util.OpenmeetingsVariables.setWicketApplicationName;
  import static org.apache.openmeetings.web.pages.install.TestInstall.resetH2Home;
  import static org.apache.openmeetings.web.pages.install.TestInstall.setH2Home;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.adminUsername;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.email;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.group;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.setOmHome;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.userpass;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  import static org.junit.jupiter.api.Assertions.fail;
  
@@@ -42,6 -42,7 +42,9 @@@ import java.util.ArrayList
  import java.util.List;
  import java.util.UUID;
  
 -import org.apache.openmeetings.IsolatedTest;
++import org.apache.openmeetings.cli.Admin;
++import org.apache.openmeetings.cli.ExitException;
++import org.apache.openmeetings.web.test.IsolatedTest;
  import org.apache.wicket.Application;
  import org.apache.wicket.protocol.http.WebApplication;
  import org.junit.jupiter.api.AfterEach;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/cmdline/TestPatcher.java
index 149583f,194572c..34f787e
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/cmdline/TestPatcher.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/cmdline/TestPatcher.java
@@@ -16,18 -16,19 +16,20 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.cli;
++package org.apache.openmeetings.cmdline;
  
- import static org.apache.openmeetings.AbstractSpringTest.setOmHome;
 -import static org.apache.openmeetings.AbstractOmServerTest.setOmHome;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.setOmHome;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  
  import java.io.IOException;
  import java.util.TimeZone;
  
  import org.apache.openjpa.lib.util.Files;
 -import org.apache.openmeetings.IsolatedTest;
++import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
  import org.apache.openmeetings.util.ConnectionProperties;
--import org.apache.openmeetings.util.ConnectionProperties.DbType;
  import org.apache.openmeetings.util.OmFileHelper;
++import org.apache.openmeetings.util.ConnectionProperties.DbType;
++import org.apache.openmeetings.web.test.IsolatedTest;
  import org.apache.wicket.request.Url;
  import org.apache.wicket.request.mapper.parameter.PageParameters;
  import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
index 9e45fbb,56bce75..9d29143
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
@@@ -24,8 -24,8 +24,8 @@@ import static org.junit.jupiter.api.Ass
  
  import java.util.List;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.entity.basic.Configuration;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
index 5a0545f,e472b79..b056443
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
@@@ -28,12 -28,12 +28,12 @@@ import java.io.FileInputStream
  import java.io.InputStream;
  import java.util.Optional;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.core.data.file.FileProcessor;
  import org.apache.openmeetings.db.dto.file.FileItemDTO;
  import org.apache.openmeetings.db.entity.file.BaseFileItem;
  import org.apache.openmeetings.db.entity.file.FileItem;
  import org.apache.openmeetings.util.process.ProcessResultList;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
index 03d1726,18bc5c0..8ca2e08
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
@@@ -20,9 -20,9 +20,9 @@@ package org.apache.openmeetings.domain
  
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.entity.user.Group;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
index 576757e,3aec7e8..57fd6ad
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
@@@ -21,9 -21,9 +21,9 @@@ package org.apache.openmeetings.domain
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.entity.user.GroupUser;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
index ec508a2,bd5b349..a087402
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
@@@ -19,12 -19,12 +19,11 @@@
  package org.apache.openmeetings.invitiation;
  
  import static org.apache.openmeetings.util.CalendarHelper.getDate;
--import static org.junit.Assert.assertNotNull;
++import static org.junit.jupiter.api.Assertions.assertNotNull;
  
  import java.time.LocalDateTime;
  import java.util.Date;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.dao.room.RoomDao;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
  import org.apache.openmeetings.db.entity.room.Invitation;
@@@ -33,6 -33,6 +32,7 @@@ import org.apache.openmeetings.db.entit
  import org.apache.openmeetings.db.entity.room.Room;
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.service.room.InvitationManager;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/ldap/TestLdap.java
index fe1296d,0f4e998..3cb675f
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/ldap/TestLdap.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/ldap/TestLdap.java
@@@ -52,13 -52,13 +52,13 @@@ import org.apache.directory.server.core
  import org.apache.directory.server.core.annotations.CreateDS;
  import org.apache.directory.server.core.annotations.CreatePartition;
  import org.apache.directory.server.protocol.shared.transport.Transport;
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.core.ldap.LdapLoginManager;
  import org.apache.openmeetings.db.dao.server.LdapConfigDao;
  import org.apache.openmeetings.db.entity.server.LdapConfig;
  import org.apache.openmeetings.db.entity.user.User;
--import org.apache.openmeetings.util.OmException;
  import org.apache.openmeetings.web.app.WebSession;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
++import org.apache.openmeetings.util.OmException;
  import org.junit.jupiter.api.BeforeAll;
  import org.junit.jupiter.api.BeforeEach;
  import org.junit.jupiter.api.Test;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
index 361b090,073daec..953a4c9
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
@@@ -20,10 -20,10 +20,10 @@@ package org.apache.openmeetings.smoke
  
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  
- class TestSmokeBasic extends AbstractJUnitDefaults {
+ class TestSmokeBasic extends AbstractOmServerTest {
  	@Test
  	void createErrorValueAndTest() {
  		assertNotNull(userDao.get(1L));
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserContact.java
index 6aeb394,2831699..e50ec6d
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserContact.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserContact.java
@@@ -19,9 -19,9 +19,9 @@@
  package org.apache.openmeetings.user;
  
  import static java.util.UUID.randomUUID;
++import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.isSipEnabled;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.setSipEnabled;
--import static org.apache.openmeetings.web.app.WebSession.getUserId;
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertNull;
@@@ -29,11 -29,11 +29,11 @@@ import static org.junit.jupiter.api.Ass
  
  import java.util.List;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.junit.jupiter.api.Test;
  
- class TestUserContact extends AbstractWicketTester {
+ class TestUserContact extends AbstractWicketTesterTest {
  
  	@Test
  	void testGetUser() {
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserCount.java
index f835642,73957e2..3a2fcb3
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserCount.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserCount.java
@@@ -23,12 -23,12 +23,12 @@@ import static org.apache.openmeetings.w
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.user.Group;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.junit.jupiter.api.Test;
  
- class TestUserCount extends AbstractWicketTester {
+ class TestUserCount extends AbstractWicketTesterTest {
  	@Test
  	void testCountSearchUsers() throws Exception {
  		User u = createUser();
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
index d201a8b,f4c4683..ca7251f
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
@@@ -26,12 -26,12 +26,12 @@@ import static org.junit.jupiter.api.Ass
  
  import java.util.List;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  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.OmException;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Tag;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestAuth.java
index 15a4808,b2a36aa..c69a094
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestAuth.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestAuth.java
@@@ -22,9 -22,9 +22,9 @@@ import static java.util.UUID.randomUUID
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertNull;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.dao.server.SessiondataDao;
  import org.apache.openmeetings.db.entity.server.Sessiondata;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestLogin.java
index 7a6e834,43133d1..2f6f011
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestLogin.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestLogin.java
@@@ -20,12 -20,12 +20,12 @@@ package org.apache.openmeetings.userdat
  
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.util.OmException;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  
- class TestLogin extends AbstractJUnitDefaults {
+ class TestLogin extends AbstractOmServerTest {
  	@Test
  	void testTestLogin() throws OmException {
  		User us = userDao.login(adminUsername, userpass);
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
index 80e4e33,16d5a97..3e8a71a
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
@@@ -25,11 -25,11 +25,11 @@@ import static org.junit.jupiter.api.Ass
  import java.time.LocalDateTime;
  import java.util.List;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
  import org.apache.openmeetings.db.entity.user.User;
--import org.apache.openmeetings.util.OmException;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.openmeetings.web.user.calendar.CalendarPanel;
++import org.apache.openmeetings.util.OmException;
  import org.apache.wicket.behavior.AbstractAjaxBehavior;
  import org.apache.wicket.util.tester.FormTester;
  import org.junit.jupiter.api.Test;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
index a24b3e2,e433169..222e95f
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
@@@ -40,8 -40,8 +40,6 @@@ import static org.junit.jupiter.api.Ass
  
  import java.util.function.Consumer;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
--import org.apache.openmeetings.util.OmException;
  import org.apache.openmeetings.web.admin.backup.BackupPanel;
  import org.apache.openmeetings.web.admin.configurations.ConfigsPanel;
  import org.apache.openmeetings.web.admin.connection.ConnectionsPanel;
@@@ -60,12 -60,12 +58,14 @@@ import org.apache.openmeetings.web.page
  import org.apache.openmeetings.web.pages.install.InstallWizardPage;
  import org.apache.openmeetings.web.room.RoomPanel;
  import org.apache.openmeetings.web.room.wb.AbstractWbPanel;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.openmeetings.web.user.calendar.CalendarPanel;
  import org.apache.openmeetings.web.user.dashboard.OmDashboardPanel;
  import org.apache.openmeetings.web.user.profile.EditProfilePanel;
  import org.apache.openmeetings.web.user.profile.MessagesContactsPanel;
  import org.apache.openmeetings.web.user.record.RecordingsPanel;
  import org.apache.openmeetings.web.user.rooms.RoomsSelectorPanel;
++import org.apache.openmeetings.util.OmException;
  import org.apache.openmeetings.web.util.OmUrlFragment.AreaKeys;
  import org.apache.wicket.authorization.UnauthorizedInstantiationException;
  import org.apache.wicket.behavior.AbstractAjaxBehavior;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainMenu.java
index adfd94c,344111d..33d60a9
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainMenu.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainMenu.java
@@@ -20,8 -20,8 +20,6 @@@ package org.apache.openmeetings.web
  
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
--import org.apache.openmeetings.util.OmException;
  import org.apache.openmeetings.web.admin.backup.BackupPanel;
  import org.apache.openmeetings.web.admin.configurations.ConfigsPanel;
  import org.apache.openmeetings.web.admin.connection.ConnectionsPanel;
@@@ -33,10 -33,10 +31,12 @@@ import org.apache.openmeetings.web.admi
  import org.apache.openmeetings.web.admin.rooms.RoomsPanel;
  import org.apache.openmeetings.web.admin.users.UsersPanel;
  import org.apache.openmeetings.web.common.BasePanel;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.openmeetings.web.user.calendar.CalendarPanel;
  import org.apache.openmeetings.web.user.dashboard.OmDashboardPanel;
  import org.apache.openmeetings.web.user.record.RecordingsPanel;
  import org.apache.openmeetings.web.user.rooms.RoomsSelectorPanel;
++import org.apache.openmeetings.util.OmException;
  import org.apache.wicket.behavior.AbstractAjaxBehavior;
  import org.junit.jupiter.api.Test;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplication.java
index 985d45b,0a305c0..5cefeb9
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplication.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplication.java
@@@ -29,11 -29,11 +29,11 @@@ import java.util.Locale
  import java.util.Map.Entry;
  import java.util.stream.Collectors;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.dao.label.LabelDao;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  
- class TestApplication extends AbstractJUnitDefaults {
+ class TestApplication extends AbstractOmServerTest {
  	@Test
  	void testMissing() {
  		assertEquals("[Missing]", app.getOmString("909", Locale.ENGLISH));
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplicationMocked.java
index 7d5fa53,fbeff05..554b0a9
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplicationMocked.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplicationMocked.java
@@@ -18,9 -18,10 +18,10 @@@
   */
  package org.apache.openmeetings.web.app;
  
--import static org.junit.Assert.assertEquals;
--import static org.junit.Assert.assertNull;
++import static org.junit.jupiter.api.Assertions.assertEquals;
++import static org.junit.jupiter.api.Assertions.assertNull;
  
 -import org.apache.openmeetings.RegularTest;
++import org.apache.openmeetings.web.test.RegularTest;
  import org.apache.wicket.request.Url;
  import org.junit.jupiter.api.Test;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestOmAuthenticationStrategy.java
index a055f3c,8c0a7c1..d62c42b
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestOmAuthenticationStrategy.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestOmAuthenticationStrategy.java
@@@ -25,11 -25,11 +25,11 @@@ import static org.junit.jupiter.api.Ass
  
  import javax.servlet.http.Cookie;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.junit.jupiter.api.Test;
  
- class TestOmAuthenticationStrategy extends AbstractWicketTester {
+ class TestOmAuthenticationStrategy extends AbstractWicketTesterTest {
  	@Test
  	void test() {
  		String encKey = randomUUID().toString();
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestUserManagerMocked.java
index b57c21e,6ac16bc..1e29e6d
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestUserManagerMocked.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestUserManagerMocked.java
@@@ -46,6 -47,6 +46,7 @@@ import org.apache.openmeetings.db.entit
  import org.apache.openmeetings.db.manager.IClientManager;
  import org.apache.openmeetings.service.mail.EmailManager;
  import org.apache.openmeetings.util.crypt.SCryptImplementation;
++import org.apache.openmeetings.web.test.RegularTest;
  import org.junit.jupiter.api.Test;
  import org.junit.jupiter.api.extension.ExtendWith;
  import org.mockito.InjectMocks;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestWebSession.java
index bfa1208,0c1ab7b..ef02f78
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestWebSession.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestWebSession.java
@@@ -22,12 -22,12 +22,12 @@@ import static org.junit.jupiter.api.Ass
  import static org.junit.jupiter.api.Assertions.assertTrue;
  import static org.junit.jupiter.api.Assertions.fail;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.util.OmException;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.junit.jupiter.api.Test;
  
- class TestWebSession extends AbstractWicketTester {
+ class TestWebSession extends AbstractWicketTesterTest {
  	@Test
  	void testLogin() throws OmException {
  		WebSession ws = WebSession.get();
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/TestHashPage.java
index 92e5195,fdab9aa..771b2cb
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/TestHashPage.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/TestHashPage.java
@@@ -25,12 -25,12 +25,11 @@@ import static org.apache.openmeetings.w
  import static org.apache.openmeetings.web.pages.HashPage.PANEL_MAIN;
  import static org.apache.openmeetings.web.pages.HashPage.PANEL_RECORDING;
  import static org.apache.openmeetings.web.util.OmUrlFragment.CHILD_ID;
- import static org.junit.Assert.assertTrue;
 -import static org.junit.Assert.assertEquals;
++import static org.junit.jupiter.api.Assertions.assertEquals;
  
  import java.util.Date;
  import java.util.UUID;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.dao.record.RecordingDao;
  import org.apache.openmeetings.db.dao.room.InvitationDao;
  import org.apache.openmeetings.db.dao.room.RoomDao;
@@@ -41,6 -41,6 +40,7 @@@ import org.apache.openmeetings.db.entit
  import org.apache.openmeetings.util.crypt.CryptProvider;
  import org.apache.openmeetings.web.common.MainPanel;
  import org.apache.openmeetings.web.room.RoomPanel;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.openmeetings.web.user.record.VideoInfo;
  import org.apache.wicket.markup.html.WebMarkupContainer;
  import org.apache.wicket.markup.html.panel.Panel;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java
index 1dfcd8e,7d943b1..add14c9
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java
@@@ -32,13 -32,13 +32,13 @@@ import java.lang.reflect.Method
  import java.util.List;
  import java.util.Locale;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.basic.Configuration;
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.web.app.WebSession;
  import org.apache.openmeetings.web.pages.ActivatePage;
  import org.apache.openmeetings.web.pages.MainPage;
  import org.apache.openmeetings.web.pages.ResetPage;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.wicket.behavior.AbstractAjaxBehavior;
  import org.apache.wicket.extensions.markup.html.captcha.CaptchaImageResource;
  import org.apache.wicket.markup.html.image.Image;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/install/TestInstall.java
index de2da84,a2f5d41..ce8fba3
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/install/TestInstall.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/install/TestInstall.java
@@@ -19,17 -19,18 +19,18 @@@
  package org.apache.openmeetings.web.pages.install;
  
  import static org.apache.commons.io.FileUtils.deleteQuietly;
- import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
- import static org.apache.openmeetings.AbstractJUnitDefaults.email;
- import static org.apache.openmeetings.AbstractJUnitDefaults.group;
- import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
- import static org.apache.openmeetings.AbstractWicketTester.checkErrors;
- import static org.apache.openmeetings.AbstractWicketTester.countErrors;
- import static org.apache.openmeetings.AbstractWicketTester.getWicketTester;
 -import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
 -import static org.apache.openmeetings.AbstractOmServerTest.email;
 -import static org.apache.openmeetings.AbstractOmServerTest.group;
 -import static org.apache.openmeetings.AbstractOmServerTest.setOmHome;
 -import static org.apache.openmeetings.AbstractOmServerTest.userpass;
 -import static org.apache.openmeetings.AbstractWicketTesterTest.checkErrors;
 -import static org.apache.openmeetings.AbstractWicketTesterTest.countErrors;
 -import static org.apache.openmeetings.AbstractWicketTesterTest.getWicketTester;
  import static org.apache.openmeetings.cli.ConnectionPropertiesPatcher.DEFAULT_DB_NAME;
  import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_APP_NAME;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.setWicketApplicationName;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.adminUsername;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.email;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.group;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.setOmHome;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.userpass;
++import static org.apache.openmeetings.web.test.AbstractWicketTesterTest.checkErrors;
++import static org.apache.openmeetings.web.test.AbstractWicketTesterTest.countErrors;
++import static org.apache.openmeetings.web.test.AbstractWicketTesterTest.getWicketTester;
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertTrue;
@@@ -41,13 -42,13 +42,13 @@@ import java.util.Locale
  import java.util.Random;
  import java.util.TimeZone;
  
- import org.apache.openmeetings.AbstractSpringTest;
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
 -import org.apache.openmeetings.IsolatedTest;
  import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
--import org.apache.openmeetings.util.ConnectionProperties.DbType;
  import org.apache.openmeetings.util.crypt.SCryptImplementation;
  import org.apache.openmeetings.web.app.Application;
  import org.apache.openmeetings.web.app.WebSession;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
++import org.apache.openmeetings.web.test.IsolatedTest;
++import org.apache.openmeetings.util.ConnectionProperties.DbType;
  import org.apache.wicket.ajax.AjaxClientInfoBehavior;
  import org.apache.wicket.behavior.AbstractAjaxBehavior;
  import org.apache.wicket.extensions.wizard.WizardButton;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/service/mail/TestEmailTemplate.java
index 9f0e26f,1476a8b..ec0259e
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/service/mail/TestEmailTemplate.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/service/mail/TestEmailTemplate.java
@@@ -16,13 -16,13 +16,19 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.service.mail.template;
++package org.apache.openmeetings.web.service.mail;
  
  import static org.junit.jupiter.api.Assertions.assertFalse;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.db.entity.user.UserContact;
++import org.apache.openmeetings.service.mail.template.FeedbackTemplate;
++import org.apache.openmeetings.service.mail.template.InvitationTemplate;
++import org.apache.openmeetings.service.mail.template.RegisterUserTemplate;
++import org.apache.openmeetings.service.mail.template.RequestContactConfirmTemplate;
++import org.apache.openmeetings.service.mail.template.RequestContactTemplate;
++import org.apache.openmeetings.service.mail.template.ResetPasswordTemplate;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.wicket.util.string.Strings;
  import org.junit.jupiter.api.Test;
  import org.junit.jupiter.params.ParameterizedTest;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/service/mail/TestSubjTemplate.java
index 5d6e699,d579181..15f6d8d
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/service/mail/TestSubjTemplate.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/service/mail/TestSubjTemplate.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.service.mail.template.subject;
++package org.apache.openmeetings.web.service.mail;
  
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
@@@ -29,11 -29,11 +29,19 @@@ import java.util.Locale
  import java.util.TimeZone;
  import java.util.function.Consumer;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.db.entity.calendar.Appointment;
  import org.apache.openmeetings.db.entity.record.Recording;
  import org.apache.openmeetings.db.entity.user.Group;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.service.mail.template.subject.AppointmentReminderTemplate;
++import org.apache.openmeetings.service.mail.template.subject.CanceledAppointmentTemplate;
++import org.apache.openmeetings.service.mail.template.subject.CreatedAppointmentTemplate;
++import org.apache.openmeetings.service.mail.template.subject.InvitedAppointmentTemplate;
++import org.apache.openmeetings.service.mail.template.subject.NewGroupUsersNotificationTemplate;
++import org.apache.openmeetings.service.mail.template.subject.RecordingExpiringTemplate;
++import org.apache.openmeetings.service.mail.template.subject.SubjectEmailTemplate;
++import org.apache.openmeetings.service.mail.template.subject.UpdatedAppointmentTemplate;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.apache.wicket.util.string.Strings;
  import org.junit.jupiter.api.Test;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/AbstractOmServerTest.java
index 3ac007f,b277a75..a8e6bb7
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/AbstractOmServerTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/AbstractOmServerTest.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings;
++package org.apache.openmeetings.web.test;
  
  import static java.util.UUID.randomUUID;
  import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
@@@ -39,7 -41,10 +41,10 @@@ import org.apache.openmeetings.db.entit
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.installation.ImportInitvalues;
  import org.apache.openmeetings.installation.InstallationConfig;
 -import org.apache.openmeetings.util.OmFileHelper;
  import org.apache.openmeetings.web.app.Application;
++import org.apache.openmeetings.util.OmFileHelper;
+ import org.apache.tomcat.util.scan.Constants;
+ import org.junit.jupiter.api.BeforeAll;
  import org.junit.jupiter.api.BeforeEach;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/AbstractWicketTesterTest.java
index 6285b75,773cbd1..519a9da
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/AbstractWicketTesterTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/AbstractWicketTesterTest.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings;
++package org.apache.openmeetings.web.test;
  
  import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
  import static org.apache.openmeetings.web.common.OmWebSocketPanel.CONNECTED_MSG;
@@@ -33,10 -33,10 +33,10 @@@ import java.util.function.Consumer
  
  import org.apache.openmeetings.db.entity.user.User;
  import org.apache.openmeetings.db.entity.user.User.Type;
--import org.apache.openmeetings.util.OmException;
  import org.apache.openmeetings.web.app.Application;
  import org.apache.openmeetings.web.app.WebSession;
  import org.apache.openmeetings.web.pages.MainPage;
++import org.apache.openmeetings.util.OmException;
  import org.apache.wicket.behavior.AbstractAjaxBehavior;
  import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter;
  import org.apache.wicket.feedback.FeedbackMessage;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/IsolatedTest.java
index 25e4d16,85a526a..c16a84f
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/IsolatedTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/IsolatedTest.java
@@@ -16,15 -16,17 +16,17 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
- package org.apache.openmeetings.calendar;
 -package org.apache.openmeetings;
++package org.apache.openmeetings.web.test;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
- import org.junit.jupiter.api.Test;
+ import java.lang.annotation.ElementType;
+ import java.lang.annotation.Retention;
+ import java.lang.annotation.RetentionPolicy;
+ import java.lang.annotation.Target;
  
- class TestDatabaseStructureMeetingMember extends AbstractJUnitDefaults {
+ import org.junit.jupiter.api.Tag;
  
- 	@Test
- 	void testUpdateMeetingMember(){
- 		//TODO add test
- 	}
+ @Target({ ElementType.TYPE, ElementType.METHOD })
+ @Retention(RetentionPolicy.RUNTIME)
+ @Tag("isolated")
+ public @interface IsolatedTest {
  }
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/RegularTest.java
index 7518278,73a8e94..a31d547
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/RegularTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/RegularTest.java
@@@ -16,20 -16,17 +16,17 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
- package org.apache.openmeetings.backup;
 -package org.apache.openmeetings;
++package org.apache.openmeetings.web.test;
  
- import java.io.Serializable;
+ import java.lang.annotation.ElementType;
+ import java.lang.annotation.Retention;
+ import java.lang.annotation.RetentionPolicy;
+ import java.lang.annotation.Target;
  
- public class ProgressHolder implements Serializable {
- 	private static final long serialVersionUID = 1L;
+ import org.junit.jupiter.api.Tag;
  
- 	private int progress;
- 
- 	public int getProgress() {
- 		return progress;
- 	}
- 
- 	public void setProgress(int progress) {
- 		this.progress = progress;
- 	}
+ @Target({ ElementType.TYPE, ElementType.METHOD })
+ @Retention(RetentionPolicy.RUNTIME)
+ @Tag("regular")
+ public @interface RegularTest {
  }
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/AbstractTestImport.java
index e0904e9,4f44062..8184803
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/AbstractTestImport.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/AbstractTestImport.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_FFMPEG;
@@@ -26,13 -26,13 +26,15 @@@ import static org.apache.openmeetings.u
  import static org.apache.openmeetings.util.OpenmeetingsVariables.getCryptClassName;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
++import org.apache.openmeetings.backup.BackupImport;
  import org.apache.openmeetings.db.entity.basic.Configuration;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.AfterEach;
  import org.junit.jupiter.api.BeforeEach;
  import org.springframework.beans.factory.annotation.Autowired;
  
- public class AbstractTestImport extends AbstractJUnitDefaults {
+ public class AbstractTestImport extends AbstractOmServerTest {
++	public static final String BACKUP_ROOT = "org/apache/openmeetings/backup/";
  	private String cryptClass = null;
  	@Autowired
  	protected BackupImport backupImport;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestExport.java
index 04bd0dc,8327cae..4c1c780
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestExport.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestExport.java
@@@ -16,12 -16,12 +16,12 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
  import static java.util.UUID.randomUUID;
  import static org.apache.openmeetings.db.bind.Constants.FILE_LIST_NODE;
  import static org.apache.openmeetings.db.bind.Constants.USER_LIST_NODE;
--import static org.junit.Assert.assertNotNull;
++import static org.junit.jupiter.api.Assertions.assertNotNull;
  
  import java.io.ByteArrayOutputStream;
  import java.io.File;
@@@ -33,19 -33,19 +33,18 @@@ import java.time.LocalDate
  import javax.xml.bind.JAXBContext;
  import javax.xml.bind.Marshaller;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
++import org.apache.openmeetings.backup.BackupExport;
  import org.apache.openmeetings.db.dao.file.FileItemDao;
  import org.apache.openmeetings.db.entity.file.BaseFileItem;
  import org.apache.openmeetings.db.entity.file.FileItem;
  import org.apache.openmeetings.db.entity.user.Group;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Assertions;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  
--import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
--
- class TestExport extends AbstractJUnitDefaults {
+ class TestExport extends AbstractOmServerTest {
  	@Autowired
  	private FileItemDao fileItemDao;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImport.java
index 249e38b,249e38b..dccdbd3
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImport.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImport.java
@@@ -16,13 -16,13 +16,15 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LDAP_ID;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  
  import java.io.File;
  
++import org.apache.openmeetings.backup.BackupImport;
++import org.apache.openmeetings.backup.BackupVersion;
  import org.apache.openmeetings.db.dao.basic.ChatDao;
  import org.apache.openmeetings.db.dao.record.RecordingDao;
  import org.apache.openmeetings.db.dao.room.ExtraMenuDao;
@@@ -35,7 -35,7 +37,6 @@@ import org.junit.jupiter.api.Test
  import org.springframework.beans.factory.annotation.Autowired;
  
  class TestImport extends AbstractTestImport {
--	public static final String BACKUP_ROOT = "org/apache/openmeetings/backup/";
  	@Autowired
  	private LdapConfigDao ldapDao;
  	@Autowired
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportCalendar.java
index 46a759a,46a759a..f948c63
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportCalendar.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportCalendar.java
@@@ -16,9 -16,9 +16,9 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
--import static org.apache.openmeetings.backup.TestImport.BACKUP_ROOT;
++import static org.apache.openmeetings.web.test.backup.TestImport.BACKUP_ROOT;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  
  import java.io.File;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportConfig.java
index de3c7b3,de3c7b3..527d3f4
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportConfig.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportConfig.java
@@@ -16,13 -16,13 +16,13 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
--import static org.apache.openmeetings.backup.TestImport.BACKUP_ROOT;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_FRONTEND;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_OAUTH;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_SOAP;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REPLY_TO_ORGANIZER;
++import static org.apache.openmeetings.web.test.backup.TestImport.BACKUP_ROOT;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  
  import java.io.File;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportOld.java
index 2d80d25,ce6aa5a..1f0d091
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportOld.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportOld.java
@@@ -16,9 -16,9 +16,8 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
--import static org.apache.openmeetings.backup.TestImport.BACKUP_ROOT;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  import static org.junit.jupiter.api.Assertions.fail;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportRoom.java
index e96f0f6,e96f0f6..2b2104d
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportRoom.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportRoom.java
@@@ -16,9 -16,9 +16,9 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
--import static org.apache.openmeetings.backup.TestImport.BACKUP_ROOT;
++import static org.apache.openmeetings.web.test.backup.TestImport.BACKUP_ROOT;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  
  import java.io.File;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportUser.java
index 57b2023,57b2023..17f0a6d
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportUser.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/backup/TestImportUser.java
@@@ -16,15 -16,15 +16,16 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.backup;
++package org.apache.openmeetings.web.test.backup;
  
--import static org.apache.openmeetings.backup.TestImport.BACKUP_ROOT;
++import static org.apache.openmeetings.web.test.backup.TestImport.BACKUP_ROOT;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
  import java.io.File;
  import java.util.List;
  
++import org.apache.openmeetings.backup.BackupException;
  import org.apache.openmeetings.db.dao.server.LdapConfigDao;
  import org.apache.openmeetings.db.entity.server.LdapConfig;
  import org.apache.openmeetings.db.entity.user.User;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/db/TestFileDao.java
index 058705d,6e9b0a4..dd40eb3
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/db/TestFileDao.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/db/TestFileDao.java
@@@ -16,20 -16,20 +16,20 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.db.dao;
++package org.apache.openmeetings.web.test.db;
  
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
  import java.util.List;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.dao.file.FileItemDao;
  import org.apache.openmeetings.db.dao.user.GroupDao;
  import org.apache.openmeetings.db.entity.file.BaseFileItem;
  import org.apache.openmeetings.db.entity.file.FileItem;
  import org.apache.openmeetings.db.entity.user.Group;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/db/TestRoomDao.java
index 30e02be,86ee4ca..7c18061
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/db/TestRoomDao.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/db/TestRoomDao.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.db.dao;
++package org.apache.openmeetings.web.test.db;
  
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertFalse;
@@@ -26,11 -26,11 +26,11 @@@ import static org.junit.jupiter.api.Ass
  import java.util.HashSet;
  import java.util.Set;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.dao.room.RoomDao;
  import org.apache.openmeetings.db.entity.room.Room;
  import org.apache.openmeetings.db.entity.room.Room.RoomElement;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/test/job/TestJob.java
index 89515a8,c2521fd..b4bb5d8
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/job/TestJob.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/test/job/TestJob.java
@@@ -16,11 -16,11 +16,11 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.service.scheduler;
++package org.apache.openmeetings.web.test.job;
  
  import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS;
  import static org.apache.openmeetings.util.OpenmeetingsVariables.setInitComplete;
--import static org.junit.Assert.assertNotNull;
++import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertTrue;
  import static org.mockito.ArgumentMatchers.anyString;
  import static org.mockito.Mockito.doAnswer;
@@@ -32,12 -32,12 +32,14 @@@ import java.time.ZoneId
  import java.util.Date;
  import java.util.List;
  
- import org.apache.openmeetings.AbstractWicketTester;
 -import org.apache.openmeetings.AbstractWicketTesterTest;
  import org.apache.openmeetings.core.mail.MailHandler;
  import org.apache.openmeetings.db.entity.basic.Configuration;
  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.service.scheduler.CleanupJob;
++import org.apache.openmeetings.service.scheduler.ReminderJob;
++import org.apache.openmeetings.web.test.AbstractWicketTesterTest;
  import org.junit.jupiter.api.Test;
  import org.junit.jupiter.api.extension.ExtendWith;
  import org.mockito.InjectMocks;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/util/TestDateTime.java
index 926c59a,b6500ca..5369890
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/util/TestDateTime.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/util/TestDateTime.java
@@@ -16,9 -16,9 +16,9 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.util;
++package org.apache.openmeetings.web.util;
  
--import static org.junit.Assert.assertNotNull;
++import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  
  import java.text.SimpleDateFormat;
@@@ -29,9 -29,11 +29,11 @@@ import java.util.Calendar
  import java.util.Date;
  import java.util.Locale;
  
 -import org.apache.openmeetings.RegularTest;
  import org.apache.openmeetings.web.common.datetime.AbstractOmDateTimePicker;
++import org.apache.openmeetings.web.test.RegularTest;
  import org.junit.jupiter.api.Test;
  
+ @RegularTest
  class TestDateTime {
  
  	@Test
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/web/util/TestStoredFile.java
index ff343c3,4529a41..526c5f7
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/util/TestStoredFile.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/util/TestStoredFile.java
@@@ -16,7 -16,7 +16,7 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
--package org.apache.openmeetings.util;
++package org.apache.openmeetings.web.util;
  
  import static org.apache.openmeetings.util.OmFileHelper.getDefaultProfilePicture;
  import static org.junit.jupiter.api.Assertions.assertTrue;
@@@ -25,10 -25,10 +25,11 @@@ import java.io.File
  import java.io.FileNotFoundException;
  import java.io.IOException;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
++import org.apache.openmeetings.util.StoredFile;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.junit.jupiter.api.Test;
  
- class TestStoredFile extends AbstractJUnitDefaults {
+ class TestStoredFile extends AbstractOmServerTest {
  	@Test
  	void testPng() throws FileNotFoundException, IOException {
  		File f = getDefaultProfilePicture();
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
index 67cf812,e77fb4c..2e93793
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
@@@ -20,12 -20,11 +20,11 @@@ package org.apache.openmeetings.webserv
  
  import static java.util.UUID.randomUUID;
  import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
- import static org.apache.openmeetings.AbstractJUnitDefaults.createPass;
- import static org.apache.openmeetings.AbstractJUnitDefaults.ensureSchema;
- import static org.apache.openmeetings.AbstractJUnitDefaults.soapUsername;
- import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
 -import static org.apache.openmeetings.AbstractOmServerTest.createPass;
 -import static org.apache.openmeetings.AbstractOmServerTest.ensureSchema;
 -import static org.apache.openmeetings.AbstractOmServerTest.soapUsername;
 -import static org.apache.openmeetings.AbstractOmServerTest.userpass;
  import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
- import static org.apache.openmeetings.util.OmFileHelper.getOmHome;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.createPass;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.ensureSchema;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.soapUsername;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.userpass;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/CreateTomcatExtension.java
index 0000000,b3bc927..d66fdbd
mode 000000,100644..100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/CreateTomcatExtension.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/CreateTomcatExtension.java
@@@ -1,0 -1,82 +1,82 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License") +  you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  *   http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 java.util.UUID.randomUUID;
+ import static org.apache.openmeetings.util.OmFileHelper.getOmHome;
+ 
+ import java.io.File;
+ import java.net.InetAddress;
+ import java.nio.file.Files;
+ 
+ import org.apache.catalina.LifecycleState;
+ import org.apache.catalina.connector.Connector;
+ import org.apache.catalina.startup.Tomcat;
 -import org.apache.openmeetings.AbstractOmServerTest;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
+ import org.junit.jupiter.api.extension.BeforeAllCallback;
+ import org.junit.jupiter.api.extension.ExtensionContext;
+ 
+ public class CreateTomcatExtension implements BeforeAllCallback {
+ 	private String host;
+ 	private String context;
+ 	private int port = 8080;
+ 	private Tomcat tomcat;
+ 
+ 	public CreateTomcatExtension(String host, String context) {
+ 		this.host = host;
+ 		this.context = context;
+ 	}
+ 
+ 	@Override
+ 	public void beforeAll(ExtensionContext extContext) throws Exception {
+ 		if (tomcat == null) {
+ 			extContext.getRoot().getStore(ExtensionContext.Namespace.GLOBAL).put("my_report", new ExtensionContext.Store.CloseableResource() {
+ 				@Override
+ 				public void close() throws Throwable {
+ 					if (tomcat.getServer() != null && tomcat.getServer().getState() != LifecycleState.DESTROYED) {
+ 						if (tomcat.getServer().getState() != LifecycleState.STOPPED) {
+ 							tomcat.stop();
+ 						}
+ 						tomcat.destroy();
+ 					}
+ 				}
+ 			});
+ 			AbstractOmServerTest.init();
+ 			tomcat = new Tomcat();
+ 			Connector connector = new Connector("HTTP/1.1");
+ 			connector.setProperty("address", InetAddress.getByName(host).getHostAddress());
+ 			connector.setPort(0);
+ 			tomcat.getService().addConnector(connector);
+ 			tomcat.setConnector(connector);
+ 			File wd = Files.createTempDirectory("om" + randomUUID().toString()).toFile();
+ 			tomcat.setBaseDir(wd.getCanonicalPath());
+ 			tomcat.getHost().setAppBase(wd.getCanonicalPath());
+ 			tomcat.getHost().setAutoDeploy(false);
+ 			tomcat.getHost().setDeployOnStartup(false);
+ 			tomcat.addWebapp(context, getOmHome().getAbsolutePath());
+ 			tomcat.getConnector(); // to init the connector
+ 			tomcat.start();
+ 			port = tomcat.getConnector().getLocalPort();
+ 		}
+ 	}
+ 
+ 	public int getPort() {
+ 		return port;
+ 	}
+ }
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestCalendarService.java
index 18fdafa,ff962b0..7c984b6
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestCalendarService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestCalendarService.java
@@@ -19,11 -19,11 +19,11 @@@
  package org.apache.openmeetings.webservice;
  
  import static java.util.UUID.randomUUID;
- import static org.apache.openmeetings.AbstractJUnitDefaults.ONE_HOUR;
- import static org.apache.openmeetings.AbstractJUnitDefaults.createPass;
- import static org.apache.openmeetings.AbstractJUnitDefaults.createUser;
- import static org.apache.openmeetings.AbstractJUnitDefaults.getAppointment;
- import static org.apache.openmeetings.AbstractJUnitDefaults.getUser;
 -import static org.apache.openmeetings.AbstractOmServerTest.ONE_HOUR;
 -import static org.apache.openmeetings.AbstractOmServerTest.createPass;
 -import static org.apache.openmeetings.AbstractOmServerTest.createUser;
 -import static org.apache.openmeetings.AbstractOmServerTest.getAppointment;
 -import static org.apache.openmeetings.AbstractOmServerTest.getUser;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.ONE_HOUR;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.createPass;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.createUser;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.getAppointment;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.getUser;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@@ -37,7 -37,7 +37,6 @@@ import java.util.List
  import javax.ws.rs.core.Form;
  import javax.ws.rs.core.Response;
  
- import org.apache.openmeetings.AbstractJUnitDefaults;
 -import org.apache.openmeetings.AbstractOmServerTest;
  import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
  import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
  import org.apache.openmeetings.db.dao.room.InvitationDao;
@@@ -51,6 -51,6 +50,7 @@@ import org.apache.openmeetings.db.entit
  import org.apache.openmeetings.db.entity.calendar.MeetingMember;
  import org.apache.openmeetings.db.entity.room.Room;
  import org.apache.openmeetings.db.entity.user.User;
++import org.apache.openmeetings.web.test.AbstractOmServerTest;
  import org.apache.openmeetings.webservice.util.AppointmentParamConverter;
  import org.junit.jupiter.api.Test;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestErrorService.java
index 2b4f875,42124d6..81233f5
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestErrorService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestErrorService.java
@@@ -19,7 -19,7 +19,7 @@@
  package org.apache.openmeetings.webservice;
  
  import static java.util.UUID.randomUUID;
- import static org.apache.openmeetings.AbstractJUnitDefaults.rnd;
 -import static org.apache.openmeetings.AbstractOmServerTest.rnd;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.rnd;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestFileService.java
index 7a93bd5,4474b6f..d297299
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestFileService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestFileService.java
@@@ -20,10 -20,10 +20,10 @@@ package org.apache.openmeetings.webserv
  
  import static java.nio.charset.StandardCharsets.UTF_8;
  import static java.util.UUID.randomUUID;
- import static org.apache.openmeetings.AbstractJUnitDefaults.UNIT_TEST_ARAB_EXT_TYPE;
- import static org.apache.openmeetings.AbstractJUnitDefaults.createUser;
- import static org.apache.openmeetings.AbstractJUnitDefaults.getUser;
 -import static org.apache.openmeetings.AbstractOmServerTest.UNIT_TEST_ARAB_EXT_TYPE;
 -import static org.apache.openmeetings.AbstractOmServerTest.createUser;
 -import static org.apache.openmeetings.AbstractOmServerTest.getUser;
--import static org.junit.Assert.assertFalse;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.UNIT_TEST_ARAB_EXT_TYPE;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.createUser;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.getUser;
++import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestGroupService.java
index 820c4a3,3b24400..8d79e4f
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestGroupService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestGroupService.java
@@@ -18,8 -18,8 +18,8 @@@
   */
  package org.apache.openmeetings.webservice;
  
- import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
- import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
 -import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
 -import static org.apache.openmeetings.AbstractOmServerTest.userpass;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.adminUsername;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.userpass;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestRecordingService.java
index 142cd76,e237380..a7a4f46
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestRecordingService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestRecordingService.java
@@@ -19,7 -19,7 +19,7 @@@
  package org.apache.openmeetings.webservice;
  
  import static java.util.UUID.randomUUID;
- import static org.apache.openmeetings.AbstractJUnitDefaults.getUser;
 -import static org.apache.openmeetings.AbstractOmServerTest.getUser;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.getUser;
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotNull;
  import static org.junit.jupiter.api.Assertions.assertTrue;
diff --cc openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestUserService.java
index 104ab48,e3319ba..f2cf923
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestUserService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestUserService.java
@@@ -20,11 -20,11 +20,11 @@@ package org.apache.openmeetings.webserv
  
  import static java.util.UUID.randomUUID;
  import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
- import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
- import static org.apache.openmeetings.AbstractJUnitDefaults.createPass;
- import static org.apache.openmeetings.AbstractJUnitDefaults.rnd;
- import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
 -import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
 -import static org.apache.openmeetings.AbstractOmServerTest.createPass;
 -import static org.apache.openmeetings.AbstractOmServerTest.rnd;
 -import static org.apache.openmeetings.AbstractOmServerTest.userpass;
  import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.adminUsername;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.createPass;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.rnd;
++import static org.apache.openmeetings.web.test.AbstractOmServerTest.userpass;
  import static org.junit.jupiter.api.Assertions.assertEquals;
  import static org.junit.jupiter.api.Assertions.assertFalse;
  import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@@ -46,8 -46,8 +46,8 @@@ import org.apache.openmeetings.db.dto.u
  import org.apache.openmeetings.db.dto.user.UserDTO;
  import org.apache.openmeetings.db.entity.user.Address;
  import org.apache.openmeetings.db.entity.user.User;
--import org.apache.openmeetings.util.OmException;
  import org.apache.openmeetings.web.app.WebSession;
++import org.apache.openmeetings.util.OmException;
  import org.apache.wicket.util.string.StringValue;
  import org.apache.wicket.util.string.Strings;
  import org.junit.jupiter.api.Test;
diff --cc openmeetings-web/src/test/jetty/web.xml
index 1922c43,1922c43..2805d75
--- a/openmeetings-web/src/test/jetty/web.xml
+++ b/openmeetings-web/src/test/jetty/web.xml
@@@ -30,7 -30,7 +30,7 @@@
  		<param-value>1048576</param-value> <!-- 1MB by default -->
  	</context-param>
  	<listener>
--		<listener-class>org.apache.openmeetings.util.OMContextListener</listener-class>
++		<listener-class>org.apache.openmeetings.web.util.OMContextListener</listener-class>
  	</listener>
  
  	<filter>
diff --cc openmeetings-web/src/test/resources/org/apache/openmeetings/backup/config/configs.xml
index a1e5f24,a1e5f24..bf58577
--- a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/config/configs.xml
+++ b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/config/configs.xml
@@@ -28,7 -28,7 +28,7 @@@ see http://openmeetings.apache.org/Upgr
        <config>
           <id><![CDATA[1]]></id>
           <key><![CDATA[crypt_ClassName]]></key>
--         <value><![CDATA[org.apache.openmeetings.util.crypt.SHA256Implementation]]></value>
++         <value><![CDATA[org.apache.openmeetings.web.util.crypt.SHA256Implementation]]></value>
           <created class="java.util.Date"><![CDATA[1502426201301]]></created>
           <comment><![CDATA[This Class is used for Authentification-Crypting. Be carefull what you do here! If you change it while running previous Pass of users will not be workign anymore! for more Information see http://openmeetings.apache.org/CustomCryptMechanism.html]]></comment>
           <deleted><![CDATA[false]]></deleted>
@@@ -495,7 -495,7 +495,7 @@@
           <id><![CDATA[1]]></id>
           <type><![CDATA[string]]></type>
           <key><![CDATA[crypt.class.name]]></key>
--         <value><![CDATA[org.apache.openmeetings.util.crypt.SCryptImplementation]]></value>
++         <value><![CDATA[org.apache.openmeetings.web.util.crypt.SCryptImplementation]]></value>
           <comment><![CDATA[This Class is used for Authentification-Crypting. Be carefull what you do here! If you change it while running previous Pass of users will not be workign anymore! for more Information see http://openmeetings.apache.org/CustomCryptMechanism.html]]></comment>
        </config>
        <config>
diff --cc openmeetings-web/src/test/resources/org/apache/openmeetings/backup/config/skip/configs.xml
index 4534b62,4534b62..5a04fd1
--- a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/config/skip/configs.xml
+++ b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/config/skip/configs.xml
@@@ -27,7 -27,7 +27,7 @@@ see http://openmeetings.apache.org/Upgr
     <configs>
        <config>
           <id><![CDATA[1]]></id>
--         <value><![CDATA[org.apache.openmeetings.util.crypt.SHA256Implementation]]></value>
++         <value><![CDATA[org.apache.openmeetings.web.util.crypt.SHA256Implementation]]></value>
           <created class="java.util.Date"><![CDATA[1502426201301]]></created>
           <comment><![CDATA[This Class is used for Authentification-Crypting. Be carefull what you do here! If you change it while running previous Pass of users will not be workign anymore! for more Information see http://openmeetings.apache.org/CustomCryptMechanism.html]]></comment>
           <deleted><![CDATA[false]]></deleted>
@@@ -35,7 -35,7 +35,7 @@@
        <config>
           <id><![CDATA[1]]></id>
           <key><![CDATA[deleted_test]]></key>
--         <value><![CDATA[org.apache.openmeetings.util.crypt.SHA256Implementation]]></value>
++         <value><![CDATA[org.apache.openmeetings.web.util.crypt.SHA256Implementation]]></value>
           <created class="java.util.Date"><![CDATA[1502426201301]]></created>
           <comment><![CDATA[This Class is used for Authentification-Crypting. Be carefull what you do here! If you change it while running previous Pass of users will not be workign anymore! for more Information see http://openmeetings.apache.org/CustomCryptMechanism.html]]></comment>
           <deleted><![CDATA[true]]></deleted>
diff --cc openmeetings-webservice/src/main/java/module-info.java
index 350e96b,b3174f1..4953f4d
--- a/openmeetings-webservice/src/main/java/module-info.java
+++ b/openmeetings-webservice/src/main/java/module-info.java
@@@ -16,8 -16,14 +16,15 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
- package org.apache.openmeetings.test;
- 
- public @interface NonJenkinsTests {
 -package org.apache.openmeetings;
++module org.apache.openmeetings.webservice {
++	requires transitive org.apache.openmeetings.service;
  
 -import org.junit.jupiter.api.Test;
 -
 -class TestConnection {
 -
 -	@Test
 -	void testNoop() {
 -		//no-op
 -	}
++	requires java.jws;
++	requires java.ws.rs;
++	requires org.apache.cxf.core;
++	requires io.swagger.v3.oas.annotations;
++	requires org.apache.cxf.frontend.jaxrs;
++	requires java.desktop;
++	requires org.apache.pdfbox;
++	requires java.xml.ws;
  }
diff --cc pom.xml
index 90676e6,973f010..b1c4308
--- a/pom.xml
+++ b/pom.xml
@@@ -77,18 -77,19 +77,19 @@@
  		<forbiddenapis.version>3.1</forbiddenapis.version>
  		<maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version>
  		<frontend-maven-plugin.version>1.11.0</frontend-maven-plugin.version>
+ 		<swagger-plugin.version>2.1.6</swagger-plugin.version>
  		<!-- dependency versions -->
- 		<junit.version>5.8.0-M1</junit.version>
- 		<wicket.version>9.5.0-SNAPSHOT</wicket.version>
- 		<wicket-jquery-ui.version>9.3.2</wicket-jquery-ui.version>
- 		<wicketstuff.version>9.5.0-SNAPSHOT</wicketstuff.version>
- 		<wicket-bootstrap.version>5.0.5</wicket-bootstrap.version>
- 		<font-awesome.version>5.15.3</font-awesome.version>
- 		<spring.version>5.3.9</spring.version>
- 		<tomcat.version>9.0.50</tomcat.version>
- 		<ical4j.version>3.0.21</ical4j.version>
- 		<cxf.version>3.4.4</cxf.version>
- 		<io.prometheus.version>0.11.0</io.prometheus.version>
+ 		<junit.version>5.8.2</junit.version>
+ 		<wicket.version>9.7.0</wicket.version>
+ 		<wicket-jquery-ui.version>9.5.0</wicket-jquery-ui.version>
+ 		<wicketstuff.version>9.7.0</wicketstuff.version>
+ 		<wicket-bootstrap.version>6.0.0-M6-SNAPSHOT</wicket-bootstrap.version>
+ 		<font-awesome.version>5.15.4</font-awesome.version>
 -		<spring.version>5.3.13</spring.version>
++		<spring.version>5.3.14</spring.version>
+ 		<tomcat.version>9.0.56</tomcat.version>
 -		<ical4j.version>3.0.21</ical4j.version>
++		<ical4j.version>4.0.0-alpha10</ical4j.version>
+ 		<cxf.version>3.4.5</cxf.version>
 -		<io.prometheus.version>0.12.0</io.prometheus.version>
++		<io.prometheus.version>0.14.1</io.prometheus.version>
  		<aspectjtools.version>1.9.7</aspectjtools.version>
  		<simple-xml.version>2.7.1</simple-xml.version>
  		<jettison.version>1.4.1</jettison.version>
@@@ -96,37 -97,40 +97,41 @@@
  		<src.pack.skip>false</src.pack.skip>
  		<h2.version>1.4.200</h2.version>
  		<commons-lang3.version>3.12.0</commons-lang3.version>
--		<javax.mail.version>1.6.2</javax.mail.version>
- 		<openjpa.version>3.1.2</openjpa.version>
- 		<asterisk-java.version>3.12.0</asterisk-java.version>
- 		<commons-dbcp.version>2.8.0</commons-dbcp.version>
- 		<commons-pool2.version>2.10.0</commons-pool2.version>
- 		<commons-cli.version>1.4</commons-cli.version>
++		<jakarta.mail.version>2.0.1</jakarta.mail.version>
+ 		<openjpa.version>3.2.1-SNAPSHOT</openjpa.version>
 -		<asterisk-java.version>3.15.0</asterisk-java.version>
++		<asterisk-java.version>3.24.0</asterisk-java.version>
+ 		<commons-dbcp.version>2.9.0</commons-dbcp.version>
+ 		<commons-pool2.version>2.11.1</commons-pool2.version>
+ 		<commons-cli.version>1.5.0</commons-cli.version>
  		<dom4j.version>2.1.3</dom4j.version>
  		<commons-codec.version>1.15</commons-codec.version>
  		<commons-io.version>2.11.0</commons-io.version>
- 		<postgresql.version>42.2.23</postgresql.version>
- 		<mysql.version>8.0.25</mysql.version>
- 		<mssql.version>9.2.1.jre11</mssql.version>
- 		<ojdbc.version>19.11.0.0</ojdbc.version>
+ 		<postgresql.version>42.3.1</postgresql.version>
+ 		<mysql.version>8.0.27</mysql.version>
+ 		<mssql.version>9.4.0.jre11</mssql.version>
+ 		<ojdbc.version>19.12.0.0</ojdbc.version>
  		<commons-collections4.version>4.4</commons-collections4.version>
- 		<xstream.version>1.4.17</xstream.version>
+ 		<xstream.version>1.4.18</xstream.version>
  		<api-all.version>2.1.0</api-all.version>
--		<caldav4j.version>1.0.1</caldav4j.version>
- 		<tika-parsers.version>1.27</tika-parsers.version>
 -		<tika-parsers.version>2.1.0</tika-parsers.version>
++		<caldav4j.version>1.0.3</caldav4j.version>
++		<tika-parsers.version>2.2.0</tika-parsers.version>
  		<commons-text.version>1.9</commons-text.version>
- 		<slf4j.version>1.7.31</slf4j.version>
- 		<logback.version>1.2.3</logback.version>
- 		<jetty.version>9.4.43.v20210629</jetty.version>
+ 		<slf4j.version>1.7.32</slf4j.version>
 -		<logback.version>1.2.4</logback.version>
++		<logback.version>1.3.0-alpha10</logback.version>
+ 		<jetty.version>9.4.44.v20210927</jetty.version>
  		<license.excludedScopes>test</license.excludedScopes>
- 		<bcprov-jdk15on.version>1.69</bcprov-jdk15on.version>
- 		<mockito.version>3.11.2</mockito.version>
+ 		<bcprov-jdk15on.version>1.70</bcprov-jdk15on.version>
 -		<mockito.version>4.1.0</mockito.version>
++		<mockito.version>4.2.0</mockito.version>
  		<quartz.version>2.3.2</quartz.version>
- 		<kurento.version>6.16.1</kurento.version>
+ 		<kurento.version>6.16.2</kurento.version>
  		<jain-sip.version>1.2.307</jain-sip.version><!-- other versions are broken! -->
  		<jasny-bootstrap.version>3.1.3-2</jasny-bootstrap.version>
  		<jodconverter.version>4.4.2</jodconverter.version>
+ 		<jaxb-runtime.version>2.3.3</jaxb-runtime.version>
 +		<javax.servlet-api.version>3.1.0</javax.servlet-api.version>
+ 		<jquery-ui-touch-punch.version>0.2.3-2</jquery-ui-touch-punch.version>
+ 		<apacheds-test-framework.version>2.0.0.AM26</apacheds-test-framework.version>
+ 		<swagger.version>2.1.11</swagger.version>
  		<!--  Exclude all generated code  -->
  		<sonar.exclusions>file:**/generated-sources/**, file:**/jquery-ui.css, file:**/cssemoticons.js, file:**/bootstrap-confirmation.js</sonar.exclusions>
  		<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
@@@ -576,11 -596,11 +597,6 @@@
  			</dependency>
  			<dependency>
  				<groupId>io.prometheus</groupId>
--				<artifactId>simpleclient</artifactId>
--				<version>${io.prometheus.version}</version>
--			</dependency>
--			<dependency>
--				<groupId>io.prometheus</groupId>
  				<artifactId>simpleclient_servlet</artifactId>
  				<version>${io.prometheus.version}</version>
  			</dependency>
@@@ -590,11 -610,11 +606,6 @@@
  				<version>${aspectjtools.version}</version>
  			</dependency>
  			<dependency>
--				<groupId>org.apache.tomcat</groupId>
--				<artifactId>tomcat-catalina</artifactId>
--				<version>${tomcat.version}</version>
--			</dependency>
--			<dependency>
  				<groupId>org.codehaus.jettison</groupId>
  				<artifactId>jettison</artifactId>
  				<version>${jettison.version}</version>
@@@ -712,6 -771,204 +762,204 @@@
  				<version>${jain-sip.version}</version>
  			</dependency>
  			<dependency>
+ 				<!-- required for JAXB/CXF -->
+ 				<groupId>org.glassfish.jaxb</groupId>
+ 				<artifactId>jaxb-runtime</artifactId>
+ 				<version>${jaxb-runtime.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.webjars</groupId>
+ 				<artifactId>jquery-ui-touch-punch</artifactId>
+ 				<version>${jquery-ui-touch-punch.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.apache.commons</groupId>
+ 				<artifactId>commons-collections4</artifactId>
+ 				<version>${commons-collections4.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.thoughtworks.xstream</groupId>
+ 				<artifactId>xstream</artifactId>
+ 				<version>${xstream.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.apache.directory.api</groupId>
+ 				<artifactId>api-all</artifactId>
+ 				<version>${api-all.version}</version>
+ 				<exclusions>
+ 					<exclusion>
+ 						<groupId>xml-apis</groupId>
+ 						<artifactId>xml-apis</artifactId>
+ 					</exclusion>
+ 				</exclusions>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.sun.mail</groupId>
 -				<artifactId>javax.mail</artifactId>
 -				<version>${javax.mail.version}</version>
++				<artifactId>jakarta.mail</artifactId>
++				<version>${jakarta.mail.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.dom4j</groupId>
+ 				<artifactId>dom4j</artifactId>
+ 				<version>${dom4j.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>commons-codec</groupId>
+ 				<artifactId>commons-codec</artifactId>
+ 				<version>${commons-codec.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>commons-io</groupId>
+ 				<artifactId>commons-io</artifactId>
+ 				<version>${commons-io.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.wicketstuff</groupId>
+ 				<artifactId>wicketstuff-datastore-hazelcast</artifactId>
+ 				<version>${wicketstuff.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.apache.openjpa</groupId>
+ 				<artifactId>openjpa</artifactId>
+ 				<version>${openjpa.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.apache.commons</groupId>
+ 				<artifactId>commons-dbcp2</artifactId>
+ 				<version>${commons-dbcp.version}</version>
+ 				<exclusions>
+ 					<exclusion>
+ 						<groupId>commons-logging</groupId>
+ 						<artifactId>commons-logging</artifactId>
+ 					</exclusion>
+ 				</exclusions>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.apache.commons</groupId>
+ 				<artifactId>commons-pool2</artifactId>
+ 				<version>${commons-pool2.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.h2database</groupId>
+ 				<artifactId>h2</artifactId>
+ 				<version>${h2.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.postgresql</groupId>
+ 				<artifactId>postgresql</artifactId>
+ 				<version>${postgresql.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.microsoft.sqlserver</groupId>
+ 				<artifactId>mssql-jdbc</artifactId>
+ 				<version>${mssql.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.oracle.database.jdbc</groupId>
+ 				<artifactId>ojdbc10</artifactId>
+ 				<version>${ojdbc.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>commons-cli</groupId>
+ 				<artifactId>commons-cli</artifactId>
+ 				<version>${commons-cli.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.github.caldav4j</groupId>
+ 				<artifactId>caldav4j</artifactId>
+ 				<version>${caldav4j.version}</version>
+ 				<exclusions>
+ 					<exclusion>
+ 						<!-- Remove the need for ehcache, since we use the Methods directly -->
+ 						<groupId>net.sf.ehcache</groupId>
+ 						<artifactId>ehcache</artifactId>
+ 					</exclusion>
+ 				</exclusions>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>mysql</groupId>
+ 				<artifactId>mysql-connector-java</artifactId>
+ 				<version>${mysql.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.webjars</groupId>
+ 				<artifactId>jasny-bootstrap</artifactId>
+ 				<version>${jasny-bootstrap.version}</version>
+ 				<exclusions>
+ 					<exclusion>
+ 						<groupId>org.webjars</groupId>
+ 						<artifactId>bootstrap</artifactId>
+ 					</exclusion>
+ 				</exclusions>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.wicketstuff</groupId>
+ 				<artifactId>wicketstuff-dashboard-core</artifactId>
+ 				<version>${wicketstuff.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.googlecode.wicket-jquery-ui</groupId>
+ 				<artifactId>wicket-jquery-ui-core</artifactId>
+ 				<version>${wicket-jquery-ui.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.googlecode.wicket-jquery-ui</groupId>
+ 				<artifactId>wicket-jquery-ui</artifactId>
+ 				<version>${wicket-jquery-ui.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.googlecode.wicket-jquery-ui</groupId>
+ 				<artifactId>wicket-jquery-ui-calendar</artifactId>
+ 				<version>${wicket-jquery-ui.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>com.googlecode.wicket-jquery-ui</groupId>
+ 				<artifactId>wicket-jquery-ui-plugins</artifactId>
+ 				<version>${wicket-jquery-ui.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.wicketstuff</groupId>
+ 				<artifactId>wicketstuff-urlfragment</artifactId>
+ 				<version>${wicketstuff.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.wicketstuff</groupId>
+ 				<artifactId>wicketstuff-select2</artifactId>
+ 				<version>${wicketstuff.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.wicketstuff</groupId>
+ 				<artifactId>jqplot</artifactId>
+ 				<version>${wicketstuff.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>de.agilecoders.wicket</groupId>
+ 				<artifactId>wicket-bootstrap-extensions</artifactId>
+ 				<version>${wicket-bootstrap.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>de.agilecoders.wicket</groupId>
+ 				<artifactId>wicket-bootstrap-themes</artifactId>
+ 				<version>${wicket-bootstrap.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.webjars</groupId>
+ 				<artifactId>font-awesome</artifactId>
+ 				<version>${font-awesome.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.quartz-scheduler</groupId>
+ 				<artifactId>quartz</artifactId>
+ 				<version>${quartz.version}</version>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>io.swagger.core.v3</groupId>
+ 				<artifactId>swagger-annotations</artifactId>
+ 				<version>${swagger.version}</version>
+ 			</dependency>
+ 
+ 			<!-- TESTS -->
+ 			<dependency>
  				<groupId>org.mockito</groupId>
  				<artifactId>mockito-inline</artifactId>
  				<version>${mockito.version}</version>
@@@ -729,19 -986,37 +977,40 @@@
  				<version>${junit.version}</version>
  				<scope>test</scope>
  			</dependency>
+ 			<dependency>
++				<groupId>org.junit.jupiter</groupId>
++				<artifactId>junit-jupiter-engine</artifactId>
++				<version>${junit.version}</version>
++				<scope>test</scope>
++			</dependency>
++			<dependency>
+ 				<groupId>org.apache.directory.server</groupId>
+ 				<artifactId>apacheds-test-framework</artifactId>
+ 				<version>${apacheds-test-framework.version}</version>
+ 				<exclusions>
+ 					<exclusion>
+ 						<groupId>org.apache.directory.api</groupId>
+ 						<artifactId>api-ldap-schema-data</artifactId>
+ 					</exclusion>
++					<exclusion>
++						<groupId>junit</groupId>
++						<artifactId>junit</artifactId>
++					</exclusion>
+ 				</exclusions>
+ 				<scope>test</scope>
+ 			</dependency>
+ 			<dependency>
+ 				<groupId>org.apache.tomcat.embed</groupId>
+ 				<artifactId>tomcat-embed-websocket</artifactId>
+ 				<version>${tomcat.version}</version>
+ 				<scope>test</scope>
+ 			</dependency>
  		</dependencies>
  	</dependencyManagement>
  	<dependencies>
  		<dependency>
  			<groupId>org.junit.jupiter</groupId>
--			<artifactId>junit-jupiter-api</artifactId>
--			<version>${junit.version}</version>
--			<scope>test</scope>
--		</dependency>
--		<dependency>
--			<groupId>org.junit.jupiter</groupId>
  			<artifactId>junit-jupiter-engine</artifactId>
--			<version>${junit.version}</version>
  			<scope>test</scope>
  		</dependency>
  		<dependency>
@@@ -954,6 -1194,37 +1188,38 @@@
  				</plugin>
  				<plugin>
  					<groupId>org.apache.maven.plugins</groupId>
+ 					<artifactId>maven-checkstyle-plugin</artifactId>
+ 					<version>${maven-checkstyle-plugin.version}</version>
+ 					<configuration>
+ 						<checkstyleRules>
+ 							<module name = "Checker">
+ 								<property name="fileExtensions" value="java,js,css,xml"/>
+ 								<module name="NewlineAtEndOfFile">
+ 									<property name="fileExtensions" value="java"/>
+ 								</module>
+ 								<module name="TreeWalker">
+ 									<module name="UnusedImports"></module>
+ 									<module name="RegexpSinglelineJava">
+ 										<property name="format" value="^\t* "/>
+ 										<property name="message" value="Indent must use tab characters"/>
+ 										<property name="ignoreComments" value="true"/>
+ 									</module>
+ 								</module>
+ 								<module name="RegexpSingleline">
+ 									<property name="format" value="\s+$"/>
+ 									<property name="message" value="Line has trailing spaces."/>
+ 								</module>
+ 							</module>
+ 						</checkstyleRules>
+ 						<includeTestSourceDirectory>true</includeTestSourceDirectory>
+ 						<encoding>UTF-8</encoding>
+ 						<consoleOutput>true</consoleOutput>
+ 						<failsOnError>true</failsOnError>
++						<excludes>**/module-info.java,**/module-info.test</excludes>
+ 					</configuration>
+ 				</plugin>
+ 				<plugin>
+ 					<groupId>org.apache.maven.plugins</groupId>
  					<artifactId>maven-assembly-plugin</artifactId>
  					<version>${maven-assembly-plugin.version}</version>
  				</plugin>
@@@ -973,7 -1251,8 +1246,9 @@@
  					<version>${maven-surefire-plugin.version}</version>
  					<configuration>
  						<forkCount>1</forkCount>
- 						<reuseForks>false</reuseForks>
+ 						<reuseForks>true</reuseForks>
++						<useModulePath>false</useModulePath>
+ 						<excludedGroups>${excluded.test.groups}</excludedGroups>
  						<includes>
  							<include>**/Test*.java</include>
  						</includes>