Getting annotation authors on query responses, ui update
This commit is contained in:
parent
dcb112f843
commit
1b7ecf201e
|
@ -72,7 +72,7 @@ public class AnnotationController {
|
|||
this.censorFactory.censor(AnnotationCensor.class).censor(lookup.getProject(), null);
|
||||
|
||||
AnnotationQuery query = lookup.enrich(this.queryFactory);
|
||||
List<AnnotationEntity> data = query.collectAs(lookup.getProject());
|
||||
List<AnnotationEntity> data = query.collect();
|
||||
List<Annotation> models = this.builderFactory.builder(AnnotationBuilder.class).build(lookup.getProject(), data);
|
||||
long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size();
|
||||
|
||||
|
|
|
@ -51,6 +51,10 @@ public class Annotation {
|
|||
|
||||
public static final String _timeStamp = "timeStamp";
|
||||
|
||||
private AnnotationAuthor author;
|
||||
|
||||
public static final String _author = "author";
|
||||
|
||||
private Instant createdAt;
|
||||
|
||||
public static final String _createdAt = "createdAt";
|
||||
|
@ -111,6 +115,14 @@ public class Annotation {
|
|||
this.subjectId = subjectId;
|
||||
}
|
||||
|
||||
public AnnotationAuthor getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(AnnotationAuthor author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public UUID getThreadId() {
|
||||
return threadId;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package gr.cite.annotation.model;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class AnnotationAuthor {
|
||||
|
||||
private UUID id;
|
||||
|
||||
public static final String _id = "id";
|
||||
|
||||
private String name;
|
||||
|
||||
public static final String _name = "name";
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
|
@ -4,7 +4,13 @@ import gr.cite.annotation.authorization.AuthorizationFlags;
|
|||
import gr.cite.annotation.convention.ConventionService;
|
||||
import gr.cite.annotation.data.AnnotationEntity;
|
||||
import gr.cite.annotation.model.Annotation;
|
||||
import gr.cite.annotation.model.AnnotationAuthor;
|
||||
import gr.cite.annotation.model.User;
|
||||
import gr.cite.annotation.query.UserQuery;
|
||||
import gr.cite.tools.data.builder.BuilderFactory;
|
||||
import gr.cite.tools.data.query.QueryFactory;
|
||||
import gr.cite.tools.exception.MyApplicationException;
|
||||
import gr.cite.tools.fieldset.BaseFieldSet;
|
||||
import gr.cite.tools.fieldset.FieldSet;
|
||||
import gr.cite.tools.logging.DataLogEntry;
|
||||
import gr.cite.tools.logging.LoggerService;
|
||||
|
@ -14,15 +20,22 @@ import org.springframework.context.annotation.Scope;
|
|||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||
public class AnnotationBuilder extends BaseBuilder<Annotation, AnnotationEntity> {
|
||||
|
||||
private final QueryFactory queryFactory;
|
||||
|
||||
private final BuilderFactory builderFactory;
|
||||
|
||||
private EnumSet<AuthorizationFlags> authorize = EnumSet.of(AuthorizationFlags.None);
|
||||
|
||||
public AnnotationBuilder(ConventionService conventionService) {
|
||||
public AnnotationBuilder(ConventionService conventionService, QueryFactory queryFactory, BuilderFactory builderFactory) {
|
||||
super(conventionService, new LoggerService(LoggerFactory.getLogger(AnnotationBuilder.class)));
|
||||
this.queryFactory = queryFactory;
|
||||
this.builderFactory = builderFactory;
|
||||
}
|
||||
|
||||
public AnnotationBuilder authorize(EnumSet<AuthorizationFlags> values) {
|
||||
|
@ -39,6 +52,9 @@ public class AnnotationBuilder extends BaseBuilder<Annotation, AnnotationEntity>
|
|||
|
||||
List<Annotation> models = new ArrayList<>();
|
||||
|
||||
FieldSet authorFields = fields.extractPrefixed(this.asPrefix(Annotation._author));
|
||||
Map<UUID, AnnotationAuthor> authorsMap = this.collectAuthors(authorFields, data);
|
||||
|
||||
if (data == null)
|
||||
return models;
|
||||
for (AnnotationEntity d : data) {
|
||||
|
@ -55,6 +71,8 @@ public class AnnotationBuilder extends BaseBuilder<Annotation, AnnotationEntity>
|
|||
m.setPayload(d.getPayload());
|
||||
if (fields.hasField(this.asIndexer(Annotation._subjectId)))
|
||||
m.setSubjectId(d.getSubjectId());
|
||||
if (authorsMap != null && authorsMap.containsKey(d.getSubjectId()))
|
||||
m.setAuthor(authorsMap.get(d.getSubjectId()));
|
||||
if (fields.hasField(this.asIndexer(Annotation._threadId)))
|
||||
m.setThreadId(d.getThreadId());
|
||||
if (fields.hasField(this.asIndexer(Annotation._parentId)))
|
||||
|
@ -75,4 +93,31 @@ public class AnnotationBuilder extends BaseBuilder<Annotation, AnnotationEntity>
|
|||
return models;
|
||||
}
|
||||
|
||||
private Map<UUID, AnnotationAuthor> collectAuthors(FieldSet fields, List<AnnotationEntity> data) {
|
||||
if (fields.isEmpty() || data.isEmpty()) return null;
|
||||
this.logger.debug("checking related - {}", User.class.getSimpleName());
|
||||
|
||||
Map<UUID, AnnotationAuthor> itemMap = new HashMap<>();
|
||||
FieldSet clone = new BaseFieldSet(fields.getFields()).ensure(this.asIndexer(User._id), this.asIndexer(User._name));
|
||||
List<UUID> userIds = data.stream()
|
||||
.map(AnnotationEntity::getSubjectId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
UserQuery query = this.queryFactory.query(UserQuery.class).authorize(this.authorize).ids(userIds);
|
||||
Map<UUID, List<User>> users = this.builderFactory.builder(UserBuilder.class).authorize(this.authorize).asMasterKey(query, clone, User::getId);
|
||||
|
||||
users.forEach((key, val) -> {
|
||||
itemMap.put(key, this.authorFromUser(val.getFirst()));
|
||||
});
|
||||
|
||||
return itemMap;
|
||||
}
|
||||
|
||||
private AnnotationAuthor authorFromUser(User user) {
|
||||
AnnotationAuthor author = new AnnotationAuthor();
|
||||
author.setId(user.getId());
|
||||
author.setName(user.getName());
|
||||
return author;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
EntityTransaction transaction = null;
|
||||
EntityManager entityManager = null;
|
||||
CandidateInfo candidate = null;
|
||||
try (FakeRequestScope fakeRequestScope = new FakeRequestScope()) {
|
||||
try (FakeRequestScope ignored = new FakeRequestScope()) {
|
||||
try {
|
||||
QueryFactory queryFactory = this.applicationContext.getBean(QueryFactory.class);
|
||||
EntityManagerFactory entityManagerFactory = this.applicationContext.getBean(EntityManagerFactory.class);
|
||||
|
@ -108,9 +108,9 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
public Boolean shouldOmit(CandidateInfo candidate, Function<QueueInbox, Boolean> shouldOmit) {
|
||||
EntityTransaction transaction = null;
|
||||
EntityManager entityManager = null;
|
||||
Boolean success = false;
|
||||
boolean success = false;
|
||||
|
||||
try (FakeRequestScope fakeRequestScope = new FakeRequestScope()) {
|
||||
try (FakeRequestScope ignored = new FakeRequestScope()) {
|
||||
try {
|
||||
EntityManagerFactory entityManagerFactory = this.applicationContext.getBean(EntityManagerFactory.class);
|
||||
|
||||
|
@ -123,7 +123,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
QueueInboxEntity item = queryFactory.query(QueueInboxQuery.class).ids(candidate.getId()).first();
|
||||
|
||||
if (item == null) {
|
||||
this.logger.warn("Could not lookup queue inbox {} to process. Continuing...", candidate.getId());
|
||||
logger.warn("Could not lookup queue inbox {} to process. Continuing...", candidate.getId());
|
||||
} else {
|
||||
if (shouldOmit.apply(item)) {
|
||||
item.setStatus(QueueInboxStatus.OMITTED);
|
||||
|
@ -136,7 +136,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
|
||||
transaction.commit();
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
if (transaction != null)
|
||||
transaction.rollback();
|
||||
success = false;
|
||||
|
@ -145,7 +145,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
entityManager.close();
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
@ -154,9 +154,9 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
public boolean shouldWait(CandidateInfo candidate, Function<QueueInbox, Boolean> itIsTimeFunc) {
|
||||
EntityTransaction transaction = null;
|
||||
EntityManager entityManager = null;
|
||||
Boolean success = false;
|
||||
boolean success = false;
|
||||
|
||||
try (FakeRequestScope fakeRequestScope = new FakeRequestScope()) {
|
||||
try (FakeRequestScope ignored = new FakeRequestScope()) {
|
||||
try {
|
||||
EntityManagerFactory entityManagerFactory = this.applicationContext.getBean(EntityManagerFactory.class);
|
||||
|
||||
|
@ -183,7 +183,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
}
|
||||
transaction.commit();
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
if (transaction != null)
|
||||
transaction.rollback();
|
||||
success = false;
|
||||
|
@ -192,7 +192,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
entityManager.close();
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
@ -201,9 +201,9 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
public QueueInbox create(InboxCreatorParams inboxCreatorParams) {
|
||||
EntityTransaction transaction = null;
|
||||
EntityManager entityManager = null;
|
||||
Boolean success = false;
|
||||
boolean success = false;
|
||||
QueueInboxEntity queueMessage = null;
|
||||
try (FakeRequestScope fakeRequestScope = new FakeRequestScope()) {
|
||||
try (FakeRequestScope ignored = new FakeRequestScope()) {
|
||||
try {
|
||||
queueMessage = this.createQueueInboxEntity(inboxCreatorParams);
|
||||
EntityManagerFactory entityManagerFactory = this.applicationContext.getBean(EntityManagerFactory.class);
|
||||
|
@ -218,7 +218,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
|
||||
transaction.commit();
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
if (transaction != null)
|
||||
transaction.rollback();
|
||||
success = false;
|
||||
|
@ -227,7 +227,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
entityManager.close();
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
}
|
||||
return queueMessage;
|
||||
}
|
||||
|
@ -255,9 +255,9 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
public Boolean emit(CandidateInfo candidateInfo) {
|
||||
EntityTransaction transaction = null;
|
||||
EntityManager entityManager = null;
|
||||
Boolean success = false;
|
||||
boolean success = false;
|
||||
|
||||
try (FakeRequestScope fakeRequestScope = new FakeRequestScope()) {
|
||||
try (FakeRequestScope ignored = new FakeRequestScope()) {
|
||||
try {
|
||||
|
||||
EntityManagerFactory entityManagerFactory = this.applicationContext.getBean(EntityManagerFactory.class);
|
||||
|
@ -270,7 +270,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
QueueInboxEntity queueInboxMessage = queryFactory.query(QueueInboxQuery.class).ids(candidateInfo.getId()).first();
|
||||
|
||||
if (queueInboxMessage == null) {
|
||||
this.logger.warn("Could not lookup queue inbox {} to process. Continuing...", candidateInfo.getId());
|
||||
logger.warn("Could not lookup queue inbox {} to process. Continuing...", candidateInfo.getId());
|
||||
} else {
|
||||
|
||||
EventProcessingStatus status = this.processMessage(queueInboxMessage.getRoute(), queueInboxMessage.getMessageId().toString(), queueInboxMessage.getApplicationId(), queueInboxMessage.getMessage());
|
||||
|
@ -302,7 +302,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
|
||||
transaction.commit();
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
if (transaction != null)
|
||||
transaction.rollback();
|
||||
success = false;
|
||||
|
@ -311,7 +311,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
entityManager.close();
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
this.logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
logger.error("Problem executing purge. rolling back any db changes and marking error. Continuing...", ex);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
@ -339,7 +339,7 @@ public class InboxRepositoryImpl implements InboxRepository {
|
|||
}
|
||||
|
||||
private Boolean RoutingKeyMatched(String routingKey, List<String> topics) {
|
||||
if (topics == null || topics.size() == 0)
|
||||
if (topics == null || topics.isEmpty())
|
||||
return false;
|
||||
return topics.stream().anyMatch(x -> x.equals(routingKey));
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<div class="col annotation-time">{{thread.timeStamp | date:'EEEE, MMMM d, y, h:mm a'}}</div>
|
||||
<div class="col-auto" *ngIf="thread.protectionType === annotationProtectionTypeEnum.Private" matTooltip="{{'ANNOTATION-DIALOG.PROTECTION.PRIVATE' | translate}}"><i class="material-icons protection-icon icon-{{getAnnotationProtectionType(thread)}}">{{getAnnotationProtectionType(thread)}}</i></div>
|
||||
<div class="col-auto" *ngIf="thread.protectionType === annotationProtectionTypeEnum.EntityAccessors" matTooltip="{{'ANNOTATION-DIALOG.PROTECTION.ENTITY-ACCESSORS' | translate}}"><i class="material-icons protection-icon icon-{{getAnnotationProtectionType(thread)}}">{{getAnnotationProtectionType(thread)}}</i></div>
|
||||
<div class="col-md-12 annotation-full-text">{{thread.text}}</div>
|
||||
<div class="col-md-12 annotation-full-text">{{thread.payload}}</div>
|
||||
<div class="col-md-12">
|
||||
<em class="user">{{'ANNOTATION-DIALOG.THREADS.FROM-USER' | translate}} {{thread.author.name}}</em>
|
||||
</div>
|
||||
|
|
|
@ -123,12 +123,11 @@ export class AnnotationDialogComponent extends BaseComponent {
|
|||
lookup.project = {
|
||||
fields: [
|
||||
nameof<Annotation>(x => x.id),
|
||||
// nameof<Annotation>(x => x.threadId),
|
||||
// nameof<Annotation>(x => x.threadId),
|
||||
// nameof<Annotation>(x => x.timeStamp),
|
||||
// nameof<Annotation>(x => x.author.name),
|
||||
nameof<Annotation>(x => x.threadId),
|
||||
nameof<Annotation>(x => x.timeStamp),
|
||||
nameof<Annotation>(x => x.author.name),
|
||||
nameof<Annotation>(x => x.payload),
|
||||
// nameof<Annotation>(x => x.protection),
|
||||
nameof<Annotation>(x => x.protectionType),
|
||||
]
|
||||
};
|
||||
|
||||
|
@ -146,6 +145,8 @@ export class AnnotationDialogComponent extends BaseComponent {
|
|||
// this.annotationsPerThread[element.id.toString()] = data.items.filter(x => x.threadId === element.id && x.id !== element.id).sort((a1, a2) => new Date(a1.timeStamp).getTime() - new Date(a2.timeStamp).getTime());
|
||||
// });
|
||||
// // this.annotationsChanged.emit(this.threads);
|
||||
|
||||
this.threads = data.items;
|
||||
},
|
||||
error => this.onCallbackError(error),
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue