[OPENMEETINGS-2733] some Sonar issues are addressed
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
index c74b348..52462c8 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
@@ -259,9 +259,9 @@
 		final BaseRtpEndpoint endpoint = getEndpointForUser(sid, uid);
 		final String sdpAnswer = endpoint.processOffer(sdpOffer);
 
-		if (endpoint instanceof WebRtcEndpoint) {
+		if (endpoint instanceof WebRtcEndpoint rtcEndpoint) {
 			log.debug("gather candidates, sid {}, uid {}", sid, uid);
-			((WebRtcEndpoint)endpoint).gatherCandidates(); // this one might throw Exception
+			rtcEndpoint.gatherCandidates(); // this one might throw Exception
 		}
 		log.trace("USER {}: SdpAnswer is {}", this.uid, sdpAnswer);
 		kHandler.sendClient(sid, newKurentoMsg()
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index 22c942f..aa4d6af 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -466,9 +466,8 @@
 					log.warn("Invalid MediaPipeline {} detected, will be dropped, tags: {}", pipe.getId(), tags);
 					pipe.release();
 				}, objCheckTimeout, MILLISECONDS);
-			} else if (evt.getObject() instanceof Endpoint) {
+			} else if (evt.getObject() instanceof Endpoint curPoint) {
 				// endpoint created
-				Endpoint curPoint = (Endpoint)evt.getObject();
 				final String eoid = curPoint.getId();
 				Class<? extends Endpoint> clazz = null;
 				if (curPoint instanceof WebRtcEndpoint) {
diff --git 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
index 33d3a8e..bbe8dc4 100644
--- 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
@@ -90,16 +90,13 @@
 	}
 
 	public static boolean send(IClusterWsMessage msg) {
-		if (msg instanceof WsMessageChat) {
-			if (msg instanceof WsMessageChat2User) {
-				WsMessageChat2User m = (WsMessageChat2User)msg;
-				sendUser(m.getUserId(), m.getChatMessage(), m.getMsg(), false);
-			} else if (msg instanceof WsMessageChat2All) {
-				WsMessageChat2All m = (WsMessageChat2All)msg;
-				sendAll(m.getChatMessage(), m.getMsg(), false);
-			} else if (msg instanceof WsMessageChat) {
-				WsMessageChat m = (WsMessageChat)msg;
-				sendRoom(m.getChatMessage(), m.getMsg(), false);
+		if (msg instanceof WsMessageChat chatMsg) {
+			if (msg instanceof WsMessageChat2User userMsg) {
+				sendUser(userMsg.getUserId(), userMsg.getChatMessage(), userMsg.getMsg(), false);
+			} else if (msg instanceof WsMessageChat2All allMsg) {
+				sendAll(allMsg.getChatMessage(), allMsg.getMsg(), false);
+			} else {
+				sendRoom(chatMsg.getChatMessage(), chatMsg.getMsg(), false);
 			}
 			return true;
 		}
diff --git 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
index ee5b4c6..fa40ac0 100644
--- 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
@@ -88,7 +88,7 @@
 	}
 
 	public static void sendClient(final IWsClient omClient, final RoomMessage m) {
-		log.trace("Sending WebSocket message to client: {} {}", m.getType(), m instanceof TextRoomMessage ? ((TextRoomMessage)m).getText() : "");
+		log.trace("Sending WebSocket message to client: {} {}", m.getType(), m instanceof TextRoomMessage txtMsg ? txtMsg.getText() : "");
 		sendClient(omClient, c -> {
 			try {
 				c.sendMessage(m);
@@ -116,19 +116,16 @@
 	}
 
 	public static boolean send(IClusterWsMessage msg) {
-		if (msg instanceof WsMessageRoomMsg) {
-			sendRoom(((WsMessageRoomMsg)msg).msg(), false);
-		} else if (msg instanceof WsMessageRoomOthers) {
-			WsMessageRoomOthers m = (WsMessageRoomOthers)msg;
-			sendRoomOthers(m.getRoomId(), m.getUid(), m.getMsg(), false);
-		} else if (msg instanceof WsMessageRoom) {
-			WsMessageRoom m = (WsMessageRoom)msg;
-			sendRoom(m.getRoomId(), m.getMsg(), false);
-		} else if (msg instanceof WsMessageUser) {
-			WsMessageUser m = (WsMessageUser)msg;
-			sendUser(m.getUserId(), m.getMsg(), null, false);
-		} else if (msg instanceof WsMessageAll) {
-			sendAll(((WsMessageAll)msg).msg(), false);
+		if (msg instanceof WsMessageRoomMsg msgRoom) {
+			sendRoom(msgRoom.msg(), false);
+		} else if (msg instanceof WsMessageRoomOthers msgRoomOthers) {
+			sendRoomOthers(msgRoomOthers.getRoomId(), msgRoomOthers.getUid(), msgRoomOthers.getMsg(), false);
+		} else if (msg instanceof WsMessageRoom roomMsg) {
+			sendRoom(roomMsg.getRoomId(), roomMsg.getMsg(), false);
+		} else if (msg instanceof WsMessageUser msgUser) {
+			sendUser(msgUser.getUserId(), msgUser.getMsg(), null, false);
+		} else if (msg instanceof WsMessageAll msgAll) {
+			sendAll(msgAll.msg(), false);
 		}
 		return true;
 	}
@@ -141,7 +138,7 @@
 		if (publish) {
 			publish(new WsMessageRoomMsg(m));
 		}
-		log.trace("Sending WebSocket message to room: {} {}", m.getType(), m instanceof TextRoomMessage ? ((TextRoomMessage)m).getText() : "");
+		log.trace("Sending WebSocket message to room: {} {}", m.getType(), m instanceof TextRoomMessage txtMsg ? txtMsg.getText() : "");
 		sendRoom(m.getRoomId(), (t, c) -> t.sendMessage(m), alwaysTrue());
 	}
 
diff --git 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
index e2692ef..02c13e2 100644
--- 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
@@ -94,8 +94,8 @@
 	public void updateClusterAddresses(String addresses) throws UnknownHostException {
 		OpenJPAConfiguration cfg = ((OpenJPAEntityManagerSPI)OpenJPAPersistence.cast(em)).getConfiguration();
 		RemoteCommitProvider prov = cfg.getRemoteCommitEventManager().getRemoteCommitProvider();
-		if (prov instanceof TCPRemoteCommitProvider) {
-			((TCPRemoteCommitProvider)prov).setAddresses(addresses);
+		if (prov instanceof TCPRemoteCommitProvider tcpProv) {
+			tcpProv.setAddresses(addresses);
 		}
 	}
 
@@ -312,20 +312,12 @@
 					, CONFIG_CSP_MEDIA, CONFIG_CSP_SCRIPT, CONFIG_CSP_STYLE, CONFIG_CSP_ENABLED:
 				updateCsp();
 				break;
-			case CONFIG_SMTP_SERVER:
-			case CONFIG_SMTP_PORT:
-			case CONFIG_SMTP_SYSTEM_EMAIL:
-			case CONFIG_SMTP_USER:
-			case CONFIG_SMTP_PASS:
-			case CONFIG_SMTP_TLS:
-			case CONFIG_SMTP_SSL:
-			case CONFIG_REPLY_TO_ORGANIZER:
-			case CONFIG_SMTP_TIMEOUT_CON:
-			case CONFIG_SMTP_TIMEOUT:
+			case CONFIG_SMTP_SERVER, CONFIG_SMTP_PORT, CONFIG_SMTP_SYSTEM_EMAIL, CONFIG_SMTP_USER
+					, CONFIG_SMTP_PASS, CONFIG_SMTP_TLS, CONFIG_SMTP_SSL, CONFIG_REPLY_TO_ORGANIZER
+					, CONFIG_SMTP_TIMEOUT_CON, CONFIG_SMTP_TIMEOUT:
 				reloadMailSettings();
 				break;
-			case CONFIG_APPOINTMENT_REMINDER_MINUTES:
-			case CONFIG_APPOINTMENT_PRE_START_MINUTES:
+			case CONFIG_APPOINTMENT_REMINDER_MINUTES, CONFIG_APPOINTMENT_PRE_START_MINUTES:
 				reloadAppointmentSettings();
 				break;
 			case CONFIG_RECORDING_ENABLED:
@@ -334,6 +326,8 @@
 			case CONFIG_THEME:
 				reloadTheme();
 				break;
+			default:
+				break;
 		}
 		return entity;
 	}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
index 0422163..f5928cc 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
@@ -97,7 +97,7 @@
 	@Override
 	public FileItem get(Long id) {
 		BaseFileItem bf = super.get(id);
-		return bf instanceof FileItem ? (FileItem)bf : null;
+		return bf instanceof FileItem fi ? fi : null;
 	}
 
 	public FileItem get(String externalId, String externalType) {
@@ -235,9 +235,7 @@
 			if (f.exists()) {
 				File base = OmFileHelper.getUploadFilesDir();
 				switch (f.getType()) {
-					case IMAGE:
-					case PRESENTATION:
-					case VIDEO:
+					case IMAGE, PRESENTATION, VIDEO:
 						File tFolder = new File(base, f.getHash());
 
 						if (tFolder.exists()) {
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
index 3caedf9..b452787 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
@@ -58,7 +58,7 @@
 	@Override
 	public Recording get(Long id) {
 		BaseFileItem bf = super.get(id);
-		return bf instanceof Recording ? (Recording)bf : null;
+		return bf instanceof Recording rec ? rec : null;
 	}
 
 	public List<Recording> getByExternalUser(String externalId, String externalType) {
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/OAuthUser.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/OAuthUser.java
index ed055b8..37775c7 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/OAuthUser.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/OAuthUser.java
@@ -106,8 +106,7 @@
 		// will only check 1 additional level
 		for (String key : json.keySet()) {
 			Object o = json.get(key);
-			if (o instanceof JSONArray) {
-				JSONArray ja = (JSONArray)o;
+			if (o instanceof JSONArray ja) {
 				//Assuming here array consist of objects
 				for (int i = 0; i < ja.length(); ++i) {
 					JSONObject jao = ja.getJSONObject(i);
@@ -116,8 +115,7 @@
 						return res;
 					}
 				}
-			} else if (o instanceof JSONObject) {
-				JSONObject jo = (JSONObject)o;
+			} else if (o instanceof JSONObject jo) {
 				JSONObject res = getJSON(jo, prop);
 				if (res != null) {
 					return res;
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
index 06082fd..6d5d020 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
@@ -196,8 +196,7 @@
 	public Client set(Activity a) {
 		activities.add(a);
 		switch (a) {
-			case VIDEO:
-			case AUDIO:
+			case VIDEO, AUDIO:
 				if (hasActivity(Activity.AUDIO) && hasActivity(Activity.VIDEO)) {
 					activities.add(Activity.AUDIO_VIDEO);
 				}
@@ -214,8 +213,7 @@
 	public Client remove(Activity a) {
 		activities.remove(a);
 		switch (a) {
-			case VIDEO:
-			case AUDIO:
+			case VIDEO, AUDIO:
 				activities.remove(Activity.AUDIO_VIDEO);
 				break;
 			case AUDIO_VIDEO:
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index 85035e8..ccab06e 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -335,8 +335,7 @@
 						f = new File(d, String.format(FILE_NAME_FMT, getHash(), ext == null ? EXTENSION_PDF : ext));
 					}
 					break;
-				case POLL_CHART:
-				case FOLDER:
+				case POLL_CHART, FOLDER:
 				default:
 			}
 		}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/RoomMapper.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/RoomMapper.java
index 250b21d..51020af 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/RoomMapper.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/RoomMapper.java
@@ -132,8 +132,7 @@
 					i.setValidFrom(new Date(SDF.parse(dto.getValidFrom()).getTime() - (5 * 60 * 1000)));
 					i.setValidTo(SDF.parse(dto.getValidTo()));
 					break;
-				case ENDLESS:
-				case ONE_TIME:
+				case ENDLESS, ONE_TIME:
 				default:
 					break;
 			}
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/WbConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/WbConverter.java
index c0d2124..ed7c8fb 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/WbConverter.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/WbConverter.java
@@ -161,10 +161,10 @@
 
 	private static int getInt(List<?> props, int idx) {
 		Object o = props.get(idx);
-		if (o instanceof Number) {
-			return ((Number) o).intValue();
-		} else if (o instanceof String) {
-			return NumberUtils.toInt((String)o);
+		if (o instanceof Number num) {
+			return num.intValue();
+		} else if (o instanceof String str) {
+			return NumberUtils.toInt(str);
 		}
 		return 0;
 	}
@@ -275,12 +275,10 @@
 					case "paint":
 						processPath(wb, props);
 						break;
-					case "line":
-					case "uline":
+					case "line", "uline":
 						processLine(wb, props);
 						break;
-					case "rectangle":
-					case "drawarrow": // will replace with rectangle
+					case "rectangle", "drawarrow": // "drawarrow" will be replaced with rectangle
 						add(wb, processRect(wb, props));
 						break;
 					case "ellipse":
@@ -298,6 +296,8 @@
 					case "flv":
 						processVid(wb, props);
 						break;
+					default:
+						break;
 				}
 			}
 		}
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/AppointmentManager.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/AppointmentManager.java
index 30b91ae..5c858ea 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/AppointmentManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/AppointmentManager.java
@@ -364,8 +364,7 @@
 
 						if (p != null) {
 							for (Object o : (Collection<?>) p.getValue()) {
-								if (o instanceof Element) {
-									Element e = (Element) o;
+								if (o instanceof Element e) {
 									String name = DomUtil.getAttribute(e, "name", null);
 									if ("VEVENT".equals(name)) {
 										isVevent = true;
@@ -414,8 +413,7 @@
 
 		if (property != null) {
 			for (Object o : (Collection<?>) property.getValue()) {
-				if (o instanceof Element) {
-					Element e = (Element) o;
+				if (o instanceof Element e) {
 					value = DomUtil.getTextTrim(e);
 					break;
 				}
@@ -437,11 +435,8 @@
 			DavPropertyName calProp = DavPropertyName.create("calendar", CalDAVConstants.NAMESPACE_CALDAV);
 
 			for (Object o : (Collection<?>) resourcetype.getValue()) {
-				if (o instanceof Element) {
-					Element e = (Element) o;
-					if (e.getLocalName().equals(calProp.getName())) {
-						isCalendar = true;
-					}
+				if (o instanceof Element e && e.getLocalName().equals(calProp.getName())) {
+					isCalendar = true;
 				}
 			}
 		}
@@ -536,9 +531,7 @@
 			String path = ensureTrailingSlash(calendar.getHref());
 
 			switch (type) {
-				case WEBDAV_SYNC:
-				case CTAG:
-				case ETAG:
+				case WEBDAV_SYNC, CTAG, ETAG:
 					calendarHandler = new EtagsHandler(path, calendar, client, context, appointmentDao, utils);
 					break;
 				default:
@@ -570,9 +563,7 @@
 			String path = calendar.getHref();
 
 			switch (type) {
-				case WEBDAV_SYNC:
-				case CTAG:
-				case ETAG:
+				case WEBDAV_SYNC, CTAG, ETAG:
 					calendarHandler = new EtagsHandler(path, calendar, client, context, appointmentDao, utils);
 					break;
 				default:
diff --git 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
index 0ab0109..3ff8edf 100644
--- 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
@@ -202,8 +202,7 @@
 				invitation.setValidFrom(allowedStart(mmStart));
 				invitation.setValidTo(mmEnd);
 				break;
-			case ENDLESS:
-			case ONE_TIME:
+			case ENDLESS, ONE_TIME:
 			default:
 				break;
 		}
diff --git 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
index 231652b..c630a64 100644
--- 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
@@ -101,8 +101,7 @@
 
 			@Override
 			protected void populateItem(final Item<IDataProviderEntity> item) {
-				if (item.getModelObject() instanceof KStreamDto) {
-					KStreamDto kStream = (KStreamDto)item.getModelObject();
+				if (item.getModelObject() instanceof KStreamDto kStream) {
 					item.add(new Label("type", kStream.getType() + " " + kStream.getStreamType()));
 					item.add(new Label("login", kStream.getUid()));
 					item.add(new Label("since", getDateFormat().format(kStream.getConnectedSince())));
@@ -110,8 +109,7 @@
 					item.add(new Label("server", ""));
 					item.add(new Label("kick", ""));
 				}
-				if (item.getModelObject() instanceof Client) {
-					Client c = (Client)item.getModelObject();
+				if (item.getModelObject() instanceof Client c) {
 					item.add(new Label("type", "html5"));
 					item.add(new Label("login", c.getUser().getLogin()));
 					item.add(new Label("since", getDateFormat().format(c.getConnectedSince())));
diff --git 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
index a2a545a..3e42839 100644
--- 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
@@ -287,8 +287,7 @@
 			@Override
 			public void onEndRequest(RequestCycle cycle) {
 				Response resp = cycle.getResponse();
-				if (resp instanceof WebResponse) {
-					WebResponse wresp = (WebResponse)resp;
+				if (resp instanceof WebResponse wresp) {
 					if (wresp.isHeaderSupported()) {
 						wresp.setHeader("X-XSS-Protection", "1; mode=block");
 						wresp.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
index 6745a5c..ca2132b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
@@ -406,8 +406,8 @@
 
 	private BasePanel getCurrentPanel() {
 		Component prev = contents.get(CHILD_ID);
-		if (prev instanceof BasePanel) {
-			return (BasePanel)prev;
+		if (prev instanceof BasePanel basePrev) {
+			return basePrev;
 		}
 		return null;
 	}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.java
index c2c382e..de23bd1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/datetime/AbstractOmDateTimePicker.java
@@ -137,16 +137,16 @@
 
 	public static String getDateTimeFormat(Locale loc) {
 		DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, loc);
-		if (fmt instanceof SimpleDateFormat) {
-			return ((SimpleDateFormat)fmt).toPattern();
+		if (fmt instanceof SimpleDateFormat sfmt) {
+			return sfmt.toPattern();
 		}
 		return DEFAULT_DATE_TIME_FORMAT;
 	}
 
 	public static String getDateFormat() {
 		DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT, Session.get().getLocale());
-		if (fmt instanceof SimpleDateFormat) {
-			return ((SimpleDateFormat)fmt).toPattern();
+		if (fmt instanceof SimpleDateFormat sfmt) {
+			return sfmt.toPattern();
 		}
 		return DEFAULT_DATE_FORMAT;
 	}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
index e507ac4..5909d3b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
@@ -178,16 +178,6 @@
 		}
 	}
 
-	private void setVideoStyle(final BaseFileItem f, StringBuilder style) {
-		style.append("recording ");
-		if (f instanceof Recording) {
-			Status st = ((Recording)f).getStatus();
-			if (Status.RECORDING == st || Status.CONVERTING == st) {
-				style.append("processing ");
-			}
-		}
-	}
-
 	@Override
 	public boolean isStopEventEnabled() {
 		return false;
@@ -242,6 +232,16 @@
 	private class StyleBehavior extends Behavior {
 		private static final long serialVersionUID = 1L;
 
+		private void setVideoStyle(final BaseFileItem f, StringBuilder style) {
+			style.append("recording ");
+			if (f instanceof Recording rec) {
+				Status st = rec.getStatus();
+				if (Status.RECORDING == st || Status.CONVERTING == st) {
+					style.append("processing ");
+				}
+			}
+		}
+
 		private CharSequence getItemStyle() {
 			final BaseFileItem f = (BaseFileItem)getDefaultModelObject();
 			boolean open = State.EXPANDED == treePanel.tree.getState(f);
@@ -265,8 +265,7 @@
 					case WML_FILE:
 						style.append(CSS_CLASS_FILE).append("wml ");
 						break;
-					case VIDEO:
-					case RECORDING:
+					case VIDEO, RECORDING:
 						setVideoStyle(f, style);
 						break;
 					case PRESENTATION:
diff --git 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
index 1517e47..fde3e08 100644
--- 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
@@ -137,8 +137,7 @@
 
 	public List<BaseFileItem> getByParent(BaseFileItem node, Long id) {
 		List<BaseFileItem> list = new ArrayList<>();
-		if (node instanceof Recording) {
-			Recording rec = (Recording)node;
+		if (node instanceof Recording rec) {
 			List<Recording> recList;
 			if (id == null) {
 				if (node.getOwnerId() == null) {
diff --git 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
index 53a2044..baf1e84 100644
--- 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
@@ -68,7 +68,7 @@
 	private final NotificationPanel feedback = new NotificationPanel("feedback");
 	private final IValidator<String> emailValidator = RfcCompliantEmailAddressValidator.getInstance();
 	private final RequiredTextField<String> name = new RequiredTextField<>("name", Model.of((String)null));
-	private final RadioGroup<Type> rg = new RadioGroup<>("type", Model.of(Type.email));
+	private final RadioGroup<Type> rg = new RadioGroup<>("type", Model.of(Type.EMAIL));
 	private final WebMarkupContainer label = new WebMarkupContainer("label");
 	private final Captcha captcha = new Captcha("captcha");
 	private ForgetPasswordForm form = new ForgetPasswordForm("form");
@@ -82,8 +82,8 @@
 	private MailHandler mailHandler;
 
 	enum Type {
-		email
-		, login
+		EMAIL
+		, LOGIN
 	}
 
 	public ForgetPasswordDialog(String id, Modal<String> forgetInfoDialog) {
@@ -106,12 +106,12 @@
 	}
 
 	private void updateLabel(IPartialPageRequestHandler handler) {
-		IModel<String> lbl = new ResourceModel(rg.getModelObject() == Type.email ? "315" : "316");
+		IModel<String> lbl = new ResourceModel(rg.getModelObject() == Type.EMAIL ? "315" : "316");
 		name.setLabel(lbl);
-		name.add(AttributeModifier.replace("type", rg.getModelObject() == Type.email ? "email" : "text"));
+		name.add(AttributeModifier.replace("type", rg.getModelObject() == Type.EMAIL ? "email" : "text"));
 		name.add(AttributeModifier.replace("title", lbl));
 		name.add(AttributeModifier.replace("placeholder", lbl));
-		label.add(AttributeModifier.replace("class", rg.getModelObject() == Type.email ? "fa fa-at" : "fa fa-user"));
+		label.add(AttributeModifier.replace("class", rg.getModelObject() == Type.EMAIL ? "fa fa-at" : "fa fa-user"));
 		if (handler != null) {
 			handler.add(name, label);
 		}
@@ -120,7 +120,7 @@
 	@Override
 	public Modal<String> show(IPartialPageRequestHandler handler) {
 		name.setModelObject(null);
-		rg.setModelObject(Type.email);
+		rg.setModelObject(Type.EMAIL);
 		captcha.refresh(handler);
 		handler.add(rg);
 		updateLabel(handler);
@@ -155,8 +155,8 @@
 			add(label.setOutputMarkupId(true));
 			add(name.setOutputMarkupId(true));
 			add(captcha);
-			add(rg.add(new Radio<>("email", Model.of(Type.email)))
-					.add(new Radio<>("login", Model.of(Type.login)))
+			add(rg.add(new Radio<>("email", Model.of(Type.EMAIL)))
+					.add(new Radio<>("login", Model.of(Type.LOGIN)))
 					.setOutputMarkupId(true));
 			rg.add(new AjaxFormChoiceComponentUpdatingBehavior() {
 				private static final long serialVersionUID = 1L;
@@ -188,13 +188,13 @@
 			if (n != null) {
 				IValidatable<String> val = new Validatable<>(n);
 				Type type = rg.getConvertedInput();
-				if (type == Type.email) {
+				if (type == Type.EMAIL) {
 					emailValidator.validate(val);
 					if (!val.isValid()) {
 						error(getString("234"));
 					}
 				}
-				if (type == Type.login && n.length() < getMinLoginLength()) {
+				if (type == Type.LOGIN && n.length() < getMinLoginLength()) {
 					error(getString("104"));
 				}
 			}
@@ -217,7 +217,7 @@
 		private void onSubmit(AjaxRequestTarget target) {
 			String nm = name.getModelObject();
 			Type type = rg.getModelObject();
-			resetUser(type == Type.email ? nm : "", type == Type.login ? nm : "");
+			resetUser(type == Type.EMAIL ? nm : "", type == Type.LOGIN ? nm : "");
 			wasReset = true;
 			ForgetPasswordDialog.this.close(target);
 		}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
index 57d39fc..f026a54 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
@@ -248,8 +248,8 @@
 			try {
 				Object o = userManager.registerUser(login, password, lastName
 						, firstName, email, country, lang, tzModel.getObject());
-				if (o instanceof String) {
-					registerInfo.setModelObject(getString((String)o));
+				if (o instanceof String str) {
+					registerInfo.setModelObject(getString(str));
 					target.add(registerInfo.get("content"));
 				}
 			} catch (Exception e) {
diff --git 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
index df46801..821ab68 100644
--- 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
@@ -314,8 +314,7 @@
 				@Override
 				public void onDrop(AjaxRequestTarget target, Component component) {
 					Object o = component.getDefaultModelObject();
-					if (wb.isVisible() && o instanceof BaseFileItem) {
-						BaseFileItem f = (BaseFileItem)o;
+					if (wb.isVisible() && o instanceof BaseFileItem f) {
 						if (sidebar.getFilesPanel().isSelected(f)) {
 							for (Entry<String, BaseFileItem> e : sidebar.getFilesPanel().getSelected().entrySet()) {
 								wb.sendFileToWb(e.getValue(), false);
@@ -423,8 +422,7 @@
 		Client curClient = getClient();
 		if (curClient != null && event.getPayload() instanceof WebSocketPushPayload) {
 			WebSocketPushPayload wsEvent = (WebSocketPushPayload) event.getPayload();
-			if (wsEvent.getMessage() instanceof RoomMessage) {
-				RoomMessage m = (RoomMessage)wsEvent.getMessage();
+			if (wsEvent.getMessage() instanceof RoomMessage m) {
 				IPartialPageRequestHandler handler = wsEvent.getHandler();
 				switch (m.getType()) {
 					case POLL_CREATED:
@@ -454,35 +452,35 @@
 						roomClosed.show(handler);
 						break;
 					case REQUEST_RIGHT_MODERATOR:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightModerator), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_MODERATOR), handler);
 						break;
 					case REQUEST_RIGHT_PRESENTER:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightPresenter), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_PRESENTER), handler);
 						break;
 					case REQUEST_RIGHT_WB:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightWb), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_WB), handler);
 						break;
 					case REQUEST_RIGHT_SHARE:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightShare), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_SHARE), handler);
 						break;
 					case REQUEST_RIGHT_REMOTE:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightRemote), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_REMOTE), handler);
 						break;
 					case REQUEST_RIGHT_A:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightA), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_A), handler);
 						break;
 					case REQUEST_RIGHT_AV:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightAv), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_AV), handler);
 						break;
 					case REQUEST_RIGHT_MUTE_OTHERS:
-						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.reqRightMuteOthers), handler);
+						sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_MUTE_OTHERS), handler);
 						break;
 					case ACTIVITY_REMOVE:
 						sidebar.removeActivity(((TextRoomMessage)m).getText(), handler);
 						break;
 					case HAVE_QUESTION:
 						if (curClient.hasRight(Room.Right.MODERATOR) || getUserId().equals(m.getUserId())) {
-							sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.haveQuestion), handler);
+							sidebar.addActivity(new Activity((TextRoomMessage)m, Activity.Type.REQ_RIGHT_HAVE_QUESTION), handler);
 						}
 						break;
 					case KICK:
@@ -569,13 +567,13 @@
 			handler.appendJavaScript("Room.addClient(["
 					+ c.toJson(self).toString(new NullStringer()) + "]);");
 		}
-		sidebar.addActivity(new Activity(m, Activity.Type.roomEnter), handler);
+		sidebar.addActivity(new Activity(m, Activity.Type.ROOM_ENTER), handler);
 	}
 
 	private void onRoomExit(TextRoomMessage m, IPartialPageRequestHandler handler) {
 		String uid = m.getText();
 		sidebar.update(handler);
-		sidebar.addActivity(new Activity(m, Activity.Type.roomExit), handler);
+		sidebar.addActivity(new Activity(m, Activity.Type.ROOM_EXIT), handler);
 		handler.appendJavaScript("Room.removeClient('" + uid + "'); Chat.removeTab('" + ID_USER_PREFIX + m.getUserId() + "');");
 	}
 
@@ -675,8 +673,8 @@
 
 	@Override
 	public void cleanup(IPartialPageRequestHandler handler) {
-		if (eventDetail instanceof EventDetailDialog) {
-			((EventDetailDialog)eventDetail).close(handler);
+		if (eventDetail instanceof EventDetailDialog evtDialog) {
+			evtDialog.close(handler);
 		}
 		handler.add(getBasePage().getHeader().setVisible(true), getMainPanel().getTopControls().setVisible(true));
 		if (r.isHidden(RoomElement.CHAT)) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
index ccc9bf0..d2c314d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
@@ -24,6 +24,7 @@
 import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 
 import java.util.LinkedHashMap;
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.commons.lang3.time.FastDateFormat;
@@ -43,6 +44,7 @@
 import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
+import org.apache.wicket.util.string.StringValue;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,7 +60,14 @@
 	private static final String ACTIVITY_FMT = "%s %s [%s]";
 	private static final String ACTIVITY_FMT_RTL = "%3$s %2$s [%1$s]";
 	private enum Action {
-		accept, decline, close
+		ACCEPT, DECLINE, CLOSE;
+
+		public static Action of(StringValue val) {
+			if (val.isEmpty()) {
+				return null;
+			}
+			return Action.valueOf(val.toString().toUpperCase(Locale.ROOT));
+		}
 	}
 	private static final FastDateFormat df = FastDateFormat.getInstance("HH:mm:ss");
 	private final Map<String, Activity> activities = new LinkedHashMap<>();
@@ -78,54 +87,54 @@
 			try {
 				String id = getRequest().getRequestParameters().getParameterValue(PARAM_ID).toString();
 				long roomId = getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong();
-				Action act = Action.valueOf(getRequest().getRequestParameters().getParameterValue(ACTION).toString());
+				Action act = Action.of(getRequest().getRequestParameters().getParameterValue(ACTION));
 				Activity a = activities.get(id);
 				if (a == null || !room.getRoom().getId().equals(roomId)) {
 					log.error("It seems like we are being hacked!!!!");
 					return;
 				}
 				switch (act) {
-					case close:
+					case CLOSE:
 						remove(target, id);
 						break;
-					case decline:
+					case DECLINE:
 						if (room.getClient().hasRight(Right.MODERATOR)) {
 							sendRoom(getRemoveMsg(id));
 						}
 						break;
-					case accept:
+					case ACCEPT:
 						Client client = cm.get(a.getUid());
 						if (room.getClient().hasRight(Right.MODERATOR) && client != null && client.getRoom() != null && roomId == client.getRoom().getId()) {
 							switch (a.getType()) {
-								case reqRightModerator:
+								case REQ_RIGHT_MODERATOR:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.MODERATOR);
 									break;
-								case reqRightAv:
+								case REQ_RIGHT_AV:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.AUDIO, Right.VIDEO);
 									break;
-								case reqRightPresenter:
+								case REQ_RIGHT_PRESENTER:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.PRESENTER);
 									break;
-								case reqRightWb:
+								case REQ_RIGHT_WB:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.WHITEBOARD);
 									break;
-								case reqRightShare:
+								case REQ_RIGHT_SHARE:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.SHARE);
 									break;
-								case reqRightRemote:
+								case REQ_RIGHT_REMOTE:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.REMOTE_CONTROL);
 									break;
-								case reqRightA:
+								case REQ_RIGHT_A:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.AUDIO);
 									break;
-								case reqRightMuteOthers:
+								case REQ_RIGHT_MUTE_OTHERS:
 									sendRoom(getRemoveMsg(id));
 									room.allowRight(client, Right.MUTE_OTHERS);
 									break;
@@ -181,37 +190,37 @@
 		final String name = self ? getString("1362") : a.getName();
 		final String fmt = ((BasePage)getPage()).isRtl() ? ACTIVITY_FMT_RTL : ACTIVITY_FMT;
 		switch (a.getType()) {
-			case roomEnter:
+			case ROOM_ENTER:
 				text = String.format(fmt, name, getString("activities.msg.enter"), df.format(a.getCreated()));
 				break;
-			case roomExit:
+			case ROOM_EXIT:
 				text = String.format(fmt, name, getString("activities.msg.exit"), df.format(a.getCreated()));
 				break;
-			case reqRightModerator:
+			case REQ_RIGHT_MODERATOR:
 				text = String.format(fmt, name, getString("activities.request.right.moderator"), df.format(a.getCreated()));
 				break;
-			case reqRightPresenter:
+			case REQ_RIGHT_PRESENTER:
 				text = String.format(fmt, name, getString("activities.request.right.presenter"), df.format(a.getCreated()));
 				break;
-			case reqRightWb:
+			case REQ_RIGHT_WB:
 				text = String.format(fmt, name, getString("activities.request.right.wb"), df.format(a.getCreated()));
 				break;
-			case reqRightShare:
+			case REQ_RIGHT_SHARE:
 				text = String.format(fmt, name, getString("activities.request.right.share"), df.format(a.getCreated()));
 				break;
-			case reqRightRemote:
+			case REQ_RIGHT_REMOTE:
 				text = String.format(fmt, name, getString("activities.request.right.remote"), df.format(a.getCreated()));
 				break;
-			case reqRightA:
+			case REQ_RIGHT_A:
 				text = String.format(fmt, name, getString("activities.request.right.audio"), df.format(a.getCreated()));
 				break;
-			case reqRightAv:
+			case REQ_RIGHT_AV:
 				text = String.format(fmt, name, getString("activities.request.right.video"), df.format(a.getCreated()));
 				break;
-			case reqRightMuteOthers:
+			case REQ_RIGHT_MUTE_OTHERS:
 				text = String.format(fmt, name, getString("activities.request.right.muteothers"), df.format(a.getCreated()));
 				break;
-			case haveQuestion:
+			case REQ_RIGHT_HAVE_QUESTION:
 				text = String.format(fmt, name, getString("activities.ask.question"), df.format(a.getCreated()));
 				break;
 		}
@@ -224,21 +233,14 @@
 			.put("find", false);
 
 		switch (a.getType()) {
-			case reqRightModerator:
-			case reqRightPresenter:
-			case reqRightWb:
-			case reqRightShare:
-			case reqRightRemote:
-			case reqRightA:
-			case reqRightAv:
-			case reqRightMuteOthers:
+			case REQ_RIGHT_MODERATOR, REQ_RIGHT_PRESENTER, REQ_RIGHT_WB, REQ_RIGHT_SHARE, REQ_RIGHT_REMOTE
+					, REQ_RIGHT_A, REQ_RIGHT_AV, REQ_RIGHT_MUTE_OTHERS:
 				aobj.put("accept", room.getClient().hasRight(Right.MODERATOR));
 				aobj.put("decline", room.getClient().hasRight(Right.MODERATOR));
 				break;
-			case haveQuestion:
+			case REQ_RIGHT_HAVE_QUESTION:
 				aobj.put("find", !self);
-			case roomEnter:
-			case roomExit:
+			case ROOM_ENTER, ROOM_EXIT:
 				aobj.put("accept", false);
 				aobj.put("decline", false);
 				break;
@@ -261,19 +263,11 @@
 	private static CharSequence getClass(Activity a) {
 		StringBuilder cls = new StringBuilder();
 		switch (a.getType()) {
-			case reqRightModerator:
-			case reqRightPresenter:
-			case reqRightWb:
-			case reqRightShare:
-			case reqRightRemote:
-			case reqRightA:
-			case reqRightAv:
-			case reqRightMuteOthers:
-			case haveQuestion:
+			case REQ_RIGHT_MODERATOR, REQ_RIGHT_PRESENTER, REQ_RIGHT_WB, REQ_RIGHT_SHARE, REQ_RIGHT_REMOTE
+					, REQ_RIGHT_A, REQ_RIGHT_AV, REQ_RIGHT_MUTE_OTHERS, REQ_RIGHT_HAVE_QUESTION:
 				cls.append("bg-warning");
 				break;
-			case roomEnter:
-			case roomExit:
+			case ROOM_ENTER, ROOM_EXIT:
 				cls.append("bg-white auto-clean");
 		}
 		return cls;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java
index 5097b0f..db0b01f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java
@@ -27,17 +27,17 @@
 public class Activity implements Serializable {
 	private static final long serialVersionUID = 1L;
 	public enum Type {
-		roomEnter
-		, roomExit
-		, reqRightModerator(true)
-		, reqRightPresenter(true)
-		, reqRightWb(true)
-		, reqRightShare(true)
-		, reqRightRemote(true)
-		, reqRightA(true)
-		, reqRightAv(true)
-		, reqRightMuteOthers(true)
-		, haveQuestion(true);
+		ROOM_ENTER
+		, ROOM_EXIT
+		, REQ_RIGHT_MODERATOR(true)
+		, REQ_RIGHT_PRESENTER(true)
+		, REQ_RIGHT_WB(true)
+		, REQ_RIGHT_SHARE(true)
+		, REQ_RIGHT_REMOTE(true)
+		, REQ_RIGHT_A(true)
+		, REQ_RIGHT_AV(true)
+		, REQ_RIGHT_MUTE_OTHERS(true)
+		, REQ_RIGHT_HAVE_QUESTION(true);
 
 		private final boolean action;
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java
index aefe09f..e06354d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java
@@ -54,7 +54,7 @@
 public class RoomInvitationForm extends InvitationForm {
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = LoggerFactory.getLogger(RoomInvitationForm.class);
-	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.user));
+	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.USER));
 	private final Long roomId;
 	private final WebMarkupContainer groupContainer = new WebMarkupContainer("groupContainer");
 	private final Select2MultiChoice<Group> groups = new Select2MultiChoice<>("groups"
@@ -69,8 +69,8 @@
 	private InvitationManager invitationManager;
 
 	enum InviteeType {
-		user
-		, group
+		USER
+		, GROUP
 	}
 
 	public RoomInvitationForm(String id, Long roomId, String dropDownParentId) {
@@ -87,7 +87,7 @@
 
 			@Override
 			protected void onUpdate(AjaxRequestTarget target) {
-				boolean groupsEnabled = InviteeType.group == rdi.getModelObject();
+				boolean groupsEnabled = InviteeType.GROUP == rdi.getModelObject();
 				updateButtons(target);
 				target.add(groups.setEnabled(groupsEnabled), recipients.setEnabled(!groupsEnabled));
 			}
@@ -97,10 +97,10 @@
 				url.setModelObject(null);
 				updateButtons(target);
 			})).setOutputMarkupId(true)
-			, new Radio<>("group", Model.of(InviteeType.group))
+			, new Radio<>("group", Model.of(InviteeType.GROUP))
 		);
 		rdi.add(recipients, groupContainer.setVisible(showGroups));
-		rdi.add(new Radio<>("user", Model.of(InviteeType.user)));
+		rdi.add(new Radio<>("user", Model.of(InviteeType.USER)));
 		add(sipContainer.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true));
 		sipContainer.add(new Label("room.confno", "")).setVisible(false);
 		if (dropDownParentId != null) {
@@ -111,7 +111,7 @@
 
 	@Override
 	protected void updateButtons(AjaxRequestTarget target) {
-		if (rdi.getModelObject() == InviteeType.user) {
+		if (rdi.getModelObject() == InviteeType.USER) {
 			super.updateButtons(target);
 		} else {
 			Collection<Group> to = groups.getModelObject();
@@ -132,12 +132,12 @@
 		}
 		groups.setModelObject(new ArrayList<>());
 		groups.setEnabled(false);
-		rdi.setModelObject(InviteeType.user);
+		rdi.setModelObject(InviteeType.USER);
 	}
 
 	@Override
 	public void onClick(AjaxRequestTarget target, InvitationForm.Action action) {
-		if (InvitationForm.Action.SEND == action && Strings.isEmpty(url.getModelObject()) && rdi.getModelObject() == InviteeType.group) {
+		if (InvitationForm.Action.SEND == action && Strings.isEmpty(url.getModelObject()) && rdi.getModelObject() == InviteeType.GROUP) {
 			final String userbaseUrl = WebSession.get().getExtendedProperties().getBaseUrl();
 			for (Group g : groups.getModelObject()) {
 				for (GroupUser ou : groupUserDao.get(g.getId(), 0, Integer.MAX_VALUE)) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/UndoObject.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/UndoObject.java
index 08b9134..f8416ba 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/UndoObject.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/UndoObject.java
@@ -29,9 +29,9 @@
 	private static final long serialVersionUID = 1L;
 
 	public enum Type {
-		add
-		, remove
-		, modify
+		ADD
+		, REMOVE
+		, MODIFY
 	}
 	private final Type type;
 	private final String object;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
index a5f25f3..a4949f6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
@@ -126,7 +126,7 @@
 	private final SerializableConsumer<Whiteboard> addUndo = wb -> {
 		JSONArray arr = getArray(wb.toJson(), null);
 		if (arr.length() != 0) {
-			addUndo(wb.getId(), new UndoObject(UndoObject.Type.remove, arr));
+			addUndo(wb.getId(), new UndoObject(UndoObject.Type.REMOVE, arr));
 		}
 	};
 	@SpringBean
@@ -192,8 +192,7 @@
 			return;
 		}
 		switch (a) {
-			case CREATE_OBJ:
-			case MODIFY_OBJ:
+			case CREATE_OBJ, MODIFY_OBJ:
 			{
 				JSONObject o = obj.optJSONObject("obj");
 				if (o != null && "pointer".equals(o.getString(ATTR_OMTYPE))) {
@@ -318,7 +317,7 @@
 					JSONObject o = obj.getJSONObject("obj");
 					wb.put(o.getString("uid"), o);
 					wbm.update(roomId, wb);
-					addUndo(wb.getId(), new UndoObject(UndoObject.Type.add, o));
+					addUndo(wb.getId(), new UndoObject(UndoObject.Type.ADD, o));
 					sendWbOthers(WbAction.CREATE_OBJ, obj);
 				}
 					break;
@@ -338,7 +337,7 @@
 					}
 					if (arr.length() != 0) {
 						wbm.update(roomId, wb);
-						addUndo(wb.getId(), new UndoObject(UndoObject.Type.modify, undo));
+						addUndo(wb.getId(), new UndoObject(UndoObject.Type.MODIFY, undo));
 					}
 					sendWbOthers(WbAction.MODIFY_OBJ, obj);
 				}
@@ -357,7 +356,7 @@
 					}
 					if (undo.length() != 0) {
 						wbm.update(roomId, wb);
-						addUndo(wb.getId(), new UndoObject(UndoObject.Type.remove, undo));
+						addUndo(wb.getId(), new UndoObject(UndoObject.Type.REMOVE, undo));
 					}
 					sendWbAll(WbAction.DELETE_OBJ, obj);
 				}
@@ -365,7 +364,7 @@
 				case CLEAR_SLIDE:
 				{
 					wbm.cleanSlide(roomId, obj.getLong("wbId"), obj.getInt(ATTR_SLIDE)
-							, (wb, arr) -> addUndo(wb.getId(), new UndoObject(UndoObject.Type.remove, arr)));
+							, (wb, arr) -> addUndo(wb.getId(), new UndoObject(UndoObject.Type.REMOVE, arr)));
 				}
 					break;
 				case SAVE:
@@ -379,7 +378,7 @@
 					if (uo != null) {
 						Whiteboard wb = wbm.get(roomId).get(wbId);
 						switch (uo.getType()) {
-							case add:
+							case ADD:
 							{
 								JSONObject o = new JSONObject(uo.getObject());
 								wb.remove(o.getString("uid"));
@@ -387,7 +386,7 @@
 								sendWbAll(WbAction.DELETE_OBJ, obj.put("obj", new JSONArray().put(o)));
 							}
 								break;
-							case remove:
+							case REMOVE:
 							{
 								JSONArray arr = new JSONArray(uo.getObject());
 								for (int i  = 0; i < arr.length(); ++i) {
@@ -398,7 +397,7 @@
 								sendWbAll(WbAction.CREATE_OBJ, obj.put("obj", new JSONArray(uo.getObject())));
 							}
 								break;
-							case modify:
+							case MODIFY:
 							{
 								JSONArray arr = new JSONArray(uo.getObject());
 								for (int i  = 0; i < arr.length(); ++i) {
diff --git 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
index 3894920..9752ab2 100644
--- 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
@@ -51,17 +51,16 @@
 	}
 
 	public static boolean send(IClusterWsMessage inMsg) {
-		if (inMsg instanceof WsMessageWb) {
-			WsMessageWb m = (WsMessageWb)inMsg;
-			if (m.getUid() == null) {
-				sendWbAll(m.getRoomId(), m.getMeth(), m.getObj(), false);
+		if (inMsg instanceof WsMessageWb msg) {
+			if (msg.getUid() == null) {
+				sendWbAll(msg.getRoomId(), msg.getMeth(), msg.getObj(), false);
 			} else {
-				sendWbOthers(m.getRoomId(), m.getMeth(), m.getObj(), m.getUid(), false);
+				sendWbOthers(msg.getRoomId(), msg.getMeth(), msg.getObj(), msg.getUid(), false);
 			}
 			return true;
-		} else if (inMsg instanceof WsMessageWbFile) {
-			WsMessageWbFile m = (WsMessageWbFile)inMsg;
-			sendWbFile(m.getRoomId(), m.getWbId(), m.getRoomUid(), m.getFile(), m.getFileItem(), false);
+		} else if (inMsg instanceof WsMessageWbFile fileMsg) {
+			sendWbFile(fileMsg.getRoomId(), fileMsg.getWbId()
+					, fileMsg.getRoomUid(), fileMsg.getFile(), fileMsg.getFileItem(), false);
 			return true;
 		}
 		return false;
@@ -149,8 +148,7 @@
 	private static JSONObject patchUrls(BaseFileItem fi, Client c, JSONObject inFile) {
 		JSONObject f = new JSONObject(inFile.toString()); // deep copy to ensure thread safety
 		switch (fi.getType()) {
-			case VIDEO:
-			case RECORDING:
+			case VIDEO, RECORDING:
 				f.put(PARAM__SRC, patchUrl(f.getString(PARAM__SRC), c));
 				f.put(PARAM__POSTER, patchUrl(f.getString(PARAM__POSTER), c));
 				break;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
index 0481bee..611338d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
@@ -108,14 +108,14 @@
 	private final CalendarPanel calendarPanel;
 	private final NotificationPanel feedback = new NotificationPanel("feedback");
 	private final WebMarkupContainer sipContainer = new WebMarkupContainer("sip-container");
-	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.user));
+	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.USER));
 	private final Select2MultiChoice<Group> groups = new Select2MultiChoice<>("groups"
 			, new CollectionModel<>(new ArrayList<>())
 			, new GroupChoiceProvider());
 	private final UserMultiChoice attendees = new UserMultiChoice("attendees", new CollectionModel<>(new ArrayList<>()));
 	private enum InviteeType {
-		user
-		, group
+		USER
+		, GROUP
 	}
 	@SpringBean
 	private RoomDao roomDao;
@@ -154,7 +154,7 @@
 				final List<MeetingMember> mms = a.getMeetingMembers() == null ? new ArrayList<>() : a.getMeetingMembers();
 				Set<Long> currentIds = new HashSet<>();
 				List<User> users = new ArrayList<>();
-				if (InviteeType.group == rdi.getModelObject()) {
+				if (InviteeType.GROUP == rdi.getModelObject()) {
 					//lets iterate through all group users
 					for (Group g : groups.getModelObject()) {
 						for (GroupUser gu : groupUserDao.get(g.getId(), 0, Integer.MAX_VALUE)) {
@@ -352,7 +352,7 @@
 				cals.setEnabled(false);
 			}
 
-			rdi.setModelObject(InviteeType.user);
+			rdi.setModelObject(InviteeType.USER);
 			attendees.setModelObject(new ArrayList<>());
 			if (a.getMeetingMembers() != null) {
 				for (MeetingMember mm : a.getMeetingMembers()) {
@@ -377,13 +377,13 @@
 
 				@Override
 				protected void onUpdate(AjaxRequestTarget target) {
-					boolean groupsEnabled = InviteeType.group == rdi.getModelObject();
+					boolean groupsEnabled = InviteeType.GROUP == rdi.getModelObject();
 					target.add(groups.setEnabled(groupsEnabled), attendees.setEnabled(!groupsEnabled));
 				}
 			}));
 			groupContainer.add(
 				groups.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)
-				, new Radio<>("group", Model.of(InviteeType.group))
+				, new Radio<>("group", Model.of(InviteeType.GROUP))
 			);
 			if (showGroups) {
 				groups.add(AjaxFormComponentUpdatingBehavior.onUpdate(EVT_CHANGE, target -> {
@@ -396,7 +396,7 @@
 				}))
 				, groupContainer.setVisible(showGroups)
 			);
-			rdi.add(new Radio<>("user", Model.of(InviteeType.user)));
+			rdi.add(new Radio<>("user", Model.of(InviteeType.USER)));
 
 			add(new TextField<String>("location"));
 			OmWysiwygToolbar toolbar = new OmWysiwygToolbar("toolbarContainer");
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java
index 68156a6..d7caa3a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarDialog.java
@@ -195,9 +195,7 @@
 					case DELETE_APPOINTMENT:
 						deleteAppointment(a);
 						break;
-					case SYNC_CALENDAR:
-						break;
-					case UPDATE_CALENDAR:
+					case SYNC_CALENDAR, UPDATE_CALENDAR:
 						break;
 					default:
 						break;
@@ -232,9 +230,7 @@
 					calendarPanel.refresh(handler);
 				}
 				break;
-			case DELETE_APPOINTMENT:
-				break;
-			case UPDATE_APPOINTMENT:
+			case DELETE_APPOINTMENT, UPDATE_APPOINTMENT:
 				break;
 			default:
 				break;
@@ -351,9 +347,7 @@
 
 	public void setButtons(IPartialPageRequestHandler target) {
 		switch (type) {
-			case UPDATE_APPOINTMENT:
-			case DELETE_APPOINTMENT:
-			case SYNC_CALENDAR:
+			case UPDATE_APPOINTMENT, DELETE_APPOINTMENT, SYNC_CALENDAR:
 				target.add(delete.setVisible(false), save.setVisible(true));
 				break;
 			case UPDATE_CALENDAR:
@@ -463,9 +457,7 @@
 					}
 					setGCalVisibility(calendar);
 					break;
-				case SYNC_CALENDAR:
-				case UPDATE_APPOINTMENT:
-				case DELETE_APPOINTMENT:
+				case SYNC_CALENDAR, UPDATE_APPOINTMENT, DELETE_APPOINTMENT:
 					title.setEnabled(false);
 					url.setEnabled(false);
 					username.setEnabled(true);
@@ -520,35 +512,36 @@
 		 */
 		@Override
 		protected void onValidate() {
-			if (!hasError()) {
-				switch (type) {
-					case UPDATE_CALENDAR:
-						if (getModelObject().getId() != null || gcal.getModelObject()) {
+			if (hasError()) {
+				return;
+			}
+			switch (type) {
+				case UPDATE_CALENDAR:
+					if (getModelObject().getId() != null || gcal.getModelObject()) {
+						return;
+					}
+				case UPDATE_APPOINTMENT, DELETE_APPOINTMENT, SYNC_CALENDAR:
+					try {
+						OmCalendar calendar = getModelObject();
+						if (url.isEnabled()) {
+							calendar.setHref(url.getInput());
+						}
+						HttpClient client = calendarPanel.getHttpClient();
+						HttpClientContext context = calendarPanel.getHttpClientContext();
+
+						apptManager.provideCredentials(context, calendar,
+								new UsernamePasswordCredentials(username.getInput(), pass.getInput()));
+						if (apptManager.testConnection(client, context, calendar)) {
 							return;
 						}
-					case UPDATE_APPOINTMENT:
-					case DELETE_APPOINTMENT:
-					case SYNC_CALENDAR:
-						try {
-							OmCalendar calendar = getModelObject();
-							if (url.isEnabled()) {
-								calendar.setHref(url.getInput());
-							}
-							HttpClient client = calendarPanel.getHttpClient();
-							HttpClientContext context = calendarPanel.getHttpClientContext();
+					} catch (Exception e) {
+						log.error("Error executing the TestConnection", e);
+					}
 
-							apptManager.provideCredentials(context, calendar,
-									new UsernamePasswordCredentials(username.getInput(), pass.getInput()));
-							if (apptManager.testConnection(client, context, calendar)) {
-								return;
-							}
-						} catch (Exception e) {
-							log.error("Error executing the TestConnection", e);
-						}
-
-						error(getString("calendar.error"));
-						break;
-				}
+					error(getString("calendar.error"));
+					break;
+				default:
+					break;
 			}
 		}
 	}
diff --git 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
index e35f1cd..9be682b 100644
--- 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
@@ -395,6 +395,8 @@
 						selectedMessages.clear();
 						selectedMessages.addAll(readMessages);
 						break;
+					default:
+						break;
 				}
 				target.add(container);
 			}
diff --git 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
index 70dd18f..5e1c0be 100644
--- 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
@@ -48,12 +48,12 @@
 
 public class RecordingsPanel extends UserBasePanel {
 	private static final long serialVersionUID = 1L;
-	private static final String recordingInviteDialogId = "recordingInviteDialog";
+	private static final String INVITE_DIALOG_ID = "recordingInviteDialog";
 	private final VideoPlayer video = new VideoPlayer("video");
 	private final VideoInfo info = new VideoInfo("info");
 	private FileTreePanel fileTree;
 	private InvitationDialog invite;
-	private RecordingInvitationForm rif = new RecordingInvitationForm("form", recordingInviteDialogId);
+	private RecordingInvitationForm rif = new RecordingInvitationForm("form", INVITE_DIALOG_ID);
 
 	@SpringBean
 	private RecordingDao recDao;
@@ -153,7 +153,7 @@
 			}
 		});
 		add(video, info, addFolder);
-		invite = new InvitationDialog(recordingInviteDialogId, rif);
+		invite = new InvitationDialog(INVITE_DIALOG_ID, rif);
 		add(invite);
 		rif.setDialog(invite);
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
index 82105a1..775b979 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
@@ -49,8 +49,7 @@
 	}
 
 	public VideoInfo update(AjaxRequestTarget target, BaseFileItem file) {
-		if (file instanceof Recording) {
-			Recording r = (Recording)file;
+		if (file instanceof Recording r) {
 			setDefaultModelObject(file);
 			try {
 				String name = null;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
index b3abaa3..dcc1daa 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
@@ -37,7 +37,7 @@
 	}
 
 	public static OmUrlFragment getRoomUrlFragment(Long roomId) {
-		return new OmUrlFragment(AreaKeys.room, "" + roomId);
+		return new OmUrlFragment(AreaKeys.ROOM, "" + roomId);
 	}
 
 	public static void roomEnter(MainPage page, IPartialPageRequestHandler handler, Long roomId) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
index 91b7588..4d89c48 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java
@@ -22,6 +22,7 @@
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
 
 import java.io.Serializable;
+import java.util.Locale;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -54,7 +55,7 @@
 
 public class OmUrlFragment implements Serializable {
 	private static final long serialVersionUID = 1L;
-	private AreaKeys area = AreaKeys.user;
+	private AreaKeys area = AreaKeys.USER;
 	private String type = "";
 	public static final String CHILD_ID = "child";
 	public static final String TYPE_CALENDAR = "calendar";
@@ -78,20 +79,27 @@
 	public static final String TYPE_SEARCH = "search";
 	public static final String TYPE_INVITATION = "invitation";
 	public static final String TYPE_WIDGET = "widget";
-	public static final OmUrlFragment DASHBOARD = new OmUrlFragment(AreaKeys.user, TYPE_DASHBOARD);
-	public static final OmUrlFragment PROFILE_EDIT = new OmUrlFragment(AreaKeys.profile, TYPE_EDIT);
-	public static final OmUrlFragment PROFILE_MESSAGES = new OmUrlFragment(AreaKeys.profile, TYPE_MESSAGES);
-	public static final OmUrlFragment CALENDAR = new OmUrlFragment(AreaKeys.user, TYPE_CALENDAR);
-	public static final OmUrlFragment ROOMS_PUBLIC = new OmUrlFragment(AreaKeys.rooms, TYPE_PUBLIC);
-	public static final OmUrlFragment ROOMS_GROUP = new OmUrlFragment(AreaKeys.rooms, TYPE_GROUP);
-	public static final OmUrlFragment ROOMS_MY = new OmUrlFragment(AreaKeys.rooms, TYPE_MY);
+	public static final OmUrlFragment DASHBOARD = new OmUrlFragment(AreaKeys.USER, TYPE_DASHBOARD);
+	public static final OmUrlFragment PROFILE_EDIT = new OmUrlFragment(AreaKeys.PROFILE, TYPE_EDIT);
+	public static final OmUrlFragment PROFILE_MESSAGES = new OmUrlFragment(AreaKeys.PROFILE, TYPE_MESSAGES);
+	public static final OmUrlFragment CALENDAR = new OmUrlFragment(AreaKeys.USER, TYPE_CALENDAR);
+	public static final OmUrlFragment ROOMS_PUBLIC = new OmUrlFragment(AreaKeys.ROOMS, TYPE_PUBLIC);
+	public static final OmUrlFragment ROOMS_GROUP = new OmUrlFragment(AreaKeys.ROOMS, TYPE_GROUP);
+	public static final OmUrlFragment ROOMS_MY = new OmUrlFragment(AreaKeys.ROOMS, TYPE_MY);
 
 	public enum AreaKeys {
-		user
-		, admin
-		, profile
-		, room
-		, rooms
+		USER
+		, ADMIN
+		, PROFILE
+		, ROOM
+		, ROOMS;
+
+		public String area() {
+			return name().toLowerCase(Locale.ROOT);
+		}
+		public static AreaKeys of(String val) {
+			return val == null ? null : AreaKeys.valueOf(val.toUpperCase(Locale.ROOT));
+		}
 	}
 
 	public enum MenuActions {
@@ -127,91 +135,91 @@
 	public OmUrlFragment(MenuActions action) {
 		switch(action) {
 			case DASHBOARD_START:
-				setArea(AreaKeys.user);
+				setArea(AreaKeys.USER);
 				setType(TYPE_DASHBOARD);
 				break;
 			case DASHBOARD_CALENDAR:
-				setArea(AreaKeys.user);
+				setArea(AreaKeys.USER);
 				setType(TYPE_CALENDAR);
 				break;
 			case RECORD:
-				setArea(AreaKeys.user);
+				setArea(AreaKeys.USER);
 				setType(TYPE_RECORDINGS);
 				break;
 			case ROOMS_PUBLIC:
-				setArea(AreaKeys.rooms);
+				setArea(AreaKeys.ROOMS);
 				setType(TYPE_PUBLIC);
 				break;
 			case ROOMS_GROUP:
-				setArea(AreaKeys.rooms);
+				setArea(AreaKeys.ROOMS);
 				setType(TYPE_GROUP);
 				break;
 			case ROOMS_MY:
-				setArea(AreaKeys.rooms);
+				setArea(AreaKeys.ROOMS);
 				setType(TYPE_MY);
 				break;
 			case ADMIN_USER:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_USER);
 				break;
 			case ADMIN_CONNECTION:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_CONNECTION);
 				break;
 			case ADMIN_GROUP:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_GROUP);
 				break;
 			case ADMIN_ROOM:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_ROOM);
 				break;
 			case ADMIN_CONFIG:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_CONFIG);
 				break;
 			case ADMIN_LABEL:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_LANG);
 				break;
 			case ADMIN_LDAP:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_LDAP);
 				break;
 			case ADMIN_BACKUP:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_BACKUP);
 				break;
 			case ADMIN_OAUTH:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_OAUTH2);
 				break;
 			case ADMIN_EMAIL:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_EMAIL);
 				break;
 			case ADMIN_EXTRA:
-				setArea(AreaKeys.admin);
+				setArea(AreaKeys.ADMIN);
 				setType(TYPE_EXTRA);
 				break;
 			case PROFILE_MESSAGE:
-				setArea(AreaKeys.profile);
+				setArea(AreaKeys.PROFILE);
 				setType(TYPE_MESSAGES);
 				break;
 			case PROFILE_EDIT:
-				setArea(AreaKeys.profile);
+				setArea(AreaKeys.PROFILE);
 				setType(TYPE_EDIT);
 				break;
 			case PROFILE_SEARCH:
-				setArea(AreaKeys.profile);
+				setArea(AreaKeys.PROFILE);
 				setType(TYPE_SEARCH);
 				break;
 			case PROFILE_INVITATION:
-				setArea(AreaKeys.profile);
+				setArea(AreaKeys.PROFILE);
 				setType(TYPE_INVITATION);
 				break;
 			case PROFILE_WIDGET:
-				setArea(AreaKeys.profile);
+				setArea(AreaKeys.PROFILE);
 				setType(TYPE_WIDGET);
 				break;
 		}
@@ -248,7 +256,7 @@
 	public static BasePanel getPanel(AreaKeys area, String type) {
 		BasePanel basePanel = null;
 		switch(area) {
-			case admin:
+			case ADMIN:
 				if (TYPE_USER.equals(type)) {
 					basePanel = new UsersPanel(CHILD_ID);
 				} else if (TYPE_CONNECTION.equals(type)) {
@@ -273,7 +281,7 @@
 					basePanel = new ExtraPanel(CHILD_ID);
 				}
 				break;
-			case profile:
+			case PROFILE:
 				if (TYPE_MESSAGES.equals(type)) {
 					basePanel = new MessagesContactsPanel(CHILD_ID);
 				} else if (TYPE_EDIT.equals(type)) {
@@ -286,13 +294,13 @@
 					basePanel = new WidgetsPanel(CHILD_ID);
 				}
 				break;
-			case room:
+			case ROOM:
 				basePanel = getRoomPanel(type);
 				break;
-			case rooms:
+			case ROOMS:
 				basePanel = new RoomsSelectorPanel(CHILD_ID, type);
 				break;
-			case user:
+			case USER:
 				if (TYPE_CALENDAR.equals(type)) {
 					basePanel = new CalendarPanel(CHILD_ID);
 				} else if (TYPE_RECORDINGS.equals(type)) {
@@ -324,7 +332,7 @@
 	}
 
 	public String getLink() {
-		return getBaseUrl() + "#" + getArea().name() + "/" + getType();
+		return getBaseUrl() + "#" + getArea().area() + "/" + getType();
 	}
 
 	private static void moveToServer(Room r) {
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTesterTest.java b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTesterTest.java
index 773cbd1..3f2da25 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTesterTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTesterTest.java
@@ -47,7 +47,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AbstractWicketTesterTest extends AbstractOmServerTest {
+public abstract class AbstractWicketTesterTest extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(AbstractWicketTesterTest.class);
 	public static final String PATH_CHILD = "main-container:main:contents:child";
 	public static final String PATH_MENU = "main-container:main:topControls:menu:menu";
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportUser.java b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportUser.java
index 8e6506e..2de263a 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportUser.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportUser.java
@@ -38,9 +38,10 @@
 
 	@Test
 	void importUserNE() throws Exception {
-		File configs = new File(getClass().getClassLoader().getResource(BACKUP_ROOT + "config/skip/configs.xml").toURI());
+		File configRoot = new File(getClass().getClassLoader().getResource(BACKUP_ROOT + "config/skip/configs.xml").toURI())
+				.getParentFile();
 		Assertions.assertThrows(BackupException.class, () -> {
-			backupImport.importUsers(configs.getParentFile());
+			backupImport.importUsers(configRoot);
 		});
 	}
 
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
index 1beb0d1..128d2ec 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
@@ -119,161 +119,161 @@
 
 	@Test
 	void testCalendar() throws OmException {
-		checkArea(AreaKeys.user, TYPE_CALENDAR, CalendarPanel.class, regularUsername);
+		checkArea(AreaKeys.USER, TYPE_CALENDAR, CalendarPanel.class, regularUsername);
 	}
 
 	@Test
 	void testRecordings() throws OmException {
-		checkArea(AreaKeys.user, TYPE_RECORDINGS, RecordingsPanel.class, regularUsername);
+		checkArea(AreaKeys.USER, TYPE_RECORDINGS, RecordingsPanel.class, regularUsername);
 	}
 
 	@Test
 	void testRoomsPublic() throws OmException {
-		checkArea(AreaKeys.rooms, TYPE_PUBLIC, RoomsSelectorPanel.class, regularUsername);
+		checkArea(AreaKeys.ROOMS, TYPE_PUBLIC, RoomsSelectorPanel.class, regularUsername);
 	}
 
 	@Test
 	void testRoomsGroup() throws OmException {
-		checkArea(AreaKeys.rooms, TYPE_GROUP, RoomsSelectorPanel.class, regularUsername);
+		checkArea(AreaKeys.ROOMS, TYPE_GROUP, RoomsSelectorPanel.class, regularUsername);
 	}
 
 	@Test
 	void testRoomsMy() throws OmException {
-		checkArea(AreaKeys.rooms, TYPE_MY, RoomsSelectorPanel.class, regularUsername);
+		checkArea(AreaKeys.ROOMS, TYPE_MY, RoomsSelectorPanel.class, regularUsername);
 	}
 
 	@Test
 	void testProfileMessages() throws OmException {
-		checkArea(AreaKeys.profile, TYPE_MESSAGES, MessagesContactsPanel.class, regularUsername);
+		checkArea(AreaKeys.PROFILE, TYPE_MESSAGES, MessagesContactsPanel.class, regularUsername);
 	}
 
 	@Test
 	void testProfileEdit() throws OmException {
-		checkArea(AreaKeys.profile, TYPE_EDIT, EditProfilePanel.class, regularUsername);
+		checkArea(AreaKeys.PROFILE, TYPE_EDIT, EditProfilePanel.class, regularUsername);
 	}
 
 	@Test
 	void testNonExistent() throws OmException {
-		checkArea(AreaKeys.profile, "bla", OmDashboardPanel.class, regularUsername);
+		checkArea(AreaKeys.PROFILE, "bla", OmDashboardPanel.class, regularUsername);
 	}
 
 	@Test
 	void testAdminUsers() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_USER, UsersPanel.class, adminUsername, groupAdminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_USER, UsersPanel.class, adminUsername, groupAdminUsername);
 	}
 
 	@Test
 	void testAdminUsers1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_USER, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_USER, regularUsername);
 	}
 
 	@Test
 	void testAdminConnections() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_CONNECTION, ConnectionsPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_CONNECTION, ConnectionsPanel.class, adminUsername);
 	}
 
 	@Test
 	void testAdminConnections1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_CONNECTION, groupAdminUsername, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_CONNECTION, groupAdminUsername, regularUsername);
 	}
 
 	@Test
 	void testAdminGroups() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_GROUP, GroupsPanel.class, adminUsername, groupAdminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_GROUP, GroupsPanel.class, adminUsername, groupAdminUsername);
 	}
 
 	@Test
 	void testAdminGroups1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_GROUP, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_GROUP, regularUsername);
 	}
 
 	@Test
 	void testAdminRooms() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_ROOM, RoomsPanel.class, adminUsername, groupAdminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_ROOM, RoomsPanel.class, adminUsername, groupAdminUsername);
 	}
 
 	@Test
 	void testAdminRooms1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_ROOM, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_ROOM, regularUsername);
 	}
 
 	@Test
 	void testAdminConfigs() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_CONFIG, ConfigsPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_CONFIG, ConfigsPanel.class, adminUsername);
 	}
 
 	@Test
 	void testAdminConfigs1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_CONFIG, groupAdminUsername, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_CONFIG, groupAdminUsername, regularUsername);
 	}
 
 	@Test
 	void testAdminLang() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_LANG, LangPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_LANG, LangPanel.class, adminUsername);
 	}
 
 	@Test
 	void testAdminLang1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_LANG, groupAdminUsername, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_LANG, groupAdminUsername, regularUsername);
 	}
 
 	@Test
 	void testAdminLdap() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_LDAP, LdapsPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_LDAP, LdapsPanel.class, adminUsername);
 	}
 
 	@Test
 	void testAdminLdap1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_LDAP, groupAdminUsername, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_LDAP, groupAdminUsername, regularUsername);
 	}
 
 	@Test
 	void testAdminOauth() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_OAUTH2, OAuthPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_OAUTH2, OAuthPanel.class, adminUsername);
 	}
 
 	@Test
 	void testAdminOauth1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_OAUTH2, groupAdminUsername, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_OAUTH2, groupAdminUsername, regularUsername);
 	}
 
 	@Test
 	void testAdminBackup() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_BACKUP, BackupPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_BACKUP, BackupPanel.class, adminUsername);
 	}
 
 	@Test
 	void testAdminBackup1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_BACKUP, groupAdminUsername, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_BACKUP, groupAdminUsername, regularUsername);
 	}
 
 	@Test
 	void testAdminEmail() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_EMAIL, EmailPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_EMAIL, EmailPanel.class, adminUsername);
 	}
 
 	@Test
 	void testAdminEmail1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_EMAIL, groupAdminUsername, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_EMAIL, groupAdminUsername, regularUsername);
 	}
 
 	@Test
 	void testAdminExtras() throws OmException {
-		checkArea(AreaKeys.admin, TYPE_EXTRA, ExtraPanel.class, adminUsername, groupAdminUsername);
+		checkArea(AreaKeys.ADMIN, TYPE_EXTRA, ExtraPanel.class, adminUsername, groupAdminUsername);
 	}
 
 	@Test
 	void testAdminExtras1() throws OmException {
-		checkUnauthArea(AreaKeys.admin, TYPE_EXTRA, regularUsername);
+		checkUnauthArea(AreaKeys.ADMIN, TYPE_EXTRA, regularUsername);
 	}
 
 	@Test
 	void testAdminBad() throws OmException {
-		checkArea(AreaKeys.admin, "BAD", OmDashboardPanel.class, adminUsername);
+		checkArea(AreaKeys.ADMIN, "BAD", OmDashboardPanel.class, adminUsername);
 	}
 
 	private void testRoom(Long id) throws OmException {
-		checkArea(AreaKeys.room, String.valueOf(id), RoomPanel.class, p -> {
+		checkArea(AreaKeys.ROOM, String.valueOf(id), RoomPanel.class, p -> {
 			RoomPanel rp = (RoomPanel)p.get(PATH_CHILD);
 			tester.executeBehavior((AbstractAjaxBehavior)rp.get("roomContainer").getBehaviorById(0)); //room enter
 			tester.assertComponent(PATH_CHILD + ":roomContainer:wb-area:whiteboard", AbstractWbPanel.class);
@@ -294,7 +294,7 @@
 
 	@Test
 	void testRoomBad() throws OmException {
-		checkArea(AreaKeys.room, "BAD", OmDashboardPanel.class, adminUsername);
+		checkArea(AreaKeys.ROOM, "BAD", OmDashboardPanel.class, adminUsername);
 	}
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
index e77fb4c..8082d96 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
@@ -57,7 +57,7 @@
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 @Tag("webservice")
-public class AbstractWebServiceTest {
+public abstract class AbstractWebServiceTest {
 	private static final String HOST = "localhost";
 	private static final String CONTEXT = "/openmeetings";
 	private static int port = 8080;
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
index bc10017..19acc7c 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
@@ -248,8 +248,8 @@
 
 			if (ouser == null) {
 				throw new InternalServiceException(UNKNOWN.getMessage());
-			} else if (ouser instanceof String) {
-				throw new InternalServiceException((String)ouser);
+			} else if (ouser instanceof String str) {
+				throw new InternalServiceException(str);
 			}
 
 			User u = (User)ouser;
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
index 8fa2d0e..087c1cb 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentListMessageBodyWriter.java
@@ -46,8 +46,7 @@
 public class AppointmentListMessageBodyWriter implements MessageBodyWriter<List<AppointmentDTO>> {
 	@Override
 	public boolean isWriteable(Class<?> clazz, Type type, Annotation[] annotations, MediaType mediaType) {
-		if (type instanceof ParameterizedType) {
-			ParameterizedType pt = (ParameterizedType)type;
+		if (type instanceof ParameterizedType pt) {
 			Type[] args = pt.getActualTypeArguments();
 			if (args != null && args.length == 1) {
 				return AppointmentDTO.class.equals(args[0]);