You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2021/03/18 06:57:09 UTC
[openmeetings] branch master updated: [OPENMEETINGS-2588] non-beans
are injected, tests are green (#137)
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 9b9af64 [OPENMEETINGS-2588] non-beans are injected, tests are green (#137)
9b9af64 is described below
commit 9b9af64501921186a200779da163b52cb53af0eb
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Mar 18 13:57:03 2021 +0700
[OPENMEETINGS-2588] non-beans are injected, tests are green (#137)
* [OPENMEETINGS-2588] non-beans are injected, mappers are added, tests are green
---
openmeetings-core/pom.xml | 5 +
.../org/apache/openmeetings/core/remote/KRoom.java | 59 ++++----
.../apache/openmeetings/core/remote/KStream.java | 33 +++--
.../openmeetings/core/remote/KTestStream.java | 16 ++-
.../openmeetings/core/remote/KurentoHandler.java | 24 +---
.../openmeetings/core/remote/StreamProcessor.java | 2 +-
.../core/remote/StreamProcessorActions.java | 2 +-
.../core/remote/TestStreamProcessor.java | 2 +-
.../openmeetings/core/remote/BaseMockedTest.java | 50 +++++++
.../openmeetings/db/dao/file/BaseFileItemDao.java | 4 +
.../db/dto/calendar/AppointmentDTO.java | 49 -------
.../db/dto/calendar/MeetingMemberDTO.java | 36 -----
.../openmeetings/db/dto/room/InvitationDTO.java | 55 --------
.../apache/openmeetings/db/dto/room/RoomDTO.java | 44 ++----
.../openmeetings/db/dto/room/RoomFileDTO.java | 24 ----
.../apache/openmeetings/db/dto/user/GroupDTO.java | 8 --
.../apache/openmeetings/db/dto/user/UserDTO.java | 24 ----
.../openmeetings/db/mapper/CalendarMapper.java | 122 ++++++++++++++++
.../apache/openmeetings/db/mapper/RoomMapper.java | 157 +++++++++++++++++++++
.../apache/openmeetings/db/mapper/UserMapper.java | 69 +++++++++
.../webservice/CalendarWebService.java | 6 +-
.../openmeetings/webservice/RoomWebService.java | 10 +-
.../openmeetings/webservice/UserWebService.java | 5 +-
23 files changed, 497 insertions(+), 309 deletions(-)
diff --git a/openmeetings-core/pom.xml b/openmeetings-core/pom.xml
index dfb1100..7b61a40 100644
--- a/openmeetings-core/pom.xml
+++ b/openmeetings-core/pom.xml
@@ -77,6 +77,11 @@
<version>${wicket.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-ioc</artifactId>
+ <version>${wicket.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.directory.api</groupId>
<artifactId>api-all</artifactId>
<version>${api-all.version}</version>
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
index 3de644f..04c9a08 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
@@ -27,10 +27,12 @@ import java.util.Date;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
+import javax.inject.Inject;
+
import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.openmeetings.IApplication;
import org.apache.openmeetings.core.util.WebSocketHelper;
-import org.apache.openmeetings.db.dao.record.RecordingChunkDao;
+import org.apache.openmeetings.db.dao.record.RecordingDao;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.basic.Client.Activity;
import org.apache.openmeetings.db.entity.basic.Client.StreamDesc;
@@ -43,6 +45,7 @@ import org.apache.openmeetings.db.manager.IClientManager;
import org.apache.openmeetings.db.util.FormatHelper;
import org.apache.openmeetings.db.util.ws.RoomMessage;
import org.apache.openmeetings.db.util.ws.TextRoomMessage;
+import org.apache.wicket.injection.Injector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,8 +58,15 @@ import com.github.openjson.JSONObject;
public class KRoom {
private static final Logger log = LoggerFactory.getLogger(KRoom.class);
- private final StreamProcessor processor;
- private final RecordingChunkDao chunkDao;
+ @Inject
+ private KurentoHandler kHandler;
+ @Inject
+ private StreamProcessor processor;
+ @Inject
+ private RecordingDao recDao;
+ @Inject
+ private IClientManager cm;
+
private final Room room;
private final AtomicBoolean recordingStarted = new AtomicBoolean(false);
private final AtomicBoolean sharingStarted = new AtomicBoolean(false);
@@ -65,10 +75,9 @@ public class KRoom {
private JSONObject recordingUser = new JSONObject();
private JSONObject sharingUser = new JSONObject();
- public KRoom(KurentoHandler handler, Room r) {
- this.processor = handler.getStreamProcessor();
- this.chunkDao = handler.getChunkDao();
+ public KRoom(Room r) {
this.room = r;
+ Injector.get().inject(this);
log.info("ROOM {} has been created", room.getId());
}
@@ -80,13 +89,9 @@ public class KRoom {
return recordingId;
}
- public RecordingChunkDao getChunkDao() {
- return chunkDao;
- }
-
- public KStream join(final StreamDesc sd, KurentoHandler kHandler) {
+ public KStream join(final StreamDesc sd) {
log.info("ROOM {}: join client {}, stream: {}", room.getId(), sd.getClient(), sd.getUid());
- final KStream stream = new KStream(sd, this, kHandler);
+ final KStream stream = new KStream(sd, this);
processor.addStream(stream);
return stream;
}
@@ -144,11 +149,11 @@ public class KRoom {
Optional<StreamDesc> osd = c.getScreenStream();
if (osd.isPresent()) {
osd.get().addActivity(Activity.RECORD);
- processor.getClientManager().update(c);
+ cm.update(c);
rec.setWidth(osd.get().getWidth());
rec.setHeight(osd.get().getHeight());
}
- rec = processor.getRecordingDao().update(rec);
+ rec = recDao.update(rec);
// Receive recordingId
recordingId = rec.getId();
processor.getByRoom(room.getId()).forEach(KStream::startRecord);
@@ -163,9 +168,9 @@ public class KRoom {
if (recordingStarted.compareAndSet(true, false)) {
log.debug("##REC:: recording in room {} is stopping {} ::", room.getId(), recordingId);
processor.getByRoom(room.getId()).forEach(KStream::stopRecord);
- Recording rec = processor.getRecordingDao().get(recordingId);
+ Recording rec = recDao.get(recordingId);
rec.setRecordEnd(new Date());
- rec = processor.getRecordingDao().update(rec);
+ rec = recDao.update(rec);
recordingUser = new JSONObject();
recordingId = null;
@@ -178,8 +183,8 @@ public class KRoom {
Optional<StreamDesc> osd = c.getScreenStream();
if (osd.isPresent()) {
osd.get().removeActivity(Activity.RECORD);
- processor.getClientManager().update(c);
- processor.getHandler().sendShareUpdated(osd.get());
+ cm.update(c);
+ kHandler.sendShareUpdated(osd.get());
}
}
// Send notification to all users that the recording has been started
@@ -203,29 +208,28 @@ public class KRoom {
return new JSONObject(sharingUser.toString());
}
- public void startSharing(StreamProcessor processor, IClientManager cm, Client c, Optional<StreamDesc> osd, JSONObject msg, Activity a) {
+ public void startSharing(Client c, Optional<StreamDesc> osd, JSONObject msg, Activity a) {
StreamDesc sd;
- KurentoHandler h = processor.getHandler();
if (sharingStarted.compareAndSet(false, true)) {
sharingUser.put("sid", c.getSid());
sd = c.addStream(StreamType.SCREEN, a);
cm.update(c);
log.debug("Stream.UID {}: sharing has been started, activity: {}", sd.getUid(), a);
- h.sendClient(sd.getSid(), newKurentoMsg()
+ kHandler.sendClient(sd.getSid(), newKurentoMsg()
.put("id", "broadcast")
.put("stream", sd.toJson()
.put("shareType", msg.getString("shareType"))
.put("fps", msg.getString("fps")))
- .put(PARAM_ICE, h.getTurnServers(c)));
+ .put(PARAM_ICE, kHandler.getTurnServers(c)));
} else if (osd.isPresent() && !osd.get().hasActivity(a)) {
sd = osd.get();
sd.addActivity(a);
cm.update(c);
- h.sendShareUpdated(sd);
+ kHandler.sendShareUpdated(sd);
WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.RIGHT_UPDATED, c.getUid()));
WebSocketHelper.sendRoomOthers(room.getId(), c.getUid(), newKurentoMsg()
.put("id", "newStream")
- .put(PARAM_ICE, processor.getHandler().getTurnServers(c))
+ .put(PARAM_ICE, kHandler.getTurnServers(c))
.put("stream", sd.toJson()));
}
}
@@ -245,17 +249,16 @@ public class KRoom {
if (count != sipCount) {
processor.getByRoom(room.getId()).forEach(stream -> stream.addSipProcessor(count));
if (sipCount == 0) {
- processor.getClientManager()
- .streamByRoom(room.getId())
+ cm.streamByRoom(room.getId())
.filter(Client::isSip)
.findAny()
.ifPresent(c -> {
StreamDesc sd = c.addStream(StreamType.WEBCAM, Activity.AUDIO);
sd.setWidth(120).setHeight(90);
c.restoreActivities(sd);
- KStream stream = join(sd, processor.getHandler());
+ KStream stream = join(sd);
stream.startBroadcast(sd, "", () -> {});
- processor.getClientManager().update(c);
+ cm.update(c);
});
}
sipCount = count;
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 56f2a58..f461c6d 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
@@ -43,9 +43,13 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
+import javax.inject.Inject;
+
import org.apache.openmeetings.core.sip.ISipCallbacks;
+import org.apache.openmeetings.core.sip.SipManager;
import org.apache.openmeetings.core.sip.SipStackProcessor;
import org.apache.openmeetings.core.util.WebSocketHelper;
+import org.apache.openmeetings.db.dao.record.RecordingChunkDao;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.basic.Client.Activity;
import org.apache.openmeetings.db.entity.basic.Client.StreamDesc;
@@ -54,6 +58,7 @@ import org.apache.openmeetings.db.entity.record.RecordingChunk.Type;
import org.apache.openmeetings.db.util.ws.RoomMessage;
import org.apache.openmeetings.db.util.ws.TextRoomMessage;
import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.wicket.injection.Injector;
import org.kurento.client.BaseRtpEndpoint;
import org.kurento.client.Continuation;
import org.kurento.client.IceCandidate;
@@ -75,7 +80,15 @@ import com.github.openjson.JSONObject;
public class KStream extends AbstractStream implements ISipCallbacks {
private static final Logger log = LoggerFactory.getLogger(KStream.class);
- private final KurentoHandler kHandler;
+ @Inject
+ private KurentoHandler kHandler;
+ @Inject
+ private StreamProcessor processor;
+ @Inject
+ private RecordingChunkDao chunkDao;
+ @Inject
+ private SipManager sipManager;
+
private final KRoom kRoom;
private final Date connectedSince;
private final StreamType streamType;
@@ -96,12 +109,12 @@ public class KStream extends AbstractStream implements ISipCallbacks {
private boolean hasScreen;
private boolean sipClient;
- public KStream(final StreamDesc sd, KRoom kRoom, KurentoHandler kHandler) {
+ public KStream(final StreamDesc sd, KRoom kRoom) {
super(sd.getSid(), sd.getUid());
this.kRoom = kRoom;
streamType = sd.getType();
this.connectedSince = new Date();
- this.kHandler = kHandler;
+ Injector.get().inject(this);
//TODO Min/MaxVideoSendBandwidth
//TODO Min/Max Audio/Video RecvBandwidth
}
@@ -189,7 +202,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
flowoutFuture = Optional.of(new CompletableFuture<>().completeAsync(() -> {
log.warn("KStream will be dropped {}, sid {}, uid {}", sd, sid, uid);
if (StreamType.SCREEN == streamType) {
- kHandler.getStreamProcessor().doStopSharing(sid, uid);
+ processor.doStopSharing(sid, uid);
}
stopBroadcast();
return null;
@@ -275,7 +288,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
listeners.put(uid, listener);
log.debug("PARTICIPANT {}: obtained endpoint for {}", uid, this.uid);
- Client cur = kHandler.getStreamProcessor().getBySid(this.sid);
+ Client cur = processor.getBySid(this.sid);
if (cur == null) {
log.warn("Client for endpoint dooesn't exists");
} else {
@@ -338,9 +351,9 @@ public class KStream extends AbstractStream implements ISipCallbacks {
recorder = createRecorderEndpoint(pipeline, getRecUri(getRecordingChunk(getRoomId(), chunkUid)), profile);
setTags(recorder, uid);
- recorder.addRecordingListener(evt -> chunkId = kRoom.getChunkDao().start(kRoom.getRecordingId(), type, chunkUid, sid));
+ recorder.addRecordingListener(evt -> chunkId = chunkDao.start(kRoom.getRecordingId(), type, chunkUid, sid));
recorder.addStoppedListener(evt -> {
- kRoom.getChunkDao().stop(chunkId);
+ chunkDao.stop(chunkId);
chunkId = null;
});
switch (profile) {
@@ -459,7 +472,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
private void doRemove(boolean remove) {
if (remove) {
- kHandler.getStreamProcessor().release(this, false);
+ processor.release(this, false);
}
}
@@ -606,7 +619,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
if (count > 0) {
if (sipProcessor.isEmpty()) {
try {
- sipProcessor = kHandler.getSipManager().createSipStackProcessor(
+ sipProcessor = sipManager.createSipStackProcessor(
randomUUID().toString()
, kRoom.getRoom()
, this);
@@ -644,7 +657,7 @@ public class KStream extends AbstractStream implements ISipCallbacks {
answerConsumer.accept(answer);
log.debug(answer);
if (sipClient) {
- StreamDesc sd = kHandler.getStreamProcessor().getBySid(sid).getStream(uid);
+ StreamDesc sd = processor.getBySid(sid).getStream(uid);
try {
outgoingMedia = rtpEndpoint;
internalStartBroadcast(sd, sdp);
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java
index 741c1f6..57111ed 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java
@@ -36,9 +36,12 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+
import org.apache.openmeetings.core.util.WebSocketHelper;
import org.apache.openmeetings.db.entity.basic.IWsClient;
import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.wicket.injection.Injector;
import org.kurento.client.Continuation;
import org.kurento.client.IceCandidate;
import org.kurento.client.MediaPipeline;
@@ -55,7 +58,12 @@ import com.github.openjson.JSONObject;
public class KTestStream extends AbstractStream {
private static final Logger log = LoggerFactory.getLogger(KTestStream.class);
private static final Map<String, String> TAGS = Map.of(TAG_MODE, MODE_TEST, TAG_ROOM, MODE_TEST);
- private final KurentoHandler kHandler;
+
+ @Inject
+ private KurentoHandler kHandler;
+ @Inject
+ private TestStreamProcessor processor;
+
private MediaPipeline pipeline;
private WebRtcEndpoint webRtcEndpoint;
private PlayerEndpoint player;
@@ -65,9 +73,9 @@ public class KTestStream extends AbstractStream {
private ScheduledFuture<?> recHandle;
private int recTime;
- public KTestStream(IWsClient c, JSONObject msg, KurentoHandler kHandler) {
+ public KTestStream(IWsClient c, JSONObject msg) {
super(null, c.getUid());
- this.kHandler = kHandler;
+ Injector.get().inject(this);
createPipeline(() -> startTestRecording(c, msg));
}
@@ -251,7 +259,7 @@ public class KTestStream extends AbstractStream {
releasePlayer();
releaseRecorder();
if (remove) {
- kHandler.getTestProcessor().release(this, true);
+ processor.release(this, true);
}
}
}
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 1e8ebb4..a301dce 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
@@ -41,9 +41,7 @@ import javax.annotation.PreDestroy;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
-import org.apache.openmeetings.core.sip.SipManager;
import org.apache.openmeetings.core.util.WebSocketHelper;
-import org.apache.openmeetings.db.dao.record.RecordingChunkDao;
import org.apache.openmeetings.db.dao.room.RoomDao;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.basic.Client.Activity;
@@ -125,13 +123,9 @@ public class KurentoHandler {
@Autowired
private RoomDao roomDao;
@Autowired
- private RecordingChunkDao chunkDao;
- @Autowired
private TestStreamProcessor testProcessor;
@Autowired
private StreamProcessor streamProcessor;
- @Autowired
- private SipManager sipManager;
boolean isConnected() {
boolean connctd = connected.get() && client != null && !client.isClosed();
@@ -309,7 +303,7 @@ public class KurentoHandler {
return rooms.computeIfAbsent(roomId, k -> {
log.debug("Room {} does not exist. Will create now!", roomId);
Room r = roomDao.get(roomId);
- return new KRoom(this, r);
+ return new KRoom(r);
});
}
@@ -397,22 +391,6 @@ public class KurentoHandler {
return kuid;
}
- public TestStreamProcessor getTestProcessor() {
- return testProcessor;
- }
-
- StreamProcessor getStreamProcessor() {
- return streamProcessor;
- }
-
- SipManager getSipManager() {
- return sipManager;
- }
-
- RecordingChunkDao getChunkDao() {
- return chunkDao;
- }
-
static int getFlowoutTimeout() {
return flowoutTimeout;
}
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 3771c0c..d99edb9 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
@@ -322,7 +322,7 @@ public class StreamProcessor implements IStreamProcessor {
private void startSharing(Client c, Optional<StreamDesc> osd, JSONObject msg, Activity a) {
if (kHandler.isConnected() && c.getRoomId() != null) {
- kHandler.getRoom(c.getRoomId()).startSharing(this, cm, c, osd, msg, a);
+ kHandler.getRoom(c.getRoomId()).startSharing(c, osd, msg, a);
}
}
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessorActions.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessorActions.java
index 8608485..b80a290 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessorActions.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessorActions.java
@@ -107,7 +107,7 @@ public class StreamProcessorActions {
try {
if (sender == null) {
KRoom room = kHandler.getRoom(c.getRoomId());
- sender = room.join(sd, kHandler);
+ sender = room.join(sd);
}
if (msg.has("width")) {
sd.setWidth(msg.getInt("width")).setHeight(msg.getInt("height"));
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java
index 499d772..3bd7bde 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java
@@ -56,7 +56,7 @@ class TestStreamProcessor implements IStreamProcessor {
if (user != null) {
user.release();
}
- user = new KTestStream(c, msg, kHandler);
+ user = new KTestStream(c, msg);
streamByUid.put(c.getUid(), user);
break;
case "iceCandidate":
diff --git a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
index 4d94aa0..86f0211 100644
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
@@ -22,11 +22,18 @@ package org.apache.openmeetings.core.remote;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.withSettings;
+import static org.mockito.internal.util.collections.Sets.newMockSafeHashSet;
+import java.lang.reflect.Field;
import java.util.Locale;
+import java.util.Set;
+
+import javax.inject.Inject;
import org.apache.openmeetings.IApplication;
import org.apache.openmeetings.core.util.WebSocketHelper;
@@ -34,6 +41,7 @@ import org.apache.openmeetings.db.dao.label.LabelDao;
import org.apache.openmeetings.db.entity.basic.IWsClient;
import org.apache.openmeetings.db.entity.label.OmLanguage;
import org.apache.openmeetings.db.util.ApplicationHelper;
+import org.apache.wicket.injection.Injector;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.kurento.client.KurentoClient;
@@ -49,14 +57,18 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Spy;
+import org.mockito.internal.configuration.injection.scanner.MockScanner;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.stubbing.Answer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.github.openjson.JSONObject;
@ExtendWith(MockitoExtension.class)
public class BaseMockedTest {
+ private static final Logger log = LoggerFactory.getLogger(BaseMockedTest.class);
@Mock
protected RomManager romManager;
@Mock
@@ -90,8 +102,12 @@ public class BaseMockedTest {
MockedStatic<WebSocketHelper> wsHelperMock = mockStatic(WebSocketHelper.class);
MockedStatic<LabelDao> labelMock = mockStatic(LabelDao.class);
MockedStatic<ApplicationHelper> appHelpMock = mockStatic(ApplicationHelper.class);
+ MockedStatic<Injector> injectMock = mockStatic(Injector.class)
)
{
+ Set<Object> mocks = newMockSafeHashSet();
+ new MockScanner(this, BaseMockedTest.class).addPreparedMocks(mocks);
+ new MockScanner(this, this.getClass()).addPreparedMocks(mocks);
wsHelperMock.when(() -> WebSocketHelper.sendClient(any(IWsClient.class), any(JSONObject.class))).thenAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
@@ -104,7 +120,41 @@ public class BaseMockedTest {
labelMock.when(() -> LabelDao.getLanguage(any(Long.class))).thenReturn(new OmLanguage(1L, Locale.ENGLISH));
appHelpMock.when(() -> ApplicationHelper.ensureApplication(any(Long.class))).thenReturn(mock(IApplication.class));
+ Injector injector = mock(Injector.class, withSettings().lenient());
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ Object o = invocation.getArgument(0);
+ if (forInjection(o)) {
+ inject(o, mocks);
+ }
+ return null;
+ }
+ }).when(injector).inject(any());
+ injectMock.when(() -> Injector.get()).thenReturn(injector);
task.run();
}
}
+
+ private boolean forInjection(Object o) {
+ return o instanceof KRoom || o instanceof KStream || o instanceof KTestStream;
+ }
+
+ private void inject(Object o, Set<Object> mocks) {
+ for (Field f : o.getClass().getDeclaredFields()) {
+ if (f.isAnnotationPresent(Inject.class)) {
+ mocks.stream()
+ .filter(mock -> f.getType().isAssignableFrom(mock.getClass()))
+ .findAny()
+ .ifPresent(mock -> {
+ try {
+ f.setAccessible(true);
+ f.set(o, mock);
+ } catch (Exception e) {
+ log.error("Fail to set mock {} {}", f, mock);
+ }
+ });
+ }
+ }
+ }
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
index 639433a..e3d9def 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
@@ -62,6 +62,10 @@ public class BaseFileItemDao implements IDataProviderDao<BaseFileItem> {
@Override
public BaseFileItem get(Long id) {
+ return getBase(id);
+ }
+
+ public BaseFileItem getBase(Long id) {
if (id == null || id.longValue() <= 0) {
return null;
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
index 0b70ca4..2a904e0 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
@@ -29,17 +29,11 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.dao.file.BaseFileItemDao;
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.dto.room.RoomDTO;
import org.apache.openmeetings.db.dto.user.UserDTO;
import org.apache.openmeetings.db.entity.calendar.Appointment;
import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
import org.apache.openmeetings.db.entity.calendar.MeetingMember;
-import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.util.TimezoneUtil;
import com.github.openjson.JSONObject;
@@ -100,49 +94,6 @@ public class AppointmentDTO implements Serializable {
reminderEmailSend = a.isReminderEmailSend();
}
- public Appointment get(UserDao userDao, GroupDao groupDao, RoomDao roomDao, BaseFileItemDao fileDao, AppointmentDao appointmentDao, User u) {
- Appointment a = id == null ? new Appointment() : appointmentDao.get(id);
- a.setId(id);
- a.setTitle(title);
- a.setLocation(location);
- a.setStart(start.getTime());
- a.setEnd(end.getTime());
- a.setDescription(description);
- a.setOwner(owner == null ? u : userDao.get(owner.getId()));
- a.setInserted(inserted);
- a.setUpdated(updated);
- a.setDeleted(deleted);
- a.setReminder(reminder);
- a.setRoom(room.get(roomDao, groupDao, fileDao));
- a.setIcalId(icalId);
- List<MeetingMember> mml = new ArrayList<>();
- for(MeetingMemberDTO mm : meetingMembers) {
- MeetingMember m = null;
- if (mm.getId() != null) {
- //if ID is NOT null it should already be in the list
- for (MeetingMember m1 : a.getMeetingMembers()) {
- if (m1.getId().equals(mm.getId())) {
- m = m1;
- break;
- }
- }
- if (m == null) {
- throw new RuntimeException("Weird guest from different appointment is passed");
- }
- } else {
- m = mm.get(userDao, groupDao, u);
- m.setAppointment(a);
- }
- mml.add(m);
- }
- a.setMeetingMembers(mml);
- a.setLanguageId(languageId);
- a.setPasswordProtected(passwordProtected);
- a.setConnectedEvent(connectedEvent);
- a.setReminderEmailSend(reminderEmailSend);
- return a;
- }
-
public Long getId() {
return id;
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
index afaa51c..4fa265d 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
@@ -26,12 +26,8 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.dto.user.UserDTO;
import org.apache.openmeetings.db.entity.calendar.MeetingMember;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.wicket.util.string.Strings;
import com.github.openjson.JSONObject;
@@ -51,38 +47,6 @@ public class MeetingMemberDTO implements Serializable {
this.user = new UserDTO(mm.getUser());
}
- public MeetingMember get(UserDao userDao, GroupDao groupDao, User owner) {
- MeetingMember mm = new MeetingMember();
- mm.setId(id);
- if (user.getId() != null) {
- mm.setUser(userDao.get(user.getId()));
- } else {
- User u = null;
- if (User.Type.EXTERNAL == user.getType()) {
- // try to get ext. user
- u = userDao.getExternalUser(user.getExternalId(), user.getExternalType());
- }
- if (u == null && user.getAddress() != null) {
- u = userDao.getContact(user.getAddress().getEmail()
- , user.getFirstname()
- , user.getLastname()
- , user.getLanguageId()
- , user.getTimeZoneId()
- , owner);
- }
- if (u == null) {
- user.setType(User.Type.CONTACT);
- u = user.get(userDao, groupDao);
- u.getRights().clear();
- }
- if (Strings.isEmpty(u.getTimeZoneId())) {
- u.setTimeZoneId(owner.getTimeZoneId());
- }
- mm.setUser(u);
- }
- return mm;
- }
-
public Long getId() {
return id;
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/InvitationDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/InvitationDTO.java
index 245f020..d974150 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/InvitationDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/InvitationDTO.java
@@ -18,25 +18,13 @@
*/
package org.apache.openmeetings.db.dto.room;
-import static java.util.UUID.randomUUID;
-
import java.io.Serializable;
-import java.text.ParseException;
-import java.util.Date;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.commons.lang3.time.FastDateFormat;
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.room.Invitation;
import org.apache.openmeetings.db.entity.room.Invitation.Valid;
-import org.apache.openmeetings.db.entity.user.User.Type;
-import org.apache.openmeetings.util.crypt.CryptProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.github.openjson.JSONObject;
@@ -44,8 +32,6 @@ import com.github.openjson.JSONObject;
@XmlAccessorType(XmlAccessType.FIELD)
public class InvitationDTO implements Serializable {
private static final long serialVersionUID = 1L;
- private static final Logger log = LoggerFactory.getLogger(InvitationDTO.class);
- private static final FastDateFormat SDF = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
private String email;
private String firstname;
@@ -197,47 +183,6 @@ public class InvitationDTO implements Serializable {
this.languageId = languageId;
}
- public Invitation get(Long userId, UserDao userDao, RoomDao roomDao) {
- Invitation i = new Invitation();
- i.setHash(randomUUID().toString());
- i.setPasswordProtected(passwordProtected);
- if (passwordProtected) {
- i.setPassword(CryptProvider.get().hash(password));
- }
-
- i.setUsed(false);
- i.setValid(valid);
-
- try {
- // valid period of Invitation
- switch (valid) {
- case PERIOD:
- i.setValidFrom(new Date(SDF.parse(validFrom).getTime() - (5 * 60 * 1000)));
- i.setValidTo(SDF.parse(validTo));
- break;
- case ENDLESS:
- case ONE_TIME:
- default:
- break;
- }
- } catch (ParseException e) {
- log.error("Unexpected error while creating invitation", e);
- throw new RuntimeException(e);
- }
-
- i.setDeleted(false);
-
- i.setInvitedBy(userDao.get(userId));
- i.setInvitee(userDao.getContact(email, firstname, lastname, userId));
- if (Type.CONTACT == i.getInvitee().getType()) {
- i.getInvitee().setLanguageId(languageId);
- }
- i.setRoom(roomDao.get(roomId));
- i.setInserted(new Date());
- i.setAppointment(null);
- return i;
- }
-
public static InvitationDTO fromString(String s) {
return get(new JSONObject(s));
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
index 9291f7b..f774f1b 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
@@ -33,12 +33,8 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.openmeetings.db.dao.file.BaseFileItemDao;
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.user.GroupDao;
import org.apache.openmeetings.db.entity.room.Room;
import org.apache.openmeetings.db.entity.room.Room.RoomElement;
-import org.apache.wicket.util.string.Strings;
import com.github.openjson.JSONArray;
import com.github.openjson.JSONObject;
@@ -101,38 +97,6 @@ public class RoomDTO implements Serializable {
files = RoomFileDTO.get(r.getFiles());
}
- public Room get(RoomDao roomDao, GroupDao groupDao, BaseFileItemDao fileDao) {
- Room r = id == null ? new Room() : roomDao.get(id);
- r.setId(id);
- r.setName(name);
- r.setTag(tag);
- r.setComment(comment);
- r.setType(type);
- r.setCapacity(capacity);
- r.setAppointment(appointment);
- r.setConfno(confno);
- r.setIspublic(isPublic);
- r.setDemoRoom(demo);
- r.setClosed(closed);
- r.setDemoTime(demoTime);
- r.setExternalId(externalId);
- if (!Strings.isEmpty(externalType)
- && r.getGroups().stream().filter(gu -> gu.getGroup().isExternal() && gu.getGroup().getName().equals(externalType)).count() == 0)
- {
- r.addGroup(groupDao.getExternal(externalType));
- }
- r.setRedirectURL(redirectUrl);
- r.setModerated(moderated);
- r.setWaitModerator(waitModerator);
- r.setAllowUserQuestions(allowUserQuestions);
- r.setAllowRecording(allowRecording);
- r.setWaitRecording(waitRecording);
- r.setAudioOnly(audioOnly);
- r.setHiddenElements(hiddenElements);
- r.setFiles(RoomFileDTO.get(id, files, fileDao));
- return r;
- }
-
public Long getId() {
return id;
}
@@ -221,6 +185,14 @@ public class RoomDTO implements Serializable {
this.moderated = moderated;
}
+ public boolean isWaitModerator() {
+ return waitModerator;
+ }
+
+ public void setWaitModerator(boolean waitModerator) {
+ this.waitModerator = waitModerator;
+ }
+
public boolean isAllowUserQuestions() {
return allowUserQuestions;
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java
index c6d7de2..053f7f9 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomFileDTO.java
@@ -28,7 +28,6 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.openmeetings.db.dao.file.BaseFileItemDao;
import org.apache.openmeetings.db.entity.room.RoomFile;
import com.github.openjson.JSONObject;
@@ -51,15 +50,6 @@ public class RoomFileDTO implements Serializable {
wbIdx = rf.getWbIdx();
}
- public RoomFile get(BaseFileItemDao fileDao, Long roomId) {
- RoomFile f = new RoomFile();
- f.setId(id);
- f.setRoomId(roomId);
- f.setFile(fileDao.get(fileId));
- f.setWbIdx(wbIdx);
- return f;
- }
-
public Long getId() {
return id;
}
@@ -94,20 +84,6 @@ public class RoomFileDTO implements Serializable {
return r;
}
- public static List<RoomFile> get(Long roomId, List<RoomFileDTO> rfl, BaseFileItemDao fileDao) {
- List<RoomFile> r = new ArrayList<>();
- if (rfl != null) {
- for (RoomFileDTO rf : rfl) {
- RoomFile f = rf.get(fileDao, roomId);
- if (f.getFile() == null) {
- continue;
- }
- r.add(f);
- }
- }
- return r;
- }
-
public static RoomFileDTO get(JSONObject o) {
if (o == null) {
return null;
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/GroupDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/GroupDTO.java
index fbafe14..828d800 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/GroupDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/GroupDTO.java
@@ -24,7 +24,6 @@ import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.openmeetings.db.dao.user.GroupDao;
import org.apache.openmeetings.db.entity.user.Group;
@XmlRootElement
@@ -44,13 +43,6 @@ public class GroupDTO implements Serializable {
tag = g.getTag();
}
- public Group get(GroupDao groupDao) {
- Group g = id == null ? new Group() : groupDao.get(id);
- g.setName(name);
- g.setTag(tag);
- return g;
- }
-
public static List<GroupDTO> list(List<Group> l) {
List<GroupDTO> gList = new ArrayList<>();
if (l != null) {
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
index 3842a62..b4848be 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
@@ -30,13 +30,10 @@ import java.util.Set;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.user.Address;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.entity.user.User.Right;
import org.apache.openmeetings.db.entity.user.User.Type;
-import org.apache.wicket.util.string.Strings;
import com.github.openjson.JSONObject;
@@ -76,27 +73,6 @@ public class UserDTO implements Serializable {
pictureUri = u.getPictureUri();
}
- public User get(UserDao userDao, GroupDao groupDao) {
- User u = id == null ? new User() : userDao.get(id);
- u.setLogin(login);
- u.setFirstname(firstname);
- u.setLastname(lastname);
- u.setRights(rights);
- u.setLanguageId(languageId);
- u.setAddress(address);
- u.setTimeZoneId(timeZoneId);
- if (Type.EXTERNAL == type || (!Strings.isEmpty(externalId) && !Strings.isEmpty(externalType))) {
- type = Type.EXTERNAL;
- if (u.getGroupUsers().stream().filter(gu -> gu.getGroup().isExternal() && gu.getGroup().getName().equals(externalType)).count() == 0) {
- u.addGroup(groupDao.getExternal(externalType));
- }
- u.setExternalId(externalId);
- }
- u.setType(type == null ? Type.USER : type);
- u.setPictureUri(pictureUri);
- return u;
- }
-
public static List<UserDTO> list(List<User> l) {
List<UserDTO> uList = new ArrayList<>();
if (l != null) {
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/CalendarMapper.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/CalendarMapper.java
new file mode 100644
index 0000000..6fd6d68
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/CalendarMapper.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.apache.openmeetings.db.dto.calendar.MeetingMemberDTO;
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.wicket.util.string.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CalendarMapper {
+ @Autowired
+ private UserDao userDao;
+ @Autowired
+ private AppointmentDao appointmentDao;
+ @Autowired
+ private UserMapper uMapper;
+ @Autowired
+ private RoomMapper rMapper;
+
+ public Appointment get(AppointmentDTO dto, User u) {
+ Appointment a = dto.getId() == null ? new Appointment() : appointmentDao.get(dto.getId());
+ a.setId(dto.getId());
+ a.setTitle(dto.getTitle());
+ a.setLocation(dto.getLocation());
+ a.setStart(dto.getStart().getTime());
+ a.setEnd(dto.getEnd().getTime());
+ a.setDescription(dto.getDescription());
+ a.setOwner(dto.getOwner() == null ? u : userDao.get(dto.getOwner().getId()));
+ a.setInserted(dto.getInserted());
+ a.setUpdated(dto.getUpdated());
+ a.setDeleted(dto.isDeleted());
+ a.setReminder(dto.getReminder());
+ a.setRoom(rMapper.get(dto.getRoom()));
+ a.setIcalId(dto.getIcalId());
+ List<MeetingMember> mml = new ArrayList<>();
+ for(MeetingMemberDTO mm : dto.getMeetingMembers()) {
+ MeetingMember m = null;
+ if (mm.getId() != null) {
+ //if ID is NOT null it should already be in the list
+ for (MeetingMember m1 : a.getMeetingMembers()) {
+ if (m1.getId().equals(mm.getId())) {
+ m = m1;
+ break;
+ }
+ }
+ if (m == null) {
+ throw new RuntimeException("Weird guest from different appointment is passed");
+ }
+ } else {
+ m = get(mm, u);
+ m.setAppointment(a);
+ }
+ mml.add(m);
+ }
+ a.setMeetingMembers(mml);
+ a.setLanguageId(dto.getLanguageId());
+ a.setPasswordProtected(dto.isPasswordProtected());
+ a.setConnectedEvent(dto.isConnectedEvent());
+ a.setReminderEmailSend(dto.isReminderEmailSend());
+ return a;
+ }
+
+ public MeetingMember get(MeetingMemberDTO dto, User owner) {
+ MeetingMember mm = new MeetingMember();
+ mm.setId(dto.getId());
+ if (dto.getUser().getId() != null) {
+ mm.setUser(userDao.get(dto.getUser().getId()));
+ } else {
+ User u = null;
+ UserDTO user = dto.getUser();
+ if (User.Type.EXTERNAL == user.getType()) {
+ // try to get ext. user
+ u = userDao.getExternalUser(user.getExternalId(), user.getExternalType());
+ }
+ if (u == null && user.getAddress() != null) {
+ u = userDao.getContact(user.getAddress().getEmail()
+ , user.getFirstname()
+ , user.getLastname()
+ , user.getLanguageId()
+ , user.getTimeZoneId()
+ , owner);
+ }
+ if (u == null) {
+ user.setType(User.Type.CONTACT);
+ u = uMapper.get(user);
+ u.getRights().clear();
+ }
+ if (Strings.isEmpty(u.getTimeZoneId())) {
+ u.setTimeZoneId(owner.getTimeZoneId());
+ }
+ mm.setUser(u);
+ }
+ return mm;
+ }
+}
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
new file mode 100644
index 0000000..250b21d
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/RoomMapper.java
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.mapper;
+
+import static java.util.UUID.randomUUID;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang3.time.FastDateFormat;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.InvitationDTO;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.dto.room.RoomFileDTO;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomFile;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.util.crypt.CryptProvider;
+import org.apache.wicket.util.string.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RoomMapper {
+ private static final Logger log = LoggerFactory.getLogger(RoomMapper.class);
+ private static final FastDateFormat SDF = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
+ @Autowired
+ private RoomDao roomDao;
+ @Autowired
+ private UserDao userDao;
+ @Autowired
+ private GroupDao groupDao;
+ @Autowired
+ private FileItemDao fileDao;
+
+ public Room get(RoomDTO dto) {
+ Room r = dto.getId() == null ? new Room() : roomDao.get(dto.getId());
+ r.setId(dto.getId());
+ r.setName(dto.getName());
+ r.setTag(dto.getTag());
+ r.setComment(dto.getComment());
+ r.setType(dto.getType());
+ r.setCapacity(dto.getCapacity());
+ r.setAppointment(dto.isAppointment());
+ r.setConfno(dto.getConfno());
+ r.setIspublic(dto.isPublic());
+ r.setDemoRoom(dto.isDemo());
+ r.setClosed(dto.isClosed());
+ r.setDemoTime(dto.getDemoTime());
+ r.setExternalId(dto.getExternalId());
+ String externalType = dto.getExternalType();
+ if (!Strings.isEmpty(externalType)
+ && r.getGroups().stream().filter(gu -> gu.getGroup().isExternal() && gu.getGroup().getName().equals(externalType)).count() == 0)
+ {
+ r.addGroup(groupDao.getExternal(externalType));
+ }
+ r.setRedirectURL(dto.getRedirectUrl());
+ r.setModerated(dto.isModerated());
+ r.setWaitModerator(dto.isWaitModerator());
+ r.setAllowUserQuestions(dto.isAllowUserQuestions());
+ r.setAllowRecording(dto.isAllowRecording());
+ r.setWaitRecording(dto.isWaitRecording());
+ r.setAudioOnly(dto.isAudioOnly());
+ r.setHiddenElements(dto.getHiddenElements());
+ r.setFiles(get(dto.getId(), dto.getFiles()));
+ return r;
+ }
+
+ public RoomFile get(RoomFileDTO dto, Long roomId) {
+ RoomFile f = new RoomFile();
+ f.setId(dto.getId());
+ f.setRoomId(roomId);
+ f.setFile(fileDao.getBase(dto.getFileId()));
+ f.setWbIdx(dto.getWbIdx());
+ return f;
+ }
+
+ public List<RoomFile> get(Long roomId, List<RoomFileDTO> rfl) {
+ List<RoomFile> r = new ArrayList<>();
+ if (rfl != null) {
+ for (RoomFileDTO rf : rfl) {
+ RoomFile f = get(rf, roomId);
+ if (f.getFile() == null) {
+ continue;
+ }
+ r.add(f);
+ }
+ }
+ return r;
+ }
+
+
+ public Invitation get(InvitationDTO dto, Long userId) {
+ Invitation i = new Invitation();
+ i.setHash(randomUUID().toString());
+ i.setPasswordProtected(dto.isPasswordProtected());
+ if (dto.isPasswordProtected()) {
+ i.setPassword(CryptProvider.get().hash(dto.getPassword()));
+ }
+
+ i.setUsed(false);
+ i.setValid(dto.getValid());
+
+ try {
+ // valid period of Invitation
+ switch (dto.getValid()) {
+ case PERIOD:
+ i.setValidFrom(new Date(SDF.parse(dto.getValidFrom()).getTime() - (5 * 60 * 1000)));
+ i.setValidTo(SDF.parse(dto.getValidTo()));
+ break;
+ case ENDLESS:
+ case ONE_TIME:
+ default:
+ break;
+ }
+ } catch (ParseException e) {
+ log.error("Unexpected error while creating invitation", e);
+ throw new RuntimeException(e);
+ }
+
+ i.setDeleted(false);
+
+ i.setInvitedBy(userDao.get(userId));
+ i.setInvitee(userDao.getContact(dto.getEmail(), dto.getFirstname(), dto.getLastname(), userId));
+ if (Type.CONTACT == i.getInvitee().getType()) {
+ i.getInvitee().setLanguageId(dto.getLanguageId());
+ }
+ i.setRoom(roomDao.get(dto.getRoomId()));
+ i.setInserted(new Date());
+ i.setAppointment(null);
+ return i;
+ }
+}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/UserMapper.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/UserMapper.java
new file mode 100644
index 0000000..cd5fc13
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/mapper/UserMapper.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.mapper;
+
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.user.GroupDTO;
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.wicket.util.string.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class UserMapper {
+ @Autowired
+ private UserDao userDao;
+ @Autowired
+ private GroupDao groupDao;
+
+ public User get(UserDTO dto) {
+ User u = dto.getId() == null ? new User() : userDao.get(dto.getId());
+ u.setLogin(dto.getLogin());
+ u.setFirstname(dto.getFirstname());
+ u.setLastname(dto.getLastname());
+ u.setRights(dto.getRights());
+ u.setLanguageId(dto.getLanguageId());
+ u.setAddress(dto.getAddress());
+ u.setTimeZoneId(dto.getTimeZoneId());
+ String externalId = dto.getExternalId();
+ String externalType = dto.getExternalType();
+ Type type = dto.getType();
+ if (Type.EXTERNAL == type || (!Strings.isEmpty(externalId) && !Strings.isEmpty(externalType))) {
+ type = Type.EXTERNAL;
+ if (u.getGroupUsers().stream().filter(gu -> gu.getGroup().isExternal() && gu.getGroup().getName().equals(externalType)).count() == 0) {
+ u.addGroup(groupDao.getExternal(externalType));
+ }
+ u.setExternalId(externalId);
+ }
+ u.setType(type == null ? Type.USER : type);
+ u.setPictureUri(dto.getPictureUri());
+ return u;
+ }
+
+ public Group get(GroupDTO dto) {
+ Group g = dto.getId() == null ? new Group() : groupDao.get(dto.getId());
+ g.setName(dto.getName());
+ g.setTag(dto.getTag());
+ return g;
+ }
+}
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
index f62272b..a75a6d8 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
@@ -40,13 +40,13 @@ import javax.ws.rs.core.MediaType;
import org.apache.cxf.feature.Features;
import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.dao.user.GroupDao;
import org.apache.openmeetings.db.dto.basic.ServiceResult;
import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
import org.apache.openmeetings.db.entity.calendar.Appointment;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.mapper.CalendarMapper;
import org.apache.openmeetings.db.util.AuthLevelUtil;
import org.apache.openmeetings.webservice.error.InternalServiceException;
import org.apache.openmeetings.webservice.error.ServiceException;
@@ -72,7 +72,7 @@ public class CalendarWebService extends BaseWebService {
@Autowired
private AppointmentDao dao;
@Autowired
- private GroupDao groupDao;
+ private CalendarMapper calMapper;
/**
* Load appointments by a start / end range for the current SID
@@ -247,7 +247,7 @@ public class CalendarWebService extends BaseWebService {
|| appointment.getOwner().getId().equals(u.getId());
}, sd -> {
User u = userDao.get(sd.getUserId());
- Appointment a = appointment.get(userDao, groupDao, roomDao, fileDao, dao, u);
+ Appointment a = calMapper.get(appointment, u);
if (a.getRoom().getId() != null) {
if (a.getRoom().isAppointment()) {
a.getRoom().setIspublic(false);
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
index 5cb0ed2..414507c 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
@@ -40,7 +40,6 @@ import javax.ws.rs.core.MediaType;
import org.apache.cxf.feature.Features;
import org.apache.openmeetings.core.util.WebSocketHelper;
import org.apache.openmeetings.db.dao.room.InvitationDao;
-import org.apache.openmeetings.db.dao.user.GroupDao;
import org.apache.openmeetings.db.dao.user.IUserManager;
import org.apache.openmeetings.db.dto.basic.ServiceResult;
import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
@@ -54,6 +53,7 @@ import org.apache.openmeetings.db.entity.room.RoomFile;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.manager.IClientManager;
import org.apache.openmeetings.db.manager.IWhiteboardManager;
+import org.apache.openmeetings.db.mapper.RoomMapper;
import org.apache.openmeetings.db.util.ws.RoomMessage;
import org.apache.openmeetings.service.room.InvitationManager;
import org.apache.openmeetings.webservice.error.InternalServiceException;
@@ -89,7 +89,7 @@ public class RoomWebService extends BaseWebService {
@Autowired
private InvitationManager inviteManager;
@Autowired
- private GroupDao groupDao;
+ private RoomMapper rMapper;
/**
* Returns an Object of Type RoomsList which contains a list of
@@ -190,7 +190,7 @@ public class RoomWebService extends BaseWebService {
} else {
room.setExternalType(externalType);
room.setExternalId(externalId);
- r = room.get(roomDao, groupDao, fileDao);
+ r = rMapper.get(room);
r = updateRtoRoom(r, sd.getUserId());
return new RoomDTO(r);
}
@@ -219,7 +219,7 @@ public class RoomWebService extends BaseWebService {
) throws ServiceException
{
return performCall(sid, User.Right.SOAP, sd -> {
- Room r = room.get(roomDao, groupDao, fileDao);
+ Room r = rMapper.get(room);
r = updateRtoRoom(r, sd.getUserId());
return new RoomDTO(r);
});
@@ -430,7 +430,7 @@ public class RoomWebService extends BaseWebService {
{
log.debug("[hash] invite {}", invite);
return performCall(sid, User.Right.SOAP, sd -> {
- Invitation i = invite.get(sd.getUserId(), userDao, roomDao);
+ Invitation i = rMapper.get(invite, sd.getUserId());
i = inviteDao.update(i);
if (i != null) {
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 5d863ec..708882c 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
@@ -58,6 +58,7 @@ import org.apache.openmeetings.db.entity.server.Sessiondata;
import org.apache.openmeetings.db.entity.user.Address;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.mapper.UserMapper;
import org.apache.openmeetings.util.OmException;
import org.apache.openmeetings.webservice.error.InternalServiceException;
import org.apache.openmeetings.webservice.error.ServiceException;
@@ -93,6 +94,8 @@ public class UserWebService extends BaseWebService {
private SOAPLoginDao soapDao;
@Autowired
private GroupDao groupDao;
+ @Autowired
+ private UserMapper uMapper;
/**
* @param user - login or email of Openmeetings user with admin or SOAP-rights
@@ -182,7 +185,7 @@ public class UserWebService extends BaseWebService {
if (user.getLanguageId() == null) {
user.setLanguageId(1L);
}
- User jsonUser = user.get(userDao, groupDao);
+ User jsonUser = uMapper.get(user);
IValidator<String> passValidator = new StrongPasswordValidator(false, jsonUser);
Validatable<String> passVal = new Validatable<>(user.getPassword());
passValidator.validate(passVal);