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

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


The following commit(s) were added to refs/heads/master by this push:
     new ad1762459 [OPENMEETINGS-2733] some Sonar issues are addressed
ad1762459 is described below

commit ad17624596ae060490e6fd083483770d20c85e6d
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed May 18 20:50:07 2022 +0700

    [OPENMEETINGS-2733] some Sonar issues are addressed
---
 .../openmeetings/core/converter/BaseConverter.java |  57 ++---
 .../core/converter/InterviewConverter.java         |  99 ++++----
 .../openmeetings/core/ldap/LdapLoginManager.java   | 277 +++++++++++----------
 .../openmeetings/core/remote/KurentoHandler.java   | 156 ++++++------
 .../openmeetings/core/remote/StreamProcessor.java  |  61 +++--
 .../apache/openmeetings/web/app/Application.java   |  10 +-
 .../web/common/tree/FileTreePanel.java             |   3 +-
 .../openmeetings/web/common/tree/FolderPanel.java  |  11 +-
 .../apache/openmeetings/web/room/RoomPanel.java    |   2 +-
 .../web/room/activities/ActivitiesPanel.java       |   6 +
 .../web/user/calendar/CalendarDialog.java          |   4 +
 11 files changed, 369 insertions(+), 317 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
index 736cc1163..582d1b2f5 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
@@ -179,39 +179,34 @@ public abstract class BaseConverter {
        }
 
        protected RecordingChunk waitForTheStream(long chunkId) {
-               RecordingChunk chunk = chunkDao.get(chunkId);
+               RecordingChunk chunk;
                try {
-                       if (chunk.getStreamStatus() != Status.STOPPED) {
-                               log.debug("### Chunk Stream not yet written to 
disk {}", chunkId);
-                               long counter = 0;
-                               long maxTimestamp = 0;
-                               while (true) {
-                                       log.trace("### Stream not yet written 
Thread Sleep - {}", chunkId);
-
-                                       chunk = chunkDao.get(chunkId);
-
-                                       if (chunk.getStreamStatus() == 
Status.STOPPED) {
-                                               printChunkInfo(chunk, "Stream 
now written");
-                                               log.debug("### Thread continue 
... " );
-                                               break;
-                                       } else {
-                                               File chunkFlv = 
getRecordingChunk(chunk.getRecording().getRoomId(), chunk.getStreamName());
-                                               if (chunkFlv.exists() && 
maxTimestamp < chunkFlv.lastModified()) {
-                                                       maxTimestamp = 
chunkFlv.lastModified();
-                                               }
-                                               if (maxTimestamp + 
TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
-                                                       log.debug("### long 
time without any update, closing ... ");
-                                                       
chunk.setStreamStatus(Status.STOPPED);
-                                                       chunkDao.update(chunk);
-                                                       break;
-                                               }
-                                       }
-                                       if (++counter % 1000 == 0) {
-                                               printChunkInfo(chunk, "Still 
waiting");
-                                       }
-
-                                       Thread.sleep(100L);
+                       long counter = 0;
+                       long maxTimestamp = 0;
+                       while (true) {
+                               chunk = chunkDao.get(chunkId);
+
+                               if (chunk.getStreamStatus() == Status.STOPPED) {
+                                       printChunkInfo(chunk, "Stream now 
written");
+                                       log.debug("### Chunk stopped, 
unblocking thread ... " );
+                                       break;
+                               }
+                               File chunkFlv = 
getRecordingChunk(chunk.getRecording().getRoomId(), chunk.getStreamName());
+                               if (chunkFlv.exists() && maxTimestamp < 
chunkFlv.lastModified()) {
+                                       maxTimestamp = chunkFlv.lastModified();
                                }
+                               if (maxTimestamp + TIME_TO_WAIT_FOR_FRAME < 
System.currentTimeMillis()) {
+                                       log.debug("### long time without any 
update, closing ... ");
+                                       chunk.setStreamStatus(Status.STOPPED);
+                                       chunkDao.update(chunk);
+                                       break;
+                               }
+                               if (++counter % 1000 == 0) {
+                                       printChunkInfo(chunk, "Still waiting");
+                               }
+
+                               log.trace("### Stream not yet written Thread 
Sleep - {}", chunkId);
+                               Thread.sleep(100L);
                        }
                } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
index 83de973a4..6b46cb761 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
@@ -228,56 +228,65 @@ public class InterviewConverter extends BaseConverter 
implements IRecordingConve
                return pStart;
        }
 
-       private static List<String> getFinalArgs(List<String> pods, File wav, 
int w) throws IOException {
+       private static void fillFinalArgsOnlyPod(List<String> args, String pod, 
File wav) throws IOException {
+               args.add("-i");
+               args.add(pod);
+               args.add("-i");
+               args.add(wav.getCanonicalPath());
+               args.add("-map");
+               args.add("0:v");
+       }
+
+       private static void fillFinalArgsGrid(List<String> args, List<String> 
pods, File wav, int w) throws IOException {
                final int numPods = pods.size();
-               List<String> args = new ArrayList<>();
-               if (numPods == 1) {
-                       args.add("-i");
-                       args.add(pods.get(0));
+               /* Creating grid
+                * ffmpeg -i top_l.mp4 -i top_r.mp4 -i bottom_l.mp4 -i 
bottom_r.mp4 -i audio.mp4 \
+                *      -filter_complex 
"[0:v][1:v]hstack=inputs=2[t];[2:v][3:v]hstack=inputs=2[b];[t][b]vstack=inputs=2[v]"
 \
+                *      -map "[v]" -map 4:a -c:a copy -shortest output.mp4
+                */
+               StringBuilder cols = new StringBuilder();
+               StringBuilder rows = new StringBuilder();
+               int colCount = 0;
+               int j = 0;
+               for (int i = 0; i < numPods; ++i) {
+                       colCount++;
                        args.add("-i");
-                       args.add(wav.getCanonicalPath());
-                       args.add("-map");
-                       args.add("0:v");
-               } else {
-                       /* Creating grid
-                        * ffmpeg -i top_l.mp4 -i top_r.mp4 -i bottom_l.mp4 -i 
bottom_r.mp4 -i audio.mp4 \
-                        *      -filter_complex 
"[0:v][1:v]hstack=inputs=2[t];[2:v][3:v]hstack=inputs=2[b];[t][b]vstack=inputs=2[v]"
 \
-                        *      -map "[v]" -map 4:a -c:a copy -shortest 
output.mp4
-                        */
-                       StringBuilder cols = new StringBuilder();
-                       StringBuilder rows = new StringBuilder();
-                       int colCount = 0;
-                       int j = 0;
-                       for (int i = 0; i < numPods; ++i) {
-                               colCount++;
-                               args.add("-i");
-                               args.add(pods.get(i));
-                               cols.append('[').append(i).append(":v]");
-                               if (i != 0 && colCount % w == 0) {
-                                       
cols.append("hstack=inputs=").append(colCount);
-                                       if (j == 0 && i == numPods - 1) {
-                                               cols.append("[v]");
-                                       } else {
-                                               
cols.append("[c").append(j).append("];");
-                                       }
-                                       rows.append("[c").append(j).append(']');
-                                       j++;
-                                       colCount = 0;
+                       args.add(pods.get(i));
+                       cols.append('[').append(i).append(":v]");
+                       if (i != 0 && colCount % w == 0) {
+                               cols.append("hstack=inputs=").append(colCount);
+                               if (j == 0 && i == numPods - 1) {
+                                       cols.append("[v]");
+                               } else {
+                                       
cols.append("[c").append(j).append("];");
                                }
-                               if (i == numPods - 1) {
-                                       if (j > 1) {
-                                               
rows.append("vstack=inputs=").append(j).append("[out];[out]pad=ceil(iw/2)*2:ceil(ih/2)*2[v]");
-                                       } else {
-                                               rows.setLength(0);
-                                       }
+                               rows.append("[c").append(j).append(']');
+                               j++;
+                               colCount = 0;
+                       }
+                       if (i == numPods - 1) {
+                               if (j > 1) {
+                                       
rows.append("vstack=inputs=").append(j).append("[out];[out]pad=ceil(iw/2)*2:ceil(ih/2)*2[v]");
+                               } else {
+                                       rows.setLength(0);
                                }
                        }
-                       args.add("-i");
-                       args.add(wav.getCanonicalPath());
-                       args.add("-filter_complex");
-                       args.add(cols.append(rows).toString());
-                       args.add("-map");
-                       args.add("[v]");
+               }
+               args.add("-i");
+               args.add(wav.getCanonicalPath());
+               args.add("-filter_complex");
+               args.add(cols.append(rows).toString());
+               args.add("-map");
+               args.add("[v]");
+       }
+
+       private static List<String> getFinalArgs(List<String> pods, File wav, 
int w) throws IOException {
+               final int numPods = pods.size();
+               List<String> args = new ArrayList<>();
+               if (numPods == 1) {
+                       fillFinalArgsOnlyPod(args, pods.get(0), wav);
+               } else {
+                       fillFinalArgsGrid(args, pods, wav, w);
                }
                args.add("-map");
                args.add(numPods + ":a");
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManager.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManager.java
index 1d9ff93a7..e0e7804b9 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManager.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManager.java
@@ -37,6 +37,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Properties;
 
 import org.apache.commons.io.FileUtils;
@@ -53,6 +54,7 @@ import 
org.apache.directory.api.ldap.model.message.AliasDerefMode;
 import org.apache.directory.api.ldap.model.message.SearchRequestImpl;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.ldap.client.api.EntryCursorImpl;
 import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.ldap.client.api.LdapNetworkConnection;
@@ -166,6 +168,53 @@ public class LdapLoginManager {
                return getStringAttr(config, entry, CONFIGKEY_LDAP_KEY_LOGIN, 
LDAP_KEY_LOGIN);
        }
 
+       private User doLogin(LdapWorker w, String login, String passwd, Long 
domainId) throws Exception {
+               User u = null;
+               boolean authenticated = true;
+               Dn userDn = null;
+               Entry entry = null;
+               switch (w.options.type) {
+                       case SEARCHANDBIND:
+                               Map.Entry<Dn, Entry> search = searchAndBind(w, 
login, passwd);
+                               userDn = search.getKey();
+                               entry = search.getValue();
+                               break;
+                       case SIMPLEBIND:
+                               userDn = new Dn(String.format(w.options.userDn, 
login));
+                               w.conn.bind(userDn, passwd);
+                               break;
+                       case NONE:
+                       default:
+                               authenticated = false;
+                               break;
+               }
+               u = authenticated ? userDao.getByLogin(login, Type.LDAP, 
domainId) : userDao.login(login, passwd);
+               log.debug("getByLogin:: authenticated ? {}, login = '{}', 
domain = {}, user = {}", authenticated, login, domainId, u);
+               if (u == null && Provisionning.AUTOCREATE != w.options.prov) {
+                       log.error("User not found in OM DB and 
Provisionning.AUTOCREATE was not set");
+                       throw BAD_CREDENTIALS;
+               }
+               if (authenticated && entry == null) {
+                       if (w.options.useAdminForAttrs) {
+                               bindAdmin(w.conn, w.options);
+                       }
+                       entry = w.conn.lookup(userDn);
+               }
+               switch (w.options.prov) {
+                       case AUTOUPDATE, AUTOCREATE:
+                               u = w.getUser(entry, u);
+                               if (w.options.syncPasswd) {
+                                       u.updatePassword(passwd);
+                               }
+                               u = userDao.update(u, null);
+                               u = w.setUserPicture(entry, u);
+                               break;
+                       case NONE:
+                       default:
+                               break;
+               }
+               return u;
+       }
        /**
         * Ldap Login
         *
@@ -188,49 +237,7 @@ public class LdapLoginManager {
                try (LdapWorker w = new LdapWorker(domainId)) {
                        String login = w.options.useLowerCase ? 
inLogin.toLowerCase(Locale.ROOT) : inLogin;
 
-                       boolean authenticated = true;
-                       Dn userDn = null;
-                       Entry entry = null;
-                       switch (w.options.type) {
-                               case SEARCHANDBIND:
-                                       Map.Entry<Dn, Entry> search = 
searchAndBind(w, login, passwd);
-                                       userDn = search.getKey();
-                                       entry = search.getValue();
-                                       break;
-                               case SIMPLEBIND:
-                                       userDn = new 
Dn(String.format(w.options.userDn, login));
-                                       w.conn.bind(userDn, passwd);
-                                       break;
-                               case NONE:
-                               default:
-                                       authenticated = false;
-                                       break;
-                       }
-                       u = authenticated ? userDao.getByLogin(login, 
Type.LDAP, domainId) : userDao.login(login, passwd);
-                       log.debug("getByLogin:: authenticated ? {}, login = 
'{}', domain = {}, user = {}", authenticated, login, domainId, u);
-                       if (u == null && Provisionning.AUTOCREATE != 
w.options.prov) {
-                               log.error("User not found in OM DB and 
Provisionning.AUTOCREATE was not set");
-                               throw BAD_CREDENTIALS;
-                       }
-                       if (authenticated && entry == null) {
-                               if (w.options.useAdminForAttrs) {
-                                       bindAdmin(w.conn, w.options);
-                               }
-                               entry = w.conn.lookup(userDn);
-                       }
-                       switch (w.options.prov) {
-                               case AUTOUPDATE, AUTOCREATE:
-                                       u = w.getUser(entry, u);
-                                       if (w.options.syncPasswd) {
-                                               u.updatePassword(passwd);
-                                       }
-                                       u = userDao.update(u, null);
-                                       u = w.setUserPicture(entry, u);
-                                       break;
-                               case NONE:
-                               default:
-                                       break;
-                       }
+                       u = doLogin(w, login, passwd, domainId);
                } catch (LdapAuthenticationException ae) {
                        log.error("Not authenticated.", ae);
                        throw BAD_CREDENTIALS;
@@ -342,68 +349,94 @@ public class LdapLoginManager {
                        conn = new LdapNetworkConnection(options.host, 
options.port, options.secure);
                }
 
-               public User setUserPicture(Entry entry, User inUser) throws 
LdapInvalidAttributeValueException {
-                       Attribute a = getAttr(config, entry, 
CONFIGKEY_LDAP_KEY_PICTURE, "");
+               private User updatePic(User inUser, InputStream is, StoredFile 
sf) {
                        User u = inUser;
-                       if (a != null) {
-                               Value val = a.get();
-                               if (val != null && val.getBytes() != null) {
-                                       InputStream is = new 
ByteArrayInputStream(val.getBytes());
-                                       StoredFile sf = new 
StoredFile("picture", is);
-                                       if (sf.isImage()) {
-                                               Path tempImage = null;
-                                               try {
-                                                       tempImage = 
Files.createTempFile("omLdap", "img");
-                                                       
FileUtils.copyToFile(is, tempImage.toFile());
-                                                       
imageConverter.convertImageUserProfile(tempImage.toFile(), inUser.getId(), 
sf.isAsIs());
-                                                       u = 
userDao.get(inUser.getId());
-                                               } catch (Exception e) {
-                                                       log.error("Unable to 
store binary image from LDAP", e);
-                                               } finally {
-                                                       if (tempImage != null) {
-                                                               try {
-                                                                       
Files.deleteIfExists(tempImage);
-                                                               } catch 
(IOException e) {
-                                                                       
log.error("Unexpected error while clean-up", e);
-                                                               }
-                                                       }
-                                               }
-                                       } else {
-                                               
u.setPictureUri(val.getString());
+                       Path tempImage = null;
+                       try {
+                               tempImage = Files.createTempFile("omLdap", 
"img");
+                               FileUtils.copyToFile(is, tempImage.toFile());
+                               
imageConverter.convertImageUserProfile(tempImage.toFile(), inUser.getId(), 
sf.isAsIs());
+                               u = userDao.get(inUser.getId());
+                       } catch (Exception e) {
+                               log.error("Unable to store binary image from 
LDAP", e);
+                       } finally {
+                               if (tempImage != null) {
+                                       try {
+                                               Files.deleteIfExists(tempImage);
+                                       } catch (IOException e) {
+                                               log.error("Unexpected error 
while clean-up", e);
                                        }
                                }
                        }
-                       if (Strings.isEmpty(u.getPictureUri()) && 
!Strings.isEmpty(options.pictureUri)) {
-                               u.setPictureUri(options.pictureUri);
+                       return u;
+               }
+
+               public User setUserPicture(Entry entry, User inUser) throws 
LdapInvalidAttributeValueException {
+                       User user = Optional.ofNullable(getAttr(config, entry, 
CONFIGKEY_LDAP_KEY_PICTURE, ""))
+                                       .map(Attribute::get)
+                                       .filter(val -> val != null && 
val.getBytes() != null)
+                                       .map(val -> {
+                                               User u = inUser;
+                                               InputStream is = new 
ByteArrayInputStream(val.getBytes());
+                                               StoredFile sf = new 
StoredFile("picture", is);
+                                               if (sf.isImage()) {
+                                                       u = updatePic(inUser, 
is, sf);
+                                               } else {
+                                                       
u.setPictureUri(val.getString());
+                                               }
+                                               return u;
+                                       }).orElse(inUser);
+                       if (Strings.isEmpty(user.getPictureUri()) && 
!Strings.isEmpty(options.pictureUri)) {
+                               user.setPictureUri(options.pictureUri);
+                       }
+                       return userDao.update(user, null);
+               }
+
+               private User create(Entry entry) throws 
LdapInvalidAttributeValueException {
+                       User u = getNewUserInstance(null);
+                       u.setType(Type.LDAP);
+                       u.getRights().remove(Right.LOGIN);
+                       u.setDomainId(domainId);
+                       Group g = groupDao.get(getDefaultGroup());
+                       if (g != null) {
+                               u.addGroup(g);
+                       }
+                       String login = getLogin(config, entry);
+                       if (ldapCfg.getAddDomainToUserName()) {
+                               login = login + "@" + ldapCfg.getDomain();
+                       }
+                       if (options.useLowerCase) {
+                               login = login.toLowerCase(Locale.ROOT);
+                       }
+                       u.setLogin(login);
+                       u.setShowContactDataToContacts(true);
+                       u.setAddress(new Address());
+                       return u;
+               }
+
+               private List<Dn> getGroupDns(Entry entry, User u) throws 
IOException, LdapException, CursorException {
+                       List<Dn> groups = new ArrayList<>();
+                       if (GroupMode.ATTRIBUTE == options.groupMode) {
+                               Attribute attr = getAttr(config, entry, 
CONFIGKEY_LDAP_KEY_GROUP, LDAP_KEY_GROUP);
+                               if (attr != null) {
+                                       for (Value v : attr) {
+                                               groups.add(new 
Dn(v.getString()));
+                                       }
+                               }
+                       } else if (GroupMode.QUERY == options.groupMode) {
+                               Dn baseDn = new Dn(options.searchBase);
+                               String searchQ = 
String.format(options.groupQuery, u.getLogin());
+                               fillGroups(baseDn, searchQ, groups);
                        }
-                       return userDao.update(u, null);
+                       return groups;
                }
 
-               public User getUser(Entry entry, User u) throws LdapException, 
CursorException, OmException, IOException {
+               public User getUser(Entry entry, User user) throws 
LdapException, CursorException, OmException, IOException {
                        if (entry == null) {
                                log.error("LDAP entry is null, search or lookup 
by Dn failed");
                                throw BAD_CREDENTIALS;
                        }
-                       if (u == null) {
-                               u = getNewUserInstance(null);
-                               u.setType(Type.LDAP);
-                               u.getRights().remove(Right.LOGIN);
-                               u.setDomainId(domainId);
-                               Group g = groupDao.get(getDefaultGroup());
-                               if (g != null) {
-                                       u.addGroup(g);
-                               }
-                               String login = getLogin(config, entry);
-                               if (ldapCfg.getAddDomainToUserName()) {
-                                       login = login + "@" + 
ldapCfg.getDomain();
-                               }
-                               if (options.useLowerCase) {
-                                       login = login.toLowerCase(Locale.ROOT);
-                               }
-                               u.setLogin(login);
-                               u.setShowContactDataToContacts(true);
-                               u.setAddress(new Address());
-                       }
+                       User u = user == null ? create(entry) : user;
                        u.setLastname(getStringAttr(config, entry, 
CONFIGKEY_LDAP_KEY_LASTNAME, LDAP_KEY_LASTNAME));
                        u.setFirstname(getStringAttr(config, entry, 
CONFIGKEY_LDAP_KEY_FIRSTNAME, LDAP_KEY_FIRSTNAME));
                        u.getAddress().setEmail(getStringAttr(config, entry, 
CONFIGKEY_LDAP_KEY_MAIL, LDAP_KEY_MAIL));
@@ -420,42 +453,30 @@ public class LdapLoginManager {
                        }
                        u.setTimeZoneId(getTimeZone(tz).getID());
 
-                       List<Dn> groups = new ArrayList<>();
-                       if (GroupMode.ATTRIBUTE == options.groupMode) {
-                               Attribute attr = getAttr(config, entry, 
CONFIGKEY_LDAP_KEY_GROUP, LDAP_KEY_GROUP);
-                               if (attr != null) {
-                                       for (Value v : attr) {
-                                               groups.add(new 
Dn(v.getString()));
-                                       }
-                               }
-                       } else if (GroupMode.QUERY == options.groupMode) {
-                               Dn baseDn = new Dn(options.searchBase);
-                               String searchQ = 
String.format(options.groupQuery, u.getLogin());
-                               fillGroups(baseDn, searchQ, groups);
-                       }
-                       for (Dn g : groups) {
-                               String name = g.getRdn().getValue();
-                               if (!Strings.isEmpty(name)) {
-                                       Group o = groupDao.get(name);
-                                       boolean found = false;
-                                       if (o == null) {
-                                               o = new Group();
-                                               o.setName(name);
-                                               o = groupDao.update(o, 
u.getId());
-                                       } else {
-                                               for (GroupUser ou : 
u.getGroupUsers()) {
-                                                       if 
(ou.getGroup().getName().equals(name)) {
-                                                               found = true;
-                                                               break;
+                       getGroupDns(entry, u).stream()
+                                       .map(Dn::getRdn)
+                                       .map(Rdn::getValue)
+                                       .filter(name -> !Strings.isEmpty(name))
+                                       .forEach(name -> {
+                                               Group o = groupDao.get(name);
+                                               boolean found = false;
+                                               if (o == null) {
+                                                       o = new Group();
+                                                       o.setName(name);
+                                                       o = groupDao.update(o, 
u.getId());
+                                               } else {
+                                                       for (GroupUser ou : 
u.getGroupUsers()) {
+                                                               if 
(ou.getGroup().getName().equals(name)) {
+                                                                       found = 
true;
+                                                                       break;
+                                                               }
                                                        }
                                                }
-                                       }
-                                       if (!found) {
-                                               u.addGroup(o);
-                                               log.debug("Going to add user to 
group:: {}", name);
-                                       }
-                               }
-                       }
+                                               if (!found) {
+                                                       u.addGroup(o);
+                                                       log.debug("Going to add 
user to group:: {}", name);
+                                               }
+                                       });
                        return u;
                }
 
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 aa4d6af87..f1d62de9c 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
@@ -427,86 +427,100 @@ public class KurentoHandler {
                        scheduler = 
Executors.newScheduledThreadPool(watchThreadCount);
                }
 
-               @Override
-               public void onEvent(ObjectCreatedEvent evt) {
-                       log.debug("Kurento::ObjectCreated -> {}, source {}", 
evt.getObject(), evt.getSource());
-                       if (evt.getObject() instanceof MediaPipeline) {
-                               // room created
-                               final String roid = evt.getObject().getId();
-                               scheduler.schedule(() -> {
-                                       if (client == null) {
+               private void checkPipeline(String roomOid) {
+                       scheduler.schedule(() -> {
+                               if (client == null) {
+                                       return;
+                               }
+                               // still alive
+                               MediaPipeline pipe = client.getById(roomOid, 
MediaPipeline.class);
+                               Map<String, String> tags = tagsAsMap(pipe);
+                               try {
+                                       final String inKuid = 
tags.get(TAG_KUID);
+                                       if (inKuid != null && 
ignoredKuids.contains(inKuid)) {
                                                return;
                                        }
-                                       // still alive
-                                       MediaPipeline pipe = 
client.getById(roid, MediaPipeline.class);
-                                       Map<String, String> tags = 
tagsAsMap(pipe);
-                                       try {
-                                               final String inKuid = 
tags.get(TAG_KUID);
-                                               if (inKuid != null && 
ignoredKuids.contains(inKuid)) {
-                                                       return;
-                                               }
-                                               if (validTestPipeline(tags)) {
-                                                       return;
-                                               }
-                                               if (kuid.equals(inKuid)) {
-                                                       KStream stream = 
streamProcessor.getByUid(tags.get(TAG_STREAM_UID));
-                                                       if (stream != null) {
-                                                               if 
(stream.getRoomId().equals(Long.valueOf(tags.get(TAG_ROOM)))
-                                                                               
&& stream.getPipeline().getId().equals(pipe.getId()))
-                                                               {
-                                                                       return;
-                                                               } else {
-                                                                       
stream.release();
-                                                               }
+                                       if (validTestPipeline(tags)) {
+                                               return;
+                                       }
+                                       if (kuid.equals(inKuid)) {
+                                               KStream stream = 
streamProcessor.getByUid(tags.get(TAG_STREAM_UID));
+                                               if (stream != null) {
+                                                       if 
(stream.getRoomId().equals(Long.valueOf(tags.get(TAG_ROOM)))
+                                                                       && 
stream.getPipeline().getId().equals(pipe.getId()))
+                                                       {
+                                                               return;
+                                                       } else {
+                                                               
stream.release();
                                                        }
                                                }
-                                       } catch (Exception e) {
-                                               log.warn("Unexpected error 
while checking MediaPipeline {}, tags: {}", pipe.getId(), tags, e);
                                        }
-                                       log.warn("Invalid MediaPipeline {} 
detected, will be dropped, tags: {}", pipe.getId(), tags);
-                                       pipe.release();
-                               }, objCheckTimeout, MILLISECONDS);
-                       } else if (evt.getObject() instanceof Endpoint 
curPoint) {
-                               // endpoint created
-                               final String eoid = curPoint.getId();
-                               Class<? extends Endpoint> clazz = null;
-                               if (curPoint instanceof WebRtcEndpoint) {
-                                       clazz = WebRtcEndpoint.class;
-                               } else if (curPoint instanceof 
RecorderEndpoint) {
-                                       clazz = RecorderEndpoint.class;
-                               } else if (curPoint instanceof PlayerEndpoint) {
-                                       clazz = PlayerEndpoint.class;
-                               } else if (curPoint instanceof RtpEndpoint) {
-                                       clazz = RtpEndpoint.class;
+                               } catch (Exception e) {
+                                       log.warn("Unexpected error while 
checking MediaPipeline {}, tags: {}", pipe.getId(), tags, e);
                                }
-                               final Class<? extends Endpoint> fClazz = clazz;
-                               scheduler.schedule(() -> {
-                                       if (client == null || fClazz == null) {
+                               log.warn("Invalid MediaPipeline {} detected, 
will be dropped, tags: {}", pipe.getId(), tags);
+                               pipe.release();
+                       }, objCheckTimeout, MILLISECONDS);
+               }
+
+               private Class<? extends Endpoint> getEndpointClass(Endpoint 
curPoint) {
+                       Class<? extends Endpoint> clazz = null;
+                       if (curPoint instanceof WebRtcEndpoint) {
+                               clazz = WebRtcEndpoint.class;
+                       } else if (curPoint instanceof RecorderEndpoint) {
+                               clazz = RecorderEndpoint.class;
+                       } else if (curPoint instanceof PlayerEndpoint) {
+                               clazz = PlayerEndpoint.class;
+                       } else if (curPoint instanceof RtpEndpoint) {
+                               clazz = RtpEndpoint.class;
+                       }
+                       return clazz;
+               }
+
+               private void checkEndpoint(String endpointOid, Class<? extends 
Endpoint> clazz) {
+                       scheduler.schedule(() -> {
+                               if (client == null || clazz == null) {
+                                       return;
+                               }
+                               // still alive
+                               Endpoint point = client.getById(eoid, clazz);
+                               Map<String, String> tags = tagsAsMap(point);
+                               try {
+                                       Map<String, String> pipeTags = 
tagsAsMap(point.getMediaPipeline());
+                                       final String inKuid = 
pipeTags.get(TAG_KUID);
+                                       if (ignoredKuids.contains(inKuid)) {
                                                return;
                                        }
-                                       // still alive
-                                       Endpoint point = client.getById(eoid, 
fClazz);
-                                       Map<String, String> tags = 
tagsAsMap(point);
-                                       try {
-                                               Map<String, String> pipeTags = 
tagsAsMap(point.getMediaPipeline());
-                                               final String inKuid = 
pipeTags.get(TAG_KUID);
-                                               if 
(ignoredKuids.contains(inKuid)) {
-                                                       return;
-                                               }
-                                               if 
(validTestPipeline(pipeTags)) {
-                                                       return;
-                                               }
-                                               KStream stream = 
streamProcessor.getByUid(tags.get("outUid"));
-                                               
log.debug("Kurento::ObjectCreated -> New Endpoint {} detected, tags: {}, 
kStream: {}", point.getId(), tags, stream);
-                                               if (stream != null && 
stream.contains(tags.get("uid"))) {
-                                                       return;
-                                               }
-                                       } catch (Exception e) {
-                                               log.warn("Unexpected error 
while checking Endpoint {}, tags: {}", point.getId(), tags, e);
+                                       if (validTestPipeline(pipeTags)) {
+                                               return;
                                        }
-                                       log.warn("Invalid Endpoint {} detected, 
will be dropped, tags: {}", point.getId(), tags);
-                                       point.release();
-                               }, objCheckTimeout, MILLISECONDS);
+                                       KStream stream = 
streamProcessor.getByUid(tags.get("outUid"));
+                                       log.debug("Kurento::ObjectCreated -> 
New Endpoint {} detected, tags: {}, kStream: {}", point.getId(), tags, stream);
+                                       if (stream != null && 
stream.contains(tags.get("uid"))) {
+                                               return;
+                                       }
+                               } catch (Exception e) {
+                                       log.warn("Unexpected error while 
checking Endpoint {}, tags: {}", point.getId(), tags, e);
+                               }
+                               log.warn("Invalid Endpoint {} detected, will be 
dropped, tags: {}", point.getId(), tags);
+                               point.release();
+                       }, objCheckTimeout, MILLISECONDS);
+               }
+
+               @Override
+               public void onEvent(ObjectCreatedEvent evt) {
+                       log.debug("Kurento::ObjectCreated -> {}, source {}", 
evt.getObject(), evt.getSource());
+                       if (evt.getObject() instanceof MediaPipeline) {
+                               // room created
+                               final String roid = evt.getObject().getId();
+
+                               checkPipeline(roid);
+                       } else if (evt.getObject() instanceof Endpoint 
curPoint) {
+                               // endpoint created
+                               final String eoid = curPoint.getId();
+                               final Class<? extends Endpoint> clazz = 
getEndpointClass(curPoint);
+
+                               checkEndpoint(eoid, clazz);
                        }
                }
 
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
index d99edb9e9..2ef4b79f0 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
@@ -85,25 +85,14 @@ public class StreamProcessor implements IStreamProcessor {
        @TimedApplication
        void onMessage(Client c, final String cmdId, JSONObject msg) {
                final String uid = msg.optString("uid");
-               StreamDesc sd;
                Optional<StreamDesc> osd;
                log.debug("Incoming message from user with ID '{}': {}", 
c.getUserId(), msg);
                switch (cmdId) {
                        case "devicesAltered":
-                               sd = c.getStream(uid);
-                               if (sd != null) {
-                                       if (!msg.getBoolean("audio") && 
c.hasActivity(Activity.AUDIO)) {
-                                               c.remove(Activity.AUDIO);
-                                       }
-                                       if (!msg.getBoolean("video") && 
c.hasActivity(Activity.VIDEO)) {
-                                               c.remove(Activity.VIDEO);
-                                       }
-                                       sd.setActivities();
-                                       WebSocketHelper.sendRoom(new 
TextRoomMessage(c.getRoomId(), cm.update(c), RoomMessage.Type.RIGHT_UPDATED, 
c.getUid()));
-                               }
+                               onDeviceAltered(c, uid, msg);
                                break;
                        case "toggleActivity":
-                               toggleActivity(c, 
Activity.valueOf(msg.getString("activity")));
+                               onToggleActivity(c, 
Activity.valueOf(msg.getString("activity")));
                                break;
                        case "broadcastStarted":
                                
streamProcessorActions.handleBroadcastStarted(c, uid, msg);
@@ -124,19 +113,7 @@ public class StreamProcessor implements IStreamProcessor {
                                }
                                break;
                        case "wannaRecord":
-                               osd = c.getScreenStream();
-                               if (recordingAllowed(c)) {
-                                       Room r = c.getRoom();
-                                       if (Room.Type.INTERVIEW == r.getType()) 
{
-                                               log.warn("This shouldn't be 
called for interview room");
-                                               break;
-                                       }
-                                       boolean sharing = isSharing(r.getId());
-                                       startSharing(c, osd, msg, 
Activity.RECORD);
-                                       if (sharing) {
-                                               startRecording(c);
-                                       }
-                               }
+                               onWannaRecord(c, msg);
                                break;
                        case "pauseSharing":
                                pauseSharing(c, uid);
@@ -153,6 +130,36 @@ public class StreamProcessor implements IStreamProcessor {
                }
        }
 
+       private void onDeviceAltered(Client c, String uid, JSONObject msg) {
+               StreamDesc sd = c.getStream(uid);
+               if (sd != null) {
+                       if (!msg.getBoolean("audio") && 
c.hasActivity(Activity.AUDIO)) {
+                               c.remove(Activity.AUDIO);
+                       }
+                       if (!msg.getBoolean("video") && 
c.hasActivity(Activity.VIDEO)) {
+                               c.remove(Activity.VIDEO);
+                       }
+                       sd.setActivities();
+                       WebSocketHelper.sendRoom(new 
TextRoomMessage(c.getRoomId(), cm.update(c), RoomMessage.Type.RIGHT_UPDATED, 
c.getUid()));
+               }
+       }
+
+       private void onWannaRecord(Client c, JSONObject msg) {
+               Optional<StreamDesc> osd = c.getScreenStream();
+               if (recordingAllowed(c)) {
+                       Room r = c.getRoom();
+                       if (Room.Type.INTERVIEW == r.getType()) {
+                               log.warn("This shouldn't be called for 
interview room");
+                               return;
+                       }
+                       boolean sharing = isSharing(r.getId());
+                       startSharing(c, osd, msg, Activity.RECORD);
+                       if (sharing) {
+                               startRecording(c);
+                       }
+               }
+       }
+
        /**
         *  Method to start broadcasting.  Externalised for mocking purpose to 
be able to
         *  prevent calling webRTC methods.
@@ -187,7 +194,7 @@ public class StreamProcessor implements IStreamProcessor {
        }
 
        @TimedApplication
-       public void toggleActivity(Client c, Activity a) {
+       public void onToggleActivity(Client c, Activity a) {
                log.info("PARTICIPANT {}: trying to toggle activity {}", c, a);
                if (!kHandler.isConnected()) {
                        return;
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 3e4283938..3ec486d72 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,12 +287,10 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                        @Override
                        public void onEndRequest(RequestCycle cycle) {
                                Response resp = cycle.getResponse();
-                               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");
-                                               
wresp.setHeader("X-Content-Type-Options", "nosniff");
-                                       }
+                               if (resp instanceof WebResponse wresp && 
wresp.isHeaderSupported()) {
+                                       wresp.setHeader("X-XSS-Protection", "1; 
mode=block");
+                                       
wresp.setHeader("Strict-Transport-Security", "max-age=31536000; 
includeSubDomains; preload");
+                                       
wresp.setHeader("X-Content-Type-Options", "nosniff");
                                }
                        }
                });
diff --git 
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
index 5f6954fe9..89cc385ef 100644
--- 
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
@@ -190,8 +190,7 @@ public abstract class FileTreePanel extends Panel {
                        @Override
                        public void onDrop(AjaxRequestTarget target, Component 
component) {
                                Object o = component.getDefaultModelObject();
-                               if (o instanceof BaseFileItem) {
-                                       BaseFileItem f = (BaseFileItem)o;
+                               if (o instanceof BaseFileItem f) {
                                        if (isSelected(f)) {
                                                deleteAll(target);
                                        } else {
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 5909d3bb7..b0057ab6d 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
@@ -110,8 +110,8 @@ public class FolderPanel extends Panel implements 
IDraggableListener, IDroppable
                        protected void onSubmit(AjaxRequestTarget target) {
                                super.onSubmit(target);
                                f.setName(getEditor().getModelObject());
-                               if (f instanceof Recording) {
-                                       recDao.update((Recording)f);
+                               if (f instanceof Recording rec) {
+                                       recDao.update(rec);
                                } else {
                                        fileDao.update((FileItem)f);
                                }
@@ -153,8 +153,8 @@ public class FolderPanel extends Panel implements 
IDraggableListener, IDroppable
                f.setOwnerId(p.getOwnerId());
                f.setRoomId(p.getRoomId());
                f.setGroupId(p.getGroupId());
-               if (f instanceof Recording) {
-                       recDao.update((Recording)f);
+               if (f instanceof Recording rec) {
+                       recDao.update(rec);
                } else {
                        fileDao.update((FileItem)f);
                }
@@ -216,9 +216,8 @@ public class FolderPanel extends Panel implements 
IDraggableListener, IDroppable
        @Override
        public void onDrop(AjaxRequestTarget target, Component component) {
                Object o = component.getDefaultModelObject();
-               if (o instanceof BaseFileItem) {
+               if (o instanceof BaseFileItem f) {
                        BaseFileItem p = (BaseFileItem)getDefaultModelObject();
-                       BaseFileItem f = (BaseFileItem)o;
                        if (treePanel.isSelected(f)) {
                                moveAll(target, p);
                        } else {
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 821ab685d..78e99af87 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
@@ -796,7 +796,7 @@ public class RoomPanel extends BasePanel {
                                                if (!c.getRoom().isAudioOnly() 
&& !activityAllowed(c, Client.Activity.VIDEO, c.getRoom())) {
                                                        
c.allow(Room.Right.VIDEO);
                                                }
-                                               
streamProcessor.toggleActivity(c, c.getRoom().isAudioOnly()
+                                               
streamProcessor.onToggleActivity(c, c.getRoom().isAudioOnly()
                                                                ? 
Client.Activity.AUDIO
                                                                : 
Client.Activity.AUDIO_VIDEO);
                                        }
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 d2c314de4..a631f0c9a 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
@@ -223,6 +223,8 @@ public class ActivitiesPanel extends Panel {
                        case REQ_RIGHT_HAVE_QUESTION:
                                text = String.format(fmt, name, 
getString("activities.ask.question"), df.format(a.getCreated()));
                                break;
+                       default:
+                               break;
                }
                final JSONObject aobj = new JSONObject()
                        .put("id", a.getId())
@@ -244,6 +246,8 @@ public class ActivitiesPanel extends Panel {
                                aobj.put("accept", false);
                                aobj.put("decline", false);
                                break;
+                       default:
+                               break;
                }
                handler.appendJavaScript(new 
StringBuilder("Activities.add(").append(aobj.toString()).append(");"));
        }
@@ -269,6 +273,8 @@ public class ActivitiesPanel extends Panel {
                                break;
                        case ROOM_ENTER, ROOM_EXIT:
                                cls.append("bg-white auto-clean");
+                       default:
+                               break;
                }
                return cls;
        }
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 d7caa3a30..83715ecb9 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
@@ -358,6 +358,8 @@ public class CalendarDialog extends Modal<OmCalendar> {
                                        
target.add(delete.setVisible(isOwner(c)));
                                }
                                target.add(save.setVisible(isOwner(c)));
+                       default:
+                               break;
                }
        }
 
@@ -465,6 +467,8 @@ public class CalendarDialog extends Modal<OmCalendar> {
                                        gcal.setEnabled(false);
                                        setGCalVisibility(calendar);
                                        break;
+                               default:
+                                       break;
                        }
                }
 

Reply via email to