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 a0582ea [OPENMEETINGS-1856] sonar should be more happy
a0582ea is described below
commit a0582ead073fdb8afb0e0a551223e82500bd2c4c
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sat Oct 27 01:27:03 2018 +0700
[OPENMEETINGS-1856] sonar should be more happy
---
.../core/converter/InterviewConverter.java | 162 +++++++++++----------
.../openmeetings/core/ldap/LdapLoginManager.java | 152 ++++++++++---------
.../room/sidebar/icon/right/AudioRightIcon.java | 2 +-
.../sidebar/icon/right/ExclusiveRightIcon.java | 2 +-
.../sidebar/icon/right/ModeratorRightIcon.java | 2 +-
.../sidebar/icon/right/PresenterRightIcon.java | 2 +-
.../sidebar/icon/right/RemoteControlRightIcon.java | 2 +-
.../sidebar/icon/right/ScreenShareRightIcon.java | 2 +-
.../room/sidebar/icon/right/VideoRightIcon.java | 2 +-
.../sidebar/icon/right/WhiteboardRightIcon.java | 2 +-
10 files changed, 178 insertions(+), 152 deletions(-)
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 79f0077..88772a7 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
@@ -24,6 +24,7 @@ import static
org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
import static org.apache.openmeetings.util.OmFileHelper.getRecordingChunk;
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
@@ -92,32 +93,7 @@ public class InterviewConverter extends BaseConverter
implements IRecordingConve
for (Entry<String, List<RecordingChunk>> e :
cunksBySid.entrySet()) {
Date pStart = r.getRecordStart();
List<PodPart> parts = new ArrayList<>();
- for (RecordingChunk chunk : e.getValue()) {
- File chunkStream =
getRecordingChunk(r.getRoomId(), chunk.getStreamName());
- if (chunkStream.exists()) {
- String path =
chunkStream.getCanonicalPath();
- /* CHECK FILE:
- * ffmpeg -i
rec_316_stream_567_2013_08_28_11_51_45.webm -v error -f null file.null
- */
- String[] args = new String[]
{getPathToFFMPEG(), "-y"
- , "-i", path
- , "-v", "error"
- , "-f", "null"
- , "file.null"};
- ProcessResult res =
ProcessHelper.executeScript(String.format("Check chunk pod video_%s_%s", N,
parts.size()), args, true);
- logs.add(res);
- if (!res.isWarn()) {
- long diff =
diff(chunk.isAudioOnly() ? chunk.getEnd() : chunk.getStart(), pStart);
- PodPart.add(parts,
diff);
- if
(!chunk.isAudioOnly()) {
- parts.add(new
PodPart(path, diff(chunk.getEnd(), chunk.getStart())));
- }
- pStart = chunk.getEnd();
- }
- } else {
- log.debug("Chunk stream doesn't
exist: {}", chunkStream);
- }
- }
+ pStart = processParts(r.getRoomId(),
e.getValue(), logs, N, parts, pStart);
if (!parts.isEmpty()) {
String podX = new File(streamFolder,
String.format("rec_%s_pod_%s.%s", r.getId(), N,
EXTENSION_MP4)).getCanonicalPath();
long diff = diff(r.getRecordEnd(),
pStart);
@@ -179,60 +155,11 @@ public class InterviewConverter extends BaseConverter
implements IRecordingConve
double ratio = Math.sqrt(N / Math.sqrt(2));
int w = ratio < 1 ? N : (int)Math.round(ratio);
w = Math.max(w, (int)Math.round(1. * N / w));
- List<String> args = new ArrayList<>();
- if (N == 1) {
- args.add("-i");
- args.add(pods.get(0));
- 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();
- for (int i = 0, j = 0; i < N; ++i) {
- args.add("-i");
- args.add(pods.get(i));
-
cols.append('[').append(i).append(":v]");
- if (i != 0 && (i + 1) % w == 0) {
-
cols.append("hstack=inputs=").append(w);
- if (j == 0 && i == N - 1) {
- cols.append("[v]");
- } else {
-
cols.append("[c").append(j).append("];");
- }
-
rows.append("[c").append(j).append(']');
- j++;
- }
- if (i == N - 1) {
- if (j > 1) {
-
rows.append("vstack=inputs=").append(j).append("[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("-map");
- args.add(String.format("%s:a", N));
- args.add("-qmax"); args.add("1");
- args.add("-qmin"); args.add("1");
r.setWidth(w * width);
r.setHeight((N / w) * height);
- String mp4path = convertToMp4(r, args, logs);
+ String mp4path = convertToMp4(r, getFinalArgs(N, pods,
wav, w), logs);
finalizeRec(r, mp4path, logs);
} catch (Exception err) {
@@ -248,6 +175,89 @@ public class InterviewConverter extends BaseConverter
implements IRecordingConve
}
}
+ private Date processParts(Long roomId, List<RecordingChunk> chunks,
ProcessResultList logs, int N, List<PodPart> parts, Date pStart) throws
IOException {
+ for (RecordingChunk chunk : chunks) {
+ File chunkStream = getRecordingChunk(roomId,
chunk.getStreamName());
+ if (chunkStream.exists()) {
+ String path = chunkStream.getCanonicalPath();
+ /* CHECK FILE:
+ * ffmpeg -i
rec_316_stream_567_2013_08_28_11_51_45.webm -v error -f null file.null
+ */
+ String[] args = new String[]
{getPathToFFMPEG(), "-y"
+ , "-i", path
+ , "-v", "error"
+ , "-f", "null"
+ , "file.null"};
+ ProcessResult res =
ProcessHelper.executeScript(String.format("Check chunk pod video_%s_%s", N,
parts.size()), args, true);
+ logs.add(res);
+ if (!res.isWarn()) {
+ long diff = diff(chunk.isAudioOnly() ?
chunk.getEnd() : chunk.getStart(), pStart);
+ PodPart.add(parts, diff);
+ if (!chunk.isAudioOnly()) {
+ parts.add(new PodPart(path,
diff(chunk.getEnd(), chunk.getStart())));
+ }
+ pStart = chunk.getEnd();
+ }
+ } else {
+ log.debug("Chunk stream doesn't exist: {}",
chunkStream);
+ }
+ }
+ return pStart;
+ }
+
+ private static List<String> getFinalArgs(int N, List<String> pods, File
wav, int w) throws IOException {
+ List<String> args = new ArrayList<>();
+ if (N == 1) {
+ args.add("-i");
+ args.add(pods.get(0));
+ 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();
+ for (int i = 0, j = 0; i < N; ++i) {
+ args.add("-i");
+ args.add(pods.get(i));
+ cols.append('[').append(i).append(":v]");
+ if (i != 0 && (i + 1) % w == 0) {
+ cols.append("hstack=inputs=").append(w);
+ if (j == 0 && i == N - 1) {
+ cols.append("[v]");
+ } else {
+
cols.append("[c").append(j).append("];");
+ }
+ rows.append("[c").append(j).append(']');
+ j++;
+ }
+ if (i == N - 1) {
+ if (j > 1) {
+
rows.append("vstack=inputs=").append(j).append("[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("-map");
+ args.add(String.format("%s:a", N));
+ args.add("-qmax"); args.add("1");
+ args.add("-qmin"); args.add("1");
+ return args;
+ }
+
private static class PodPart {
final String file;
final long duration;
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 917b996..6abbf36 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
@@ -33,8 +33,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import org.apache.directory.api.ldap.model.cursor.CursorException;
@@ -187,41 +189,9 @@ public class LdapLoginManager {
Entry entry = null;
switch (w.options.type) {
case SEARCHANDBIND:
- {
- bindAdmin(w.conn, w.options);
- Dn baseDn = new
Dn(w.options.searchBase);
- String searchQ =
String.format(w.options.searchQuery, login);
-
- try (EntryCursor cursor = new
EntryCursorImpl(w.conn.search(
- new SearchRequestImpl()
- .setBase(baseDn)
-
.setFilter(searchQ)
-
.setScope(w.options.scope)
-
.addAttributes("*")
-
.setDerefAliases(w.options.derefMode))))
- {
- while (cursor.next()) {
- try {
- Entry e =
cursor.get();
- if (userDn !=
null) {
-
log.error("more than 1 user found in LDAP");
- throw
UNKNOWN;
- }
- userDn =
e.getDn();
- if
(w.options.useAdminForAttrs) {
- entry =
e;
- }
- } catch
(CursorLdapReferralException cle) {
-
log.warn("Referral LDAP entry found, ignore it");
- }
- }
- }
- if (userDn == null) {
- log.error("NONE users found in
LDAP");
- throw BAD_CREDENTIALS;
- }
- w.conn.bind(userDn, passwd);
- }
+ 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));
@@ -269,6 +239,45 @@ public class LdapLoginManager {
return u;
}
+ private static Map.Entry<Dn, Entry> searchAndBind(LdapWorker w, String
login, String passwd) throws LdapException, CursorException, OmException,
IOException {
+ Dn userDn = null;
+ Entry entry = null;
+ bindAdmin(w.conn, w.options);
+ Dn baseDn = new Dn(w.options.searchBase);
+ String searchQ = String.format(w.options.searchQuery, login);
+
+ try (EntryCursor cursor = new EntryCursorImpl(w.conn.search(
+ new SearchRequestImpl()
+ .setBase(baseDn)
+ .setFilter(searchQ)
+ .setScope(w.options.scope)
+ .addAttributes("*")
+ .setDerefAliases(w.options.derefMode))))
+ {
+ while (cursor.next()) {
+ try {
+ Entry e = cursor.get();
+ if (userDn != null) {
+ log.error("more than 1 user
found in LDAP");
+ throw UNKNOWN;
+ }
+ userDn = e.getDn();
+ if (w.options.useAdminForAttrs) {
+ entry = e;
+ }
+ } catch (CursorLdapReferralException cle) {
+ log.warn("Referral LDAP entry found,
ignore it");
+ }
+ }
+ }
+ if (userDn == null) {
+ log.error("NONE users found in LDAP");
+ throw BAD_CREDENTIALS;
+ }
+ w.conn.bind(userDn, passwd);
+ return new AbstractMap.SimpleEntry<>(userDn, entry);
+ }
+
public void importUsers(Long domainId, boolean print) throws
OmException {
try (LdapWorker w = new LdapWorker(domainId)) {
bindAdmin(w.conn, w.options);
@@ -282,21 +291,7 @@ public class LdapLoginManager {
.addAttributes("*")
.setDerefAliases(w.options.derefMode))))
{
- while (cursor.next()) {
- try {
- Entry e = cursor.get();
- User u =
userDao.getByLogin(getLogin(w.config, e), Type.ldap, domainId);
- u = w.getUser(e, u);
- if (print) {
- log.info("Going to
import user: {}", u);
- } else {
- userDao.update(u, null);
- log.info("User {}, was
imported", u);
- }
- } catch (CursorLdapReferralException
cle) {
- log.warn("Referral LDAP entry
found, ignore it");
- }
- }
+ importUsers(w, cursor, domainId, print);
}
} catch (LdapAuthenticationException ae) {
log.error("Not authenticated.", ae);
@@ -309,6 +304,24 @@ public class LdapLoginManager {
}
}
+ private void importUsers(LdapWorker w, EntryCursor cursor, Long
domainId, boolean print) throws LdapInvalidAttributeValueException,
LdapException, CursorException, OmException, IOException {
+ while (cursor.next()) {
+ try {
+ Entry e = cursor.get();
+ User u = userDao.getByLogin(getLogin(w.config,
e), Type.ldap, domainId);
+ u = w.getUser(e, u);
+ if (print) {
+ log.info("Going to import user: {}", u);
+ } else {
+ userDao.update(u, null);
+ log.info("User {}, was imported", u);
+ }
+ } catch (CursorLdapReferralException cle) {
+ log.warn("Referral LDAP entry found, ignore
it");
+ }
+ }
+ }
+
private class LdapWorker implements Closeable {
LdapConnection conn = null;
Properties config = new Properties();
@@ -391,24 +404,7 @@ public class LdapLoginManager {
} else if (GroupMode.QUERY == options.groupMode) {
Dn baseDn = new Dn(options.searchBase);
String searchQ =
String.format(options.groupQuery, u.getLogin());
-
- try (EntryCursor cursor = new
EntryCursorImpl(conn.search(
- new SearchRequestImpl()
- .setBase(baseDn)
- .setFilter(searchQ)
-
.setScope(SearchScope.SUBTREE)
- .addAttributes("*")
-
.setDerefAliases(AliasDerefMode.DEREF_ALWAYS))))
- {
- while (cursor.next()) {
- try {
- Entry e = cursor.get();
- groups.add(e.getDn());
- } catch
(CursorLdapReferralException cle) {
- log.warn("Referral LDAP
entry found, ignore it");
- }
- }
- }
+ fillGroups(baseDn, searchQ, groups);
}
for (Dn g : groups) {
String name = g.getRdn().getValue();
@@ -436,6 +432,26 @@ public class LdapLoginManager {
return u;
}
+ private void fillGroups(Dn baseDn, String searchQ, List<Dn>
groups) throws IOException, LdapException, CursorException {
+ try (EntryCursor cursor = new
EntryCursorImpl(conn.search(
+ new SearchRequestImpl()
+ .setBase(baseDn)
+ .setFilter(searchQ)
+ .setScope(SearchScope.SUBTREE)
+ .addAttributes("*")
+
.setDerefAliases(AliasDerefMode.DEREF_ALWAYS))))
+ {
+ while (cursor.next()) {
+ try {
+ Entry e = cursor.get();
+ groups.add(e.getDn());
+ } catch (CursorLdapReferralException
cle) {
+ log.warn("Referral LDAP entry
found, ignore it");
+ }
+ }
+ }
+ }
+
@Override
public void close() throws IOException {
if (conn != null) {
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java
index 1b8e305..e51806e 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java
@@ -30,6 +30,6 @@ public class AudioRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.audio.%s",
(isSelf() ? "request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.audio.%s", isSelf()
? "request" : (hasRight() ? "revoke" : "grant")));
}
}
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java
index aa8e9ee..89b2862 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java
@@ -30,6 +30,6 @@ public class ExclusiveRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.exclusive.%s",
(isSelf() ? "request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.exclusive.%s",
isSelf() ? "request" : (hasRight() ? "revoke" : "grant")));
}
}
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java
index 1fce848..ca57206 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java
@@ -30,6 +30,6 @@ public class ModeratorRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.moderator.%s",
(isSelf() ? "request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.moderator.%s",
isSelf() ? "request" : (hasRight() ? "revoke" : "grant")));
}
}
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/PresenterRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/PresenterRightIcon.java
index ff94793..2b68dac 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/PresenterRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/PresenterRightIcon.java
@@ -32,7 +32,7 @@ public class PresenterRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.presenter.%s",
(isSelf() ? "request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.presenter.%s",
isSelf() ? "request" : (hasRight() ? "revoke" : "grant")));
}
@Override
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java
index 7c4054e..dbbacad 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java
@@ -30,7 +30,7 @@ public class RemoteControlRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.remote.%s",
(isSelf() ? "request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.remote.%s",
isSelf() ? "request" : (hasRight() ? "revoke" : "grant")));
}
@Override
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java
index 1d8c47b..f212ca9 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java
@@ -30,7 +30,7 @@ public class ScreenShareRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.share.%s",
(isSelf() ? "request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.share.%s", isSelf()
? "request" : (hasRight() ? "revoke" : "grant")));
}
@Override
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java
index 2049b51..4fe7049 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java
@@ -30,7 +30,7 @@ public class VideoRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.video.%s",
(isSelf() ? "request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.video.%s", isSelf()
? "request" : (hasRight() ? "revoke" : "grant")));
}
@Override
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java
index f277270..6fc1977 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java
@@ -33,7 +33,7 @@ public class WhiteboardRightIcon extends RoomRightIcon {
@Override
protected String getTitle() {
- return getString(String.format("ulist.right.wb.%s", (isSelf() ?
"request" : (hasRight() ? "revoke" : "grant"))));
+ return getString(String.format("ulist.right.wb.%s", isSelf() ?
"request" : (hasRight() ? "revoke" : "grant")));
}
@Override