84 lines
3.9 KiB
Java
84 lines
3.9 KiB
Java
package eu.eudat.integrationevent.outbox.annotationentitytouch;
|
|
|
|
import eu.eudat.commons.enums.IsActive;
|
|
import eu.eudat.data.DescriptionEntity;
|
|
import eu.eudat.data.DmpUserEntity;
|
|
import eu.eudat.integrationevent.outbox.OutboxIntegrationEvent;
|
|
import eu.eudat.integrationevent.outbox.OutboxService;
|
|
import eu.eudat.model.Description;
|
|
import eu.eudat.model.DmpUser;
|
|
import eu.eudat.query.DescriptionQuery;
|
|
import eu.eudat.query.DmpUserQuery;
|
|
import gr.cite.tools.data.query.QueryFactory;
|
|
import gr.cite.tools.fieldset.BaseFieldSet;
|
|
import gr.cite.tools.logging.LoggerService;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
|
import org.springframework.context.annotation.Scope;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
@Component
|
|
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
|
public class AnnotationEntityTouchedIntegrationEventHandlerImpl implements AnnotationEntityTouchedIntegrationEventHandler {
|
|
|
|
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(AnnotationEntityTouchedIntegrationEventHandlerImpl.class));
|
|
|
|
private final OutboxService outboxService;
|
|
|
|
private final QueryFactory queryFactory;
|
|
|
|
public AnnotationEntityTouchedIntegrationEventHandlerImpl(OutboxService outboxService, QueryFactory queryFactory) {
|
|
this.outboxService = outboxService;
|
|
this.queryFactory = queryFactory;
|
|
}
|
|
|
|
private void handle(AnnotationEntitiesTouchedIntegrationEvent event) {
|
|
OutboxIntegrationEvent message = new OutboxIntegrationEvent();
|
|
message.setMessageId(UUID.randomUUID());
|
|
message.setType(OutboxIntegrationEvent.ANNOTATION_ENTITY_TOUCH);
|
|
message.setEvent(event);
|
|
this.outboxService.publish(message);
|
|
}
|
|
|
|
@Override
|
|
public void handleDescription(UUID descriptionId) {
|
|
DescriptionEntity entity = this.queryFactory.query(DescriptionQuery.class).ids(descriptionId).firstAs(new BaseFieldSet().ensure(Description._dmp));
|
|
if (entity == null) return;
|
|
List<DmpUserEntity> dmpUsers = this.queryFactory.query(DmpUserQuery.class).dmpIds(entity.getDmpId()).isActives(IsActive.Active).collectAs(new BaseFieldSet().ensure(DmpUser._user));
|
|
|
|
AnnotationEntitiesTouchedIntegrationEvent event = new AnnotationEntitiesTouchedIntegrationEvent();
|
|
event.setEvents(List.of(this.buildEventItem(descriptionId, dmpUsers)));
|
|
|
|
this.handle(event);
|
|
}
|
|
|
|
@Override
|
|
public void handleDmp(UUID dmpId) {
|
|
List<DescriptionEntity> descriptionEntities = this.queryFactory.query(DescriptionQuery.class).dmpIds(dmpId).collectAs(new BaseFieldSet().ensure(Description._id));
|
|
List<DmpUserEntity> dmpUsers = this.queryFactory.query(DmpUserQuery.class).dmpIds(dmpId).isActives(IsActive.Active).collectAs(new BaseFieldSet().ensure(DmpUser._user));
|
|
|
|
AnnotationEntitiesTouchedIntegrationEvent event = new AnnotationEntitiesTouchedIntegrationEvent();
|
|
event.setEvents(new ArrayList<>());
|
|
event.getEvents().add(this.buildEventItem(dmpId, dmpUsers));
|
|
|
|
for (DescriptionEntity description : descriptionEntities) event.getEvents().add(this.buildEventItem(description.getId(), dmpUsers));
|
|
|
|
this.handle(event);
|
|
}
|
|
|
|
private AnnotationEntitiesTouchedIntegrationEvent.AnnotationEntityTouchedIntegrationEvent buildEventItem(UUID entityId, List<DmpUserEntity> dmpUsers){
|
|
AnnotationEntitiesTouchedIntegrationEvent.AnnotationEntityTouchedIntegrationEvent eventItem = new AnnotationEntitiesTouchedIntegrationEvent.AnnotationEntityTouchedIntegrationEvent();
|
|
eventItem.setEntityId(entityId);
|
|
List<UUID> users = new ArrayList<>();
|
|
for (DmpUserEntity dmpUser : dmpUsers){
|
|
users.add(dmpUser.getUserId());
|
|
}
|
|
eventItem.setUserIds(users);
|
|
return eventItem;
|
|
}
|
|
}
|