Search in sources :

Example 1 with EventList

use of edu.stanford.bmir.protege.web.shared.event.EventList in project webprotege by protegeproject.

the class EventManager method getEventsFromTag.

/**
 * Gets the live events posted to this manager which have a tag greater or equal to the specified tag.  Events are coalesced
 * where possible.  That is, if event E1 is posted at time t1 and event E2 is posted at time t2 and E1 and E2 are
 * equal then a list containing only E2 will be returned.
 * @param fromTag The tag that denotes the point after which events will be retrieved.  Not {@code null}.
 * @return The list of live events that happened since the specified tag.  Not {@code null}.
 * @throws NullPointerException if {@code tag} is {@code null}.
 */
public EventList<E> getEventsFromTag(EventTag fromTag) {
    checkNotNull(fromTag, "tag must not be null");
    List<E> resultList = new ArrayList<>();
    final EventTag curTag;
    try {
        readLock.lock();
        curTag = currentTag;
        for (EventBucket bucket : eventQueue) {
            if (bucket.getTag().isGreaterOrEqualTo(fromTag)) {
                resultList.addAll(bucket.getEvents());
            }
        }
    } finally {
        readLock.unlock();
    }
    final EventTag toTag = curTag.next();
    if (resultList.isEmpty()) {
        return new EventList<>(fromTag, toTag);
    }
    // Prune duplicates
    LinkedHashSet<E> events = new LinkedHashSet<>(resultList);
    return new EventList<>(fromTag, events, toTag);
}
Also used : EventList(edu.stanford.bmir.protege.web.shared.event.EventList) EventTag(edu.stanford.bmir.protege.web.shared.event.EventTag)

Example 2 with EventList

use of edu.stanford.bmir.protege.web.shared.event.EventList in project webprotege by protegeproject.

the class SetDiscussionThreadStatusHandler method execute.

@Nonnull
@Override
public SetDiscussionThreadStatusResult execute(@Nonnull SetDiscussionThreadStatusAction action, @Nonnull ExecutionContext executionContext) {
    EventTag fromTag = eventManager.getCurrentTag();
    ThreadId threadId = action.getThreadId();
    Status status = action.getStatus();
    Optional<EntityDiscussionThread> thread = repository.setThreadStatus(threadId, status);
    int openComments = thread.map(t -> repository.getOpenCommentsCount(projectId, t.getEntity())).orElse(-1);
    eventManager.postEvent(new DiscussionThreadStatusChangedEvent(projectId, threadId, thread.map(EntityDiscussionThread::getEntity), openComments, status));
    EventList<ProjectEvent<?>> eventList = eventManager.getEventsFromTag(fromTag);
    return new SetDiscussionThreadStatusResult(threadId, status, eventList);
}
Also used : edu.stanford.bmir.protege.web.shared.issues(edu.stanford.bmir.protege.web.shared.issues) ProjectEvent(edu.stanford.bmir.protege.web.shared.event.ProjectEvent) BuiltInAction(edu.stanford.bmir.protege.web.shared.access.BuiltInAction) EventList(edu.stanford.bmir.protege.web.shared.event.EventList) EventManager(edu.stanford.bmir.protege.web.server.events.EventManager) Inject(javax.inject.Inject) AbstractProjectActionHandler(edu.stanford.bmir.protege.web.server.dispatch.AbstractProjectActionHandler) AccessManager(edu.stanford.bmir.protege.web.server.access.AccessManager) SET_OBJECT_COMMENT_STATUS(edu.stanford.bmir.protege.web.shared.access.BuiltInAction.SET_OBJECT_COMMENT_STATUS) ExecutionContext(edu.stanford.bmir.protege.web.server.dispatch.ExecutionContext) EventTag(edu.stanford.bmir.protege.web.shared.event.EventTag) Optional(java.util.Optional) ProjectId(edu.stanford.bmir.protege.web.shared.project.ProjectId) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) EventTag(edu.stanford.bmir.protege.web.shared.event.EventTag) ProjectEvent(edu.stanford.bmir.protege.web.shared.event.ProjectEvent) Nonnull(javax.annotation.Nonnull)

Example 3 with EventList

