Skip to content
This repository has been archived by the owner on Feb 13, 2024. It is now read-only.

Commit

Permalink
added partner rule event handler test
Browse files Browse the repository at this point in the history
  • Loading branch information
chriamue committed Jul 12, 2022
1 parent 81db84c commit 9c90cd0
Show file tree
Hide file tree
Showing 13 changed files with 235 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package org.hyperledger.bpa.api.notification;

public class Event {
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PartnerAcceptedEvent {
public class PartnerAcceptedEvent extends Event {

private Partner partner;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PartnerAddedEvent {
public class PartnerAddedEvent extends Event {

private Partner partner;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PartnerRemovedEvent {
public class PartnerRemovedEvent extends Event {

private Partner partner;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PartnerRequestCompletedEvent {
public class PartnerRequestCompletedEvent extends Event {

private Partner partner;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PartnerRequestReceivedEvent {
public class PartnerRequestReceivedEvent extends Event {

private Partner partner;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,48 +23,48 @@ public class CredentialRuleEventHandler {

@EventListener
@Async
public void onCredentialAcceptedEvent (CredentialAcceptedEvent event) {
public void onCredentialAcceptedEvent(CredentialAcceptedEvent event) {
log.debug("detected {}", event.getClass());
}

@EventListener
@Async
public void onCredentialAddedEvent (CredentialAddedEvent event) {
public void onCredentialAddedEvent(CredentialAddedEvent event) {
log.debug("detected {}", event.getClass());
}

@EventListener
@Async
public void onCredentialIssuedEvent (CredentialIssuedEvent event) {
public void onCredentialIssuedEvent(CredentialIssuedEvent event) {
log.debug("detected {}", event.getClass());
}

@EventListener
@Async
public void onCredentialOfferedEvent (CredentialOfferedEvent event) {
public void onCredentialOfferedEvent(CredentialOfferedEvent event) {
log.debug("detected {}", event.getClass());
}

@EventListener
@Async
public void onCredentialProblemEvent (CredentialProblemEvent event) {
public void onCredentialProblemEvent(CredentialProblemEvent event) {
log.debug("detected {}", event.getClass());
}

@EventListener
@Async
public void onCredentialProposalEvent (CredentialProposalEvent event) {
public void onCredentialProposalEvent(CredentialProposalEvent event) {
log.debug("detected {}", event.getClass());
}

public void runRule (Object event) {
public void runRule(Object event) {
List<RulesData> rules = rs.getAll();
log.debug("Running event against {} active rules", rules.size());
rules.parallelStream().forEach(r -> {
// if (r.getTrigger().apply(event)) {
// log.debug("Run rule with id: {}", r.getRuleId());
// r.getAction().run(event);
//}
// log.debug("Run rule with id: {}", r.getRuleId());
// r.getAction().run(event);
// }
});
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package org.hyperledger.bpa.impl.rules;

import io.micronaut.context.ApplicationContext;
import lombok.Builder;
import lombok.Data;
import org.hyperledger.aries.api.connection.ConnectionRecord;
import org.hyperledger.aries.api.present_proof.PresentationExchangeRecord;
import org.hyperledger.bpa.impl.PartnerManager;
import org.hyperledger.bpa.impl.TagService;
import org.hyperledger.bpa.persistence.model.Partner;
import org.hyperledger.bpa.persistence.repository.PartnerRepository;
import org.hyperledger.bpa.persistence.repository.TagRepository;

@Data
@Builder
Expand All @@ -13,4 +18,8 @@ public class EventContext {
private PresentationExchangeRecord presEx;
private ConnectionRecord connRec;
private ApplicationContext ctx;
private PartnerRepository partnerRepo;
private TagService tagService;
private TagRepository tagRepo;
private PartnerManager partnerManager;
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package org.hyperledger.bpa.impl.rules;

import io.micronaut.context.ApplicationContext;
import io.micronaut.runtime.event.annotation.EventListener;
import io.micronaut.scheduling.annotation.Async;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
import org.hyperledger.bpa.api.notification.*;
import org.hyperledger.bpa.impl.PartnerManager;
import org.hyperledger.bpa.impl.TagService;
import org.hyperledger.bpa.persistence.repository.PartnerRepository;
import org.hyperledger.bpa.persistence.repository.TagRepository;

import java.util.List;

Expand All @@ -16,53 +18,67 @@
public class PartnerRuleEventHandler {

@Inject
PartnerRepository pr;
RulesService rs;

@Inject
RulesService rs;
PartnerRepository partnerRepo;

@Inject
TagService tagService;

@Inject
PartnerManager partnerManager;

@Inject
ApplicationContext appCtx;
TagRepository tagRepo;

@EventListener
@Async
public void onPartnerAddedEvent (PartnerAddedEvent event) {
public void onPartnerAddedEvent(PartnerAddedEvent event) {
log.debug("detected {}", event.getClass());
runRule(event);
}

@EventListener
@Async
public void onPartnerAcceptedEvent (PartnerAcceptedEvent event) {
public void onPartnerAcceptedEvent(PartnerAcceptedEvent event) {
log.debug("detected {}", event.getClass());
runRule(event);
}

@EventListener
@Async
public void onPartnerRemovedEvent (PartnerRemovedEvent event) {
public void onPartnerRemovedEvent(PartnerRemovedEvent event) {
log.debug("detected {}", event.getClass());
runRule(event);
}

@EventListener
@Async
public void onPartnerRequestReceivedEvent (PartnerRequestReceivedEvent event) {
public void onPartnerRequestReceivedEvent(PartnerRequestReceivedEvent event) {
log.debug("detected {}", event.getClass());
runRule(event);
}

@EventListener
@Async
public void onPartnerRequestCompletedEvent (PartnerRequestCompletedEvent event) {
public void onPartnerRequestCompletedEvent(PartnerRequestCompletedEvent event) {
log.debug("detected {}", event.getClass());
runRule(event);
}

public void runRule (Object event) {
public void runRule(Event event) {
List<RulesData> rules = rs.getAll();
log.debug("Running event against {} active rules", rules.size());
log.debug("Running event against {} active rules", rs.getAll().size());
log.debug("Count of Partners {}", partnerRepo.findAll());
EventContext ctx = EventContext.builder().partnerRepo(partnerRepo)
.tagService(tagService).partnerManager(partnerManager)
.tagRepo(tagRepo).build();
rules.parallelStream().forEach(r -> {
// if (r.getTrigger().apply(event)) {
// log.debug("Run rule with id: {}", r.getRuleId());
// r.getAction().run(event);
//}
if (r.getTrigger().apply(event)) {
log.debug("Run rule with event id: {}", r.getRuleId());
r.getAction().run(ctx);
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,22 @@
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import jdk.jfr.Event;

import lombok.*;
import lombok.extern.slf4j.Slf4j;
import org.hyperledger.aries.api.connection.ConnectionRecord;
import org.hyperledger.aries.api.connection.ConnectionState;
import org.hyperledger.aries.api.connection.ConnectionTheirRole;
import org.hyperledger.bpa.api.TagAPI;
import org.hyperledger.bpa.api.notification.Event;
import org.hyperledger.bpa.controller.api.partner.UpdatePartnerRequest;
import org.hyperledger.bpa.persistence.model.ActiveRules;
import org.hyperledger.bpa.persistence.model.Partner;
import org.hyperledger.bpa.persistence.model.Tag;

import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;

@Slf4j
Expand All @@ -26,16 +35,22 @@ public class RulesData {
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Trigger.ConnectionTrigger.class, name = Trigger.CONNECTION_TRIGGER_NAME),
@JsonSubTypes.Type(value = Trigger.ProofReceivedTrigger.class, name = Trigger.PROOF_RECEIVED_TRIGGER_NAME)
@JsonSubTypes.Type(value = Trigger.ProofReceivedTrigger.class, name = Trigger.PROOF_RECEIVED_TRIGGER_NAME),
@JsonSubTypes.Type(value = Trigger.EventTrigger.class, name = Trigger.EVENT_TRIGGER_NAME)
})
@NoArgsConstructor
public abstract static class Trigger {

public static final String CONNECTION_TRIGGER_NAME = "connection";
public static final String PROOF_RECEIVED_TRIGGER_NAME = "proof_received";
public static final String EVENT_TRIGGER_NAME = "event";

abstract boolean apply(EventContext ctx);

boolean apply(Event event) {
return false;
}

@SuppressWarnings("unused")
private String type;

Expand All @@ -61,6 +76,26 @@ public boolean apply(EventContext ctx) {
}
}

@JsonTypeName(Trigger.EVENT_TRIGGER_NAME)
@Builder
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public static class EventTrigger extends Trigger {
private String eventClassName;

@Override
public boolean apply(EventContext ctx) {
return false;
}

@Override
public boolean apply(Event event) {
return event.getClass().getSimpleName().equals(this.eventClassName);
}
}

@JsonTypeName(Trigger.PROOF_RECEIVED_TRIGGER_NAME)
@Builder
@Data
Expand Down Expand Up @@ -108,7 +143,18 @@ public static class TagConnection extends Action {

@Override
void run(EventContext ctx) {
log.debug("tag: {}", tag);
// TODO: get partner by connection Id and update tags
Optional<Partner> partner = ctx.getPartnerRepo().findByConnectionId(connectionId);

if (partner.isPresent()) {
TagAPI tagApi = ctx.getTagService().addTag(tag);
ctx.getPartnerManager().updatePartner(partner.get().getId(),
UpdatePartnerRequest.builder().tag(List.of(Tag.builder().id(tagApi.getId())
.name(tagApi.getName()).build())).build());

log.debug("partner tagged with tag: {}", tag);
}
log.debug("tag: {}, connectionId: {}", tag, connectionId);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import jakarta.inject.Singleton;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.hyperledger.bpa.api.notification.Event;
import org.hyperledger.bpa.persistence.model.ActiveRules;
import org.hyperledger.bpa.persistence.repository.RulesRepository;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
CREATE TABLE active_rules (
id uuid PRIMARY KEY,
created_at timestamp without time zone,
updated_at timestamp without time zone,
trigger jsonb,
action jsonb
);
Loading

0 comments on commit 9c90cd0

Please # to comment.