Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fjernet ubrukte specifications #122

Merged
merged 1 commit into from
Sep 29, 2022
Merged
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
42 changes: 0 additions & 42 deletions src/main/java/no/nav/fpsak/nare/DynamicRuleService.java

This file was deleted.

117 changes: 0 additions & 117 deletions src/main/java/no/nav/fpsak/nare/Ruleset.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package no.nav.fpsak.nare;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

import no.nav.fpsak.nare.specification.ComputationalIfSpecification;
import no.nav.fpsak.nare.specification.ConditionalOrSpecification;
import no.nav.fpsak.nare.specification.ForeachSpecification;
import no.nav.fpsak.nare.specification.SequenceSpecification;
import no.nav.fpsak.nare.specification.Specification;

Expand Down Expand Up @@ -116,118 +113,4 @@ public Specification<V> beregningsRegel(String id, String beskrivelse, List<Spec
specs.add(spec2);
return new SequenceSpecification<>(id, beskrivelse, specs);
}

/**
* Realiserer sekvens der en regel utføres N ganger - 1 gang for hvert element i en collection
*
* @param id
* @param beskrivelse
* @param spec regel som utføres 1 gang for hvert element i argumentlisten, med argName + arg som "scope"
* @param argName
* @param args argumentlisten, inneholder N argumenter
* @return
*/
public Specification<V> beregningsForeachRegel(String id, String beskrivelse, Specification<V> spec,
String argName, List<?> args) {
Objects.requireNonNull(spec, "spec1");
Objects.requireNonNull(args, "args1");
if (args.isEmpty()) {
throw new IllegalArgumentException("Argumentlisten kan ikke være tom");
}
return new ForeachSpecification<>(id, beskrivelse, spec, args, argName);
}

/**
* Realiserer sekvens der en regel utføres N ganger - 1 gang for hvert element i en collection
*
* @param id
* @param beskrivelse
* @param spec regel som utføres 1 gang for hvert element i argumentlisten, med argName + arg som "scope"
* @param argName
* @param args argumentlisten, inneholder N argumenter
* @return
*/
public Specification<V> beregningsForeachRegel(Specification<V> spec, String argName, List<?> args) {
Objects.requireNonNull(spec, "spec1");
Objects.requireNonNull(args, "args1");
if (args.isEmpty()) {
throw new IllegalArgumentException("Argumentlisten kan ikke være tom");
}
return new ForeachSpecification<>(spec, args, argName);
}

/**
* Realiserer sekvens der en regel utføres N ganger - 1 gang for hvert element i en collection - fulgt av annen regel
*
* @param id
* @param beskrivelse
* @param spec regel som utføres 1 gang for hvert element i argumentlisten, med argName + arg som "scope"
* @param argName
* @param args argumentlisten, inneholder N argumenter
* @param specThen regel som utføres 1 gang etter at spec er utført N ganger
* @return
*/
public Specification<V> beregningsForeachThenRegel(String id, String beskrivelse, Specification<V> spec,
String argName, List<?> args, Specification<V> specThen) {
Objects.requireNonNull(spec, "spec");
Objects.requireNonNull(args, "args1");
Objects.requireNonNull(specThen, "specThen");
if (args.isEmpty()) {
throw new IllegalArgumentException("Argumentlisten kan ikke være tom");
}
return new SequenceSpecification<>(id, beskrivelse, new ForeachSpecification<>(id, beskrivelse, spec, args, argName), specThen);
}

/**
* Realiserer sekvens der en regel utføres N ganger, etterfulgt av en
* spesifikasjon som har betydning for videre flyt
*
* @param id
* @param beskrivelse
* @param spec1 regel som utføres 1 gang for hvert element i
* argumentlisten, med argumentbeskrivelse +
* argumentverdi som serviceargument
* @param regelmodell
* @param argumentBeskrivelse
* @param args1 argumentlisten, inneholder N argumenter
* @param spec2 utføres 1 gang etter at spec1 er utført N ganger
* @return
*/
@Deprecated // Konsturer en liste selv og bruk beregningsRegel(spec1list, spec2) eller Bruk beregningForeach eller beregningForeachThen
public Specification<V> beregningsRegel(String id, String beskrivelse, Class<? extends DynamicRuleService<V>> spec1,
V regelmodell, String argumentBeskrivelse, List<? extends Object> args1, Specification<V> spec2) {
Objects.requireNonNull(spec1, "spec1");
Objects.requireNonNull(args1, "args1");
Objects.requireNonNull(spec2, "spec2");
if (args1.isEmpty()) {
throw new IllegalArgumentException("Argumentlisten kan ikke være tom");
}
List<Specification<V>> specs = new ArrayList<>();
args1.forEach(arg -> {
DynamicRuleService<V> ny;
try {
ny = opprettSpesifikasjon(spec1, regelmodell);
ny.medServiceArgument(new ServiceArgument(argumentBeskrivelse, arg));
specs.add(ny.getSpecification());
} catch (InstantiationException | IllegalAccessException e) {
throw new IllegalStateException("Utviklerfeil: DynamicRuleService mangler public default constructor",
e);
}
});
specs.add(spec2);
return new SequenceSpecification<>(id, beskrivelse, specs);
}

