Skip to content

Commit

Permalink
Merge bd094d7 into 24d87a9
Browse files Browse the repository at this point in the history
  • Loading branch information
Edvard Fonsell committed Sep 17, 2018
2 parents 24d87a9 + bd094d7 commit 8842852
Show file tree
Hide file tree
Showing 29 changed files with 476 additions and 52 deletions.
16 changes: 13 additions & 3 deletions nflow-tests/src/main/java/io/nflow/tests/demo/DemoServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,40 @@

import static io.nflow.engine.config.Profiles.JMX;
import static io.nflow.engine.workflow.instance.WorkflowInstanceAction.WorkflowActionType.externalChange;
import static io.nflow.tests.demo.DemoWorkflow.DEMO_WORKFLOW_TYPE;
import static io.nflow.tests.demo.SlowWorkflow.SLOW_WORKFLOW_TYPE;
import static io.nflow.tests.demo.SpringApplicationContext.applicationContext;
import static io.nflow.tests.demo.workflow.DemoWorkflow.DEMO_WORKFLOW_TYPE;
import static io.nflow.tests.demo.workflow.SlowWorkflow.SLOW_WORKFLOW_TYPE;
import static java.util.Collections.emptySet;
import static org.joda.time.DateTime.now;

import java.util.EnumSet;
import java.util.Optional;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import io.nflow.engine.service.WorkflowInstanceInclude;
import io.nflow.engine.service.WorkflowInstanceService;
import io.nflow.engine.workflow.instance.WorkflowInstance;
import io.nflow.engine.workflow.instance.WorkflowInstanceAction;
import io.nflow.jetty.StartNflow;
import io.nflow.metrics.NflowMetricsContext;
import io.nflow.tests.demo.workflow.DemoWorkflow;

public class DemoServer {

public static void main(String[] args) throws Exception {
new StartNflow().registerSpringContext(NflowMetricsContext.class, SpringApplicationContext.class, DemoWorkflow.class)
new StartNflow()
.registerSpringContext(NflowMetricsContext.class, SpringApplicationContext.class, DemoServerWorkflowsConfiguration.class)
.startJetty(7500, "local", JMX);
insertDemoWorkflows();
}

@Configuration
@ComponentScan("io.nflow.tests.demo.workflow")
static class DemoServerWorkflowsConfiguration {
}

private static void insertDemoWorkflows() {
WorkflowInstanceService workflowInstanceService = applicationContext.getBean(WorkflowInstanceService.class);
WorkflowInstance instance = new WorkflowInstance.Builder().setType(DEMO_WORKFLOW_TYPE)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.nflow.tests.demo.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;

public class AbstractRequest {

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.nflow.tests.demo.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;

public class AbstractResponse {

public boolean success;

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.nflow.tests.demo.domain;

public class CreateCreditApplicationRequest extends AbstractRequest {

public String accountNo;
public int amount;
public String clientId;
public String productId;
public int processWorkflowId;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.nflow.tests.demo.domain;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class CreateLoanResponse extends AbstractResponse {

public String accountNo;
public boolean active;
public int amount;
public String applicationId;
public String archiveId;
public String clientId;
// created
public String loanId;
public String productId;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.nflow.tests.demo.domain;

public class CreditDecisionData extends AbstractRequest {

public String clientId;
public int amount;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.nflow.tests.demo.domain;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class QueryCreditApplicationResponse extends AbstractResponse {

public String accountNo;
public boolean active;
public int amount;
public String applicationId;
public String clientId;
// created
public String productId;
public String status;

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package io.nflow.tests.demo;
package io.nflow.tests.demo.workflow;

import static io.nflow.engine.workflow.definition.NextAction.moveToState;
import static io.nflow.engine.workflow.definition.WorkflowStateType.end;
import static io.nflow.engine.workflow.definition.WorkflowStateType.manual;
import static io.nflow.engine.workflow.definition.WorkflowStateType.normal;
import static io.nflow.engine.workflow.definition.WorkflowStateType.start;
import static io.nflow.tests.demo.CreditApplicationWorkflow.State.acceptCreditApplication;
import static io.nflow.tests.demo.CreditApplicationWorkflow.State.createCreditApplication;
import static io.nflow.tests.demo.CreditApplicationWorkflow.State.done;
import static io.nflow.tests.demo.CreditApplicationWorkflow.State.error;
import static io.nflow.tests.demo.CreditApplicationWorkflow.State.finishCreditApplication;
import static io.nflow.tests.demo.CreditApplicationWorkflow.State.grantLoan;
import static io.nflow.tests.demo.workflow.CreditApplicationWorkflow.State.acceptCreditApplication;
import static io.nflow.tests.demo.workflow.CreditApplicationWorkflow.State.createCreditApplication;
import static io.nflow.tests.demo.workflow.CreditApplicationWorkflow.State.done;
import static io.nflow.tests.demo.workflow.CreditApplicationWorkflow.State.error;
import static io.nflow.tests.demo.workflow.CreditApplicationWorkflow.State.finishCreditApplication;
import static io.nflow.tests.demo.workflow.CreditApplicationWorkflow.State.grantLoan;
import static org.slf4j.LoggerFactory.getLogger;

import java.math.BigDecimal;
Expand Down Expand Up @@ -61,6 +61,7 @@ public String getDescription() {

public CreditApplicationWorkflow() {
super("creditApplicationProcess", createCreditApplication, error, new WorkflowSettings.Builder().setMinErrorTransitionDelay(0).setMaxErrorTransitionDelay(0).setShortTransitionDelay(0).setMaxRetries(3).build());
setDescription("Mock workflow that makes credit decision, creates loan, deposits the money and updates credit application");
permit(createCreditApplication, acceptCreditApplication);
permit(acceptCreditApplication, grantLoan);
permit(acceptCreditApplication, finishCreditApplication);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package io.nflow.tests.demo.workflow;

import static io.nflow.engine.workflow.definition.NextAction.moveToState;
import static io.nflow.engine.workflow.definition.WorkflowStateType.end;
import static io.nflow.engine.workflow.definition.WorkflowStateType.manual;
import static io.nflow.engine.workflow.definition.WorkflowStateType.normal;
import static io.nflow.engine.workflow.definition.WorkflowStateType.start;
import static io.nflow.tests.demo.workflow.CreditDecisionWorkflow.State.approved;
import static io.nflow.tests.demo.workflow.CreditDecisionWorkflow.State.decisionEngine;
import static io.nflow.tests.demo.workflow.CreditDecisionWorkflow.State.internalBlacklist;
import static io.nflow.tests.demo.workflow.CreditDecisionWorkflow.State.manualDecision;
import static io.nflow.tests.demo.workflow.CreditDecisionWorkflow.State.rejected;
import static io.nflow.tests.demo.workflow.CreditDecisionWorkflow.State.satQuery;

import org.springframework.stereotype.Component;

import io.nflow.engine.workflow.definition.NextAction;
import io.nflow.engine.workflow.definition.StateExecution;
import io.nflow.engine.workflow.definition.StateVar;
import io.nflow.engine.workflow.definition.WorkflowDefinition;
import io.nflow.engine.workflow.definition.WorkflowStateType;
import io.nflow.tests.demo.domain.CreditDecisionData;

@Component
public class CreditDecisionWorkflow extends WorkflowDefinition<CreditDecisionWorkflow.State> {

public static final String TYPE = "creditDecision";
public static final String VAR_REQUEST_DATA = "requestData";

public enum State implements io.nflow.engine.workflow.definition.WorkflowState {
internalBlacklist(start, "Reject internally blacklisted customers"),
decisionEngine(normal, "Check if application ok for decision engine"),
satQuery(normal, "Query customer credit rating from SAT"),
manualDecision(manual, "Manually approve or reject the application"),
approved(end, "Credit Decision Approved"),
rejected(end, "Credit Decision Rejected");

private WorkflowStateType type;
private String description;

private State(WorkflowStateType type, String description) {
this.type = type;
this.description = description;
}

@Override
public WorkflowStateType getType() {
return type;
}

@Override
public String getDescription() {
return description;
}
}

public CreditDecisionWorkflow() {
super(TYPE, internalBlacklist, manualDecision);
setDescription("Approve or reject credit application");
permit(internalBlacklist, decisionEngine);
permit(decisionEngine, satQuery);
permit(satQuery, approved);
permit(satQuery, rejected);
}

public NextAction internalBlacklist(@SuppressWarnings("unused") StateExecution execution) {
return moveToState(decisionEngine, "Customer not blacklisted");
}

public NextAction decisionEngine(@SuppressWarnings("unused") StateExecution execution) {
return moveToState(satQuery, "Decision engine approves");
}

public NextAction satQuery(@SuppressWarnings("unused") StateExecution execution) {
return moveToState(manualDecision, "SAT query failed");
}

public void approved(StateExecution execution,
@SuppressWarnings("unused") @StateVar(value = VAR_REQUEST_DATA) CreditDecisionData requestData) {
execution.wakeUpParentWorkflow();
}

public void rejected(StateExecution execution,
@SuppressWarnings("unused") @StateVar(value = VAR_REQUEST_DATA) CreditDecisionData requestData) {
execution.wakeUpParentWorkflow();
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.nflow.tests.demo;
package io.nflow.tests.demo.workflow;

import static io.nflow.engine.workflow.definition.NextAction.moveToState;
import static io.nflow.engine.workflow.definition.NextAction.stopInState;
Expand Down Expand Up @@ -42,6 +42,7 @@ public String getDescription() {

public DemoWorkflow() {
super(DEMO_WORKFLOW_TYPE, State.begin, State.error);
setDescription("Simple demo workflow: start -> process -> end");
permit(State.begin, State.process);
permit(State.process, State.done);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.nflow.tests.demo;
package io.nflow.tests.demo.workflow;

import static io.nflow.engine.workflow.definition.NextAction.moveToState;
import static io.nflow.engine.workflow.definition.NextAction.retryAfter;
Expand Down Expand Up @@ -54,6 +54,7 @@ public String getDescription() {

public FibonacciWorkflow() {
super(WORKFLOW_TYPE, State.begin, State.error);
setDescription("Fibonacci series generator using recursive process. Each step is handled by a new child workflow.");
permit(State.begin, State.nMinus2);
permit(State.nMinus2, State.nMinus1);
permit(State.nMinus2, State.poll);
Expand Down
Loading

0 comments on commit 8842852

Please sign in to comment.