This is an automated email from the ASF dual-hosted git repository. solomax pushed a commit to branch spring-configurable in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/spring-configurable by this push: new 9ae3165 Another bunch of classes is covered 9ae3165 is described below commit 9ae31653424afc196e9eb3e6cabfb6ef4d39e760 Author: Maxim Solodovnik <solomax...@gmail.com> AuthorDate: Tue Mar 9 10:18:46 2021 +0700 Another bunch of classes is covered --- .../org/apache/openmeetings/core/remote/KRoom.java | 53 ++++++++++++---------- .../apache/openmeetings/core/remote/KStream.java | 7 ++- .../openmeetings/core/remote/KTestStream.java | 16 +++++-- .../openmeetings/core/remote/KurentoHandler.java | 17 +------ .../openmeetings/core/remote/StreamProcessor.java | 17 +------ .../core/remote/TestStreamProcessor.java | 2 +- .../apache/openmeetings/core/sip/SipManager.java | 2 +- .../openmeetings/core/sip/SipStackProcessor.java | 11 +++-- .../util/crypt/SCryptImplementation.java | 2 +- pom.xml | 14 +++++- 10 files changed, 71 insertions(+), 70 deletions(-) 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 99cedfd..a5e5b75 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 @@ -30,7 +30,7 @@ import java.util.concurrent.atomic.AtomicBoolean; 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; @@ -45,6 +45,9 @@ import org.apache.openmeetings.db.util.ws.RoomMessage; import org.apache.openmeetings.db.util.ws.TextRoomMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowire; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; import com.github.openjson.JSONObject; @@ -52,11 +55,19 @@ import com.github.openjson.JSONObject; * Dynamically created object representing a conference room on the MediaServer * */ +@Configurable(autowire = Autowire.BY_TYPE) public class KRoom { private static final Logger log = LoggerFactory.getLogger(KRoom.class); - private final StreamProcessor processor; - private final RecordingChunkDao chunkDao; + @Autowired + private KurentoHandler kHandler; + @Autowired + private StreamProcessor processor; + @Autowired + private RecordingDao recDao; + @Autowired + private IClientManager cm; + private final Room room; private final AtomicBoolean recordingStarted = new AtomicBoolean(false); private final AtomicBoolean sharingStarted = new AtomicBoolean(false); @@ -65,9 +76,7 @@ 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; log.info("ROOM {} has been created", room.getId()); } @@ -80,10 +89,6 @@ public class KRoom { return recordingId; } - public RecordingChunkDao getChunkDao() { - return chunkDao; - } - 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); @@ -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,8 +249,7 @@ 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 -> { @@ -255,7 +258,7 @@ public class KRoom { c.restoreActivities(sd); 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 4fa6c80..0028a79 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 @@ -47,6 +47,7 @@ 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; @@ -85,6 +86,8 @@ public class KStream extends AbstractStream implements ISipCallbacks { @Autowired private StreamProcessor processor; @Autowired + private RecordingChunkDao chunkDao; + @Autowired private SipManager sipManager; private final KRoom kRoom; @@ -348,8 +351,8 @@ 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.addStoppedListener(evt -> kRoom.getChunkDao().stop(chunkId)); + recorder.addRecordingListener(evt -> chunkId = chunkDao.start(kRoom.getRecordingId(), type, chunkUid, sid)); + recorder.addStoppedListener(evt -> chunkDao.stop(chunkId)); switch (profile) { case WEBM: outgoingMedia.connect(recorder, MediaType.AUDIO); 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..b511b93 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 @@ -49,13 +49,22 @@ import org.kurento.client.RecorderEndpoint; import org.kurento.client.WebRtcEndpoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowire; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; import com.github.openjson.JSONObject; +@Configurable(autowire = Autowire.BY_TYPE) 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; + + @Autowired + private KurentoHandler kHandler; + @Autowired + private TestStreamProcessor processor; + private MediaPipeline pipeline; private WebRtcEndpoint webRtcEndpoint; private PlayerEndpoint player; @@ -65,9 +74,8 @@ 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; 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 1a24bc9..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 @@ -42,7 +42,6 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; 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; @@ -124,8 +123,6 @@ public class KurentoHandler { @Autowired private RoomDao roomDao; @Autowired - private RecordingChunkDao chunkDao; - @Autowired private TestStreamProcessor testProcessor; @Autowired private StreamProcessor streamProcessor; @@ -306,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); }); } @@ -394,18 +391,6 @@ public class KurentoHandler { return kuid; } - public TestStreamProcessor getTestProcessor() { - return testProcessor; - } - - StreamProcessor getStreamProcessor() { - return streamProcessor; - } - - 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..f6330d8 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 @@ -37,7 +37,6 @@ import org.apache.openmeetings.core.converter.IRecordingConverter; import org.apache.openmeetings.core.converter.InterviewConverter; import org.apache.openmeetings.core.converter.RecordingConverter; import org.apache.openmeetings.core.util.WebSocketHelper; -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; @@ -70,8 +69,6 @@ public class StreamProcessor implements IStreamProcessor { @Autowired private IClientManager cm; @Autowired - private RecordingDao recDao; - @Autowired private KurentoHandler kHandler; @Autowired private TaskExecutor taskExecutor; @@ -322,7 +319,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); } } @@ -486,18 +483,6 @@ public class StreamProcessor implements IStreamProcessor { return uid == null ? null : streamByUid.get(uid); } - KurentoHandler getHandler() { - return kHandler; - } - - IClientManager getClientManager() { - return cm; - } - - RecordingDao getRecordingDao() { - return recDao; - } - @Override public void release(AbstractStream stream, boolean releaseStream) { final String uid = stream.getUid(); 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/main/java/org/apache/openmeetings/core/sip/SipManager.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipManager.java index 5d23437..bb4c881 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipManager.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipManager.java @@ -299,7 +299,7 @@ public class SipManager implements ISipManager { ports.flip(free); port = minLocalWsPort + free; } - return Optional.of(new SipStackProcessor(this, name, port, callbacks)); + return Optional.of(new SipStackProcessor(name, port, callbacks)); } void freePort(int port) { diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java index dc22235..e8b82fe 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/sip/SipStackProcessor.java @@ -59,6 +59,9 @@ import javax.sip.message.Response; import org.apache.openmeetings.db.entity.room.Room; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowire; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; import gov.nist.javax.sip.DialogTimeoutEvent; import gov.nist.javax.sip.SipListenerExt; @@ -69,6 +72,7 @@ import gov.nist.javax.sip.clientauthutils.AuthenticationHelper; import gov.nist.javax.sip.clientauthutils.UserCredentials; import gov.nist.javax.sip.stack.NioMessageProcessorFactory; +@Configurable(autowire = Autowire.BY_TYPE, preConstruction = true) public class SipStackProcessor implements SipListenerExt { private static final Logger log = LoggerFactory.getLogger(SipStackProcessor.class); private static final String SIP_TRANSPORT = "ws"; @@ -76,7 +80,9 @@ public class SipStackProcessor implements SipListenerExt { return t -> {}; } - private final SipManager manager; + @Autowired + private SipManager manager; + private final ISipCallbacks callbacks; private final String sipHost; private final int wsPort; @@ -96,8 +102,7 @@ public class SipStackProcessor implements SipListenerExt { private final Random rnd = new Random(); private Dialog dialog; - SipStackProcessor(SipManager manager, String name, int localWsPort, ISipCallbacks callbacks) throws Exception { - this.manager = manager; + SipStackProcessor(String name, int localWsPort, ISipCallbacks callbacks) throws Exception { this.callbacks = callbacks; this.sipHost = manager.getSipHostname(); this.wsPort = manager.getWsPort(); diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/crypt/SCryptImplementation.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/crypt/SCryptImplementation.java index 560d824..1a07506 100644 --- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/crypt/SCryptImplementation.java +++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/crypt/SCryptImplementation.java @@ -60,7 +60,7 @@ public class SCryptImplementation implements ICrypt { props.load(is); cost = Integer.valueOf(props.getProperty("scrypt.cost", "" + cost)); } catch (Exception e) { - log.error("Failed to initialize the cost", e); + log.error("Failed to load custom crypt cost: {}", e.getMessage()); } } diff --git a/pom.xml b/pom.xml index 457b0b2..8f0e4ce 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,7 @@ <forbiddenapis.version>3.1</forbiddenapis.version> <maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version> <frontend-maven-plugin.version>1.11.0</frontend-maven-plugin.version> + <aspectj-maven-plugin.version>1.12.6</aspectj-maven-plugin.version> <!-- dependency versions --> <junit.version>5.7.1</junit.version> <wicket.version>9.2.0</wicket.version> @@ -125,6 +126,7 @@ <jain-sip.version>1.2.307</jain-sip.version><!-- other versions are broken! --> <jasny-bootstrap.version>3.1.3-2</jasny-bootstrap.version> <jodconverter.version>4.4.2</jodconverter.version> + <aspectj.version>1.9.6</aspectj.version> <!-- Exclude all generated code --> <sonar.exclusions>file:**/generated-sources/**, file:**/jquery-ui.css, file:**/cssemoticons.js, file:**/bootstrap-confirmation.js</sonar.exclusions> <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> @@ -696,6 +698,11 @@ <version>${jain-sip.version}</version> </dependency> <dependency> + <groupId>org.aspectj</groupId> + <artifactId>aspectjrt</artifactId> + <version>${aspectj.version}</version> + </dependency> + <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>${mockito.version}</version> @@ -752,6 +759,10 @@ <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> + <dependency> + <groupId>org.aspectj</groupId> + <artifactId>aspectjrt</artifactId> + </dependency> </dependencies> <build> <plugins> @@ -1178,7 +1189,7 @@ <plugin> <groupId>com.nickwongdev</groupId> <artifactId>aspectj-maven-plugin</artifactId> - <version>1.12.6</version> + <version>${aspectj-maven-plugin.version}</version> <configuration> <complianceLevel>${jdk.version}</complianceLevel> <Xlint>ignore</Xlint> @@ -1193,6 +1204,7 @@ <execution> <goals> <goal>compile</goal> + <goal>test-compile</goal> </goals> </execution> </executions>