private DynamicRuleService<V> opprettSpesifikasjon(Class<? extends DynamicRuleService<V>> spec1, V regelmodell)
throws InstantiationException, IllegalAccessException {

try {
DynamicRuleService<V> ny = spec1.getDeclaredConstructor().newInstance();
ny.setRegelmodell(regelmodell);
return ny;
} catch (IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
throw new IllegalStateException("Utviklerfeil: DynamicRuleService mangler public default constructor", e);
}

}
}
2 changes: 1 addition & 1 deletion src/main/java/no/nav/fpsak/nare/evaluation/Operator.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

public enum Operator {

AND, OR, SINGLE, NOT, COND_OR, SEQUENCE, COMPUTATIONAL_IF, FOREACH
AND, OR, SINGLE, NOT, COND_OR, SEQUENCE, COMPUTATIONAL_IF
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public boolean check(Operator op, Evaluation parent, Evaluation child) {
}

// special case, kun prosessere siste SingleEvaluation barn av SequenceEvaluation siden alle andre returnerer ja.
if (Operator.SEQUENCE.equals(parent.getOperator()) || Operator.FOREACH.equals(parent.getOperator())) {
if (Operator.SEQUENCE.equals(parent.getOperator())) {
String childRuleId = child.ruleIdentification();
String lastChildOfParentRuleId = ((AggregatedEvaluation) parent).lastChild().ruleIdentification();
return (childRuleId.equals(lastChildOfParentRuleId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ public SingleEvaluation beregnet(Map<String, Object> mellomresultater) {
return resultat;
}

/** For beregningsregel: beregnet med sluttresultat i outcome. */
public SingleEvaluation endeligBeregnet(RuleReasonRef reasonKey, Object... reasonArgs) {
return ja(reasonKey, reasonArgs);
}

@Override
public Specification<T> medBeskrivelse(String beskrivelse) {
this.beskrivelse = beskrivelse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,35 +82,16 @@ public String beskrivelse() {
@Override
public Evaluation evaluate(final T t) {
testEvaluation = testSpec.evaluate(t);
var conditionalEvaluation = Resultat.JA.equals(testEvaluation.result()) ? ifTrueSpec.evaluate(t) : doEvaluateIfFalse(t, null);
var conditionalEvaluation = Resultat.JA.equals(testEvaluation.result()) ? ifTrueSpec.evaluate(t) : doEvaluateIfFalse(t);
var evaluation = new ComputationalIfEvaluation(identifikator(), beskrivelse(), testEvaluation, conditionalEvaluation);
if (property != null) {
evaluation.setEvaluationProperty(property.getBeskrivelse(), property.getVerdi().toString());
}
return evaluation;
}

@Override
public Evaluation evaluate(final T t, ServiceArgument serviceArgument) {
if (serviceArgument == null) {
throw new IllegalArgumentException("Utviklerfeil: Forsøker evaluere ComputationalIf med argument null");
}
testEvaluation = testSpec.evaluate(t, serviceArgument);
var conditionalEvaluation = Resultat.JA.equals(testEvaluation.result()) ? ifTrueSpec.evaluate(t, serviceArgument) : doEvaluateIfFalse(t, serviceArgument);
var evaluation = new ComputationalIfEvaluation(identifikator(), beskrivelse(), testEvaluation, conditionalEvaluation);
if (property != null) {
evaluation.setEvaluationProperty(property.getBeskrivelse(), property.getVerdi().toString());
}
evaluation.setEvaluationProperty(serviceArgument.getBeskrivelse(), serviceArgument.getVerdi().toString());
return evaluation;
}

private Evaluation doEvaluateIfFalse(final T t, ServiceArgument serviceArgument) {
if (ifFalseSpec != null) {
return serviceArgument != null ? ifFalseSpec.evaluate(t, serviceArgument) : ifFalseSpec.evaluate(t);
} else {
return ja();
}
private Evaluation doEvaluateIfFalse(final T t) {
return ifFalseSpec != null ? ifFalseSpec.evaluate(t) : ja();
}

@Override
Expand All @@ -127,12 +108,6 @@ public RuleDescription ruleDescription() {
}
}

@Override
public Specification<T> medScope(ServiceArgument scope) {
this.property = scope;
return this;
}

@Override
public Specification<T> medEvaluationProperty(ServiceArgument property) {
this.property = property;
Expand Down

This file was deleted.

Loading