use of edu.stanford.bmir.protege.web.shared.event.EventList in project webprotege by protegeproject.

the class EditCommentActionHandler method execute.

@Nonnull
@Override
public EditCommentResult execute(@Nonnull EditCommentAction action, @Nonnull ExecutionContext executionContext) {
    EventTag fromTag = eventManager.getCurrentTag();
    Optional<EntityDiscussionThread> thread = repository.getThread(action.getThreadId());
    if (!thread.isPresent()) {
        throw new RuntimeException("Invalid comment thread");
    }
    EntityDiscussionThread t = thread.get();
    String renderedComment = new CommentRenderer().renderComment(action.getBody());
    Optional<Comment> updatedComment = t.getComments().stream().filter(c -> c.getId().equals(action.getCommentId())).limit(1).map(c -> new Comment(c.getId(), c.getCreatedBy(), c.getCreatedAt(), Optional.of(System.currentTimeMillis()), action.getBody(), renderedComment)).peek(c -> repository.updateComment(t.getId(), c)).findFirst();
    updatedComment.ifPresent(comment -> eventManager.postEvent(new CommentUpdatedEvent(projectId, t.getId(), comment)));
    EventList<ProjectEvent<?>> eventList = eventManager.getEventsFromTag(fromTag);
    return new EditCommentResult(updatedComment, eventList);
}
Also used : edu.stanford.bmir.protege.web.shared.issues(edu.stanford.bmir.protege.web.shared.issues) ProjectEvent(edu.stanford.bmir.protege.web.shared.event.ProjectEvent) EDIT_OWN_OBJECT_COMMENT(edu.stanford.bmir.protege.web.shared.access.BuiltInAction.EDIT_OWN_OBJECT_COMMENT) BuiltInAction(edu.stanford.bmir.protege.web.shared.access.BuiltInAction) EventList(edu.stanford.bmir.protege.web.shared.event.EventList) EventManager(edu.stanford.bmir.protege.web.server.events.EventManager) Inject(javax.inject.Inject) AbstractProjectActionHandler(edu.stanford.bmir.protege.web.server.dispatch.AbstractProjectActionHandler) AccessManager(edu.stanford.bmir.protege.web.server.access.AccessManager) ExecutionContext(edu.stanford.bmir.protege.web.server.dispatch.ExecutionContext) EventTag(edu.stanford.bmir.protege.web.shared.event.EventTag) Optional(java.util.Optional) ProjectId(edu.stanford.bmir.protege.web.shared.project.ProjectId) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) EventTag(edu.stanford.bmir.protege.web.shared.event.EventTag) ProjectEvent(edu.stanford.bmir.protege.web.shared.event.ProjectEvent) Nonnull(javax.annotation.Nonnull)

Aggregations

EventList (edu.stanford.bmir.protege.web.shared.event.EventList)3 EventTag (edu.stanford.bmir.protege.web.shared.event.EventTag)3 AccessManager (edu.stanford.bmir.protege.web.server.access.AccessManager)2 AbstractProjectActionHandler (edu.stanford.bmir.protege.web.server.dispatch.AbstractProjectActionHandler)2 ExecutionContext (edu.stanford.bmir.protege.web.server.dispatch.ExecutionContext)2 EventManager (edu.stanford.bmir.protege.web.server.events.EventManager)2 BuiltInAction (edu.stanford.bmir.protege.web.shared.access.BuiltInAction)2 ProjectEvent (edu.stanford.bmir.protege.web.shared.event.ProjectEvent)2 edu.stanford.bmir.protege.web.shared.issues (edu.stanford.bmir.protege.web.shared.issues)2 ProjectId (edu.stanford.bmir.protege.web.shared.project.ProjectId)2 Optional (java.util.Optional)2 Nonnull (javax.annotation.Nonnull)2 Nullable (javax.annotation.Nullable)2 Inject (javax.inject.Inject)2 EDIT_OWN_OBJECT_COMMENT (edu.stanford.bmir.protege.web.shared.access.BuiltInAction.EDIT_OWN_OBJECT_COMMENT)1 SET_OBJECT_COMMENT_STATUS (edu.stanford.bmir.protege.web.shared.access.BuiltInAction.SET_OBJECT_COMMENT_STATUS)1