Skip to content
This repository was archived by the owner on Feb 13, 2024. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 implements PartnerEvent {

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 implements PartnerEvent {

private Partner partner;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (c) 2020-2022 - for information on the respective copyright owner
* see the NOTICE file and/or the repository at
* https://github.com/hyperledger-labs/business-partner-agent
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.hyperledger.bpa.api.notification;

import org.hyperledger.bpa.persistence.model.Partner;

public interface PartnerEvent {

Partner getPartner();
}
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 implements PartnerEvent {

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 implements PartnerEvent {

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 implements PartnerEvent {

private Partner partner;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
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 java.util.List;

@Slf4j
@Singleton
public class CredentialRuleEventHandler {

@Inject
RulesService rs;

@Inject
ApplicationContext appCtx;

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

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

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

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

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

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

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);
// }
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.hyperledger.bpa.impl.rules;

import io.micronaut.context.ApplicationContext;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
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
public class EventContext {
private Partner partner;
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
@@ -0,0 +1,83 @@
package org.hyperledger.bpa.impl.rules;

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;

@Slf4j
@Singleton
public class PartnerRuleEventHandler {

@Inject
RulesService rs;

@Inject
PartnerRepository partnerRepo;

@Inject
TagService tagService;

@Inject
PartnerManager partnerManager;

@Inject
TagRepository tagRepo;

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

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

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

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

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

public void runRule(Event event) {
List<RulesData> rules = rs.getAll();
log.debug("Running event against {} active rules", rs.getAll().size());
EventContext ctx = EventContext.builder().partnerRepo(partnerRepo)
.tagService(tagService).partnerManager(partnerManager)
.tagRepo(tagRepo).partner(((PartnerEvent) event).getPartner()).build();
rules.parallelStream().forEach(r -> {
if (r.getTrigger().apply(event)) {
log.debug("Run rule with event id: {}", r.getRuleId());
r.getAction().run(ctx);
}
});
}
}
Loading