use of org.olat.core.commons.services.notifications.SubscriptionContext in project openolat by klemens.
the class UsersSubscriptionManagerImpl method subscribe.
/**
* Subscribe to notifications of new identity created
*/
public void subscribe(Identity identity) {
PublisherData data = getNewUsersPublisherData();
SubscriptionContext context = getNewUsersSubscriptionContext();
NotificationsManager.getInstance().subscribe(identity, context, data);
}
use of org.olat.core.commons.services.notifications.SubscriptionContext in project openolat by klemens.
the class UsersSubscriptionManagerImpl method unsubscribe.
/**
* Unsubscribe to notifications of new identity created
*/
public void unsubscribe(Identity identity) {
SubscriptionContext context = getNewUsersSubscriptionContext();
NotificationsManager.getInstance().unsubscribe(identity, context);
}
use of org.olat.core.commons.services.notifications.SubscriptionContext in project openolat by klemens.
the class InfoMessageFrontendManagerTest method removeInfoMessagesAndSubscriptionContext.
@Test
public void removeInfoMessagesAndSubscriptionContext() {
Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("info-1");
Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("info-2");
RepositoryEntry resource = JunitTestHelper.createAndPersistRepositoryEntry();
BusinessGroup businessGroup = groupService.createBusinessGroup(null, "gdao1", "gdao1-desc", -1, -1, false, false, resource);
final OLATResourceable ores = new OLATResourceable() {
@Override
public String getResourceableTypeName() {
return businessGroup.getResourceableTypeName();
}
@Override
public Long getResourceableId() {
return businessGroup.getResourceableId();
}
};
// create, save
InfoMessage msg1 = infoManager.createInfoMessage(ores, InfoMessageFrontendManager.businessGroupResSubPath, null, id2);
msg1.setTitle("title-1");
msg1.setMessage("message-1");
assertNotNull(msg1);
infoManager.saveInfoMessage(msg1);
// create, save
InfoMessage msg2 = infoManager.createInfoMessage(ores, InfoMessageFrontendManager.businessGroupResSubPath, null, id1);
msg2.setTitle("title-2");
msg2.setMessage("message-2");
assertNotNull(msg2);
infoManager.saveInfoMessage(msg2);
// create, save
InfoMessage msg3 = infoManager.createInfoMessage(ores, InfoMessageFrontendManager.businessGroupResSubPath, null, id1);
msg3.setTitle("title-3");
msg3.setMessage("message-3");
assertNotNull(msg3);
infoManager.saveInfoMessage(msg3);
dbInstance.commitAndCloseSession();
SubscriptionContext sc = new SubscriptionContext(businessGroup.getResourceableTypeName(), businessGroup.getResourceableId(), InfoMessageFrontendManager.businessGroupResSubPath);
PublisherData pd = new PublisherData("InfoMessage", "e.g. infoMessage=anyMessage", null);
// subscribe
notificationManager.subscribe(id1, sc, pd);
notificationManager.subscribe(id2, sc, pd);
dbInstance.closeSession();
// check if publisher was created
Publisher p = notificationManager.getPublisher(sc);
assertNotNull(p);
// check before message deletion
List<InfoMessage> loadedMessages1 = infoManager.loadInfoMessageByResource(ores, InfoMessageFrontendManager.businessGroupResSubPath, null, null, null, 0, 0);
Assert.assertEquals(3, loadedMessages1.size());
Assert.assertTrue(loadedMessages1.contains(msg1));
Assert.assertTrue(loadedMessages1.contains(msg2));
Assert.assertTrue(loadedMessages1.contains(msg3));
// delete
infoManager.removeInfoMessagesAndSubscriptionContext(businessGroup);
dbInstance.commitAndCloseSession();
// check if messages are deleted
List<InfoMessage> loadedMessages2 = infoManager.loadInfoMessageByResource(ores, InfoMessageFrontendManager.businessGroupResSubPath, null, null, null, 0, 0);
Assert.assertEquals(0, loadedMessages2.size());
Assert.assertFalse(loadedMessages2.contains(msg1));
Assert.assertFalse(loadedMessages2.contains(msg2));
Assert.assertFalse(loadedMessages2.contains(msg3));
// check if pubisher is deleted
Publisher p2 = notificationManager.getPublisher(sc);
assertNull("publisher marked deleted should not be found", p2);
}
use of org.olat.core.commons.services.notifications.SubscriptionContext in project openolat by klemens.
the class LearningGroupWebService method getFolder.
@Path("{groupKey}/folder")
public VFSWebservice getFolder(@PathParam("groupKey") Long groupKey, @Context HttpServletRequest request) {
BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
BusinessGroup bg = bgs.loadBusinessGroup(groupKey);
if (bg == null) {
return null;
}
if (!isGroupManager(request)) {
Identity identity = RestSecurityHelper.getIdentity(request);
if (!bgs.isIdentityInBusinessGroup(identity, bg)) {
return null;
}
}
CollaborationTools collabTools = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(bg);
if (!collabTools.isToolEnabled(CollaborationTools.TOOL_FOLDER)) {
return null;
}
String relPath = collabTools.getFolderRelPath();
QuotaManager qm = QuotaManager.getInstance();
Quota folderQuota = qm.getCustomQuota(relPath);
if (folderQuota == null) {
Quota defQuota = qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_GROUPS);
folderQuota = QuotaManager.getInstance().createQuota(relPath, defQuota.getQuotaKB(), defQuota.getUlLimitKB());
}
SubscriptionContext subsContext = null;
VFSSecurityCallback secCallback = new VFSWebServiceSecurityCallback(true, true, true, folderQuota, subsContext);
OlatRootFolderImpl rootContainer = new OlatRootFolderImpl(relPath, null);
rootContainer.setLocalSecurityCallback(secCallback);
return new VFSWebservice(rootContainer);
}
use of org.olat.core.commons.services.notifications.SubscriptionContext in project openolat by klemens.
the class NotificationsManagerTest method testConcurrentFindOrCreatePublisher.
/**
* Test synchronized 'findOrCreatePublisher' triggered by method 'subscribe'.
* Start 10 threads which call 'subscribe' with same SubscriptionContext.
*/
@Test
public void testConcurrentFindOrCreatePublisher() {
final int NUM_OF_THREADS = 10;
PublisherData pd = new PublisherData("Forum", "e.g. forumdata=keyofforum", null);
SubscriptionContext sc = new SubscriptionContext("Course", new Long(1238778565), UUID.randomUUID().toString().replace("-", ""));
final CountDownLatch finishCount = new CountDownLatch(NUM_OF_THREADS);
List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>(1));
List<Boolean> statusList = Collections.synchronizedList(new ArrayList<Boolean>(1));
List<SubscribeThread> threads = new ArrayList<SubscribeThread>();
for (int i = 0; i < NUM_OF_THREADS; i++) {
Identity id = JunitTestHelper.createAndPersistIdentityAsUser("fci-" + i + "-" + UUID.randomUUID().toString());
SubscribeThread thread = new SubscribeThread(sc, pd, id, exceptionHolder, statusList, finishCount);
threads.add(thread);
}
for (SubscribeThread thread : threads) {
thread.start();
}
// sleep until threads should have terminated/excepted
try {
finishCount.await(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
log.error("", e);
Assert.fail();
}
assertTrue("It throws an exception in test", exceptionHolder.isEmpty());
assertEquals("Thread(s) did not finish", NUM_OF_THREADS, statusList.size());
for (SubscribeThread thread : threads) {
assertTrue("Subscriber does not exists", NotificationsManager.getInstance().isSubscribed(thread.getIdentity(), sc));
}
}
Aggregations