Skip to content

Commit

Permalink
Use Optional instead of custom Validator wrapper methods
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeEdgar committed Jan 24, 2021
1 parent 21d9b70 commit 57682d1
Showing 1 changed file with 16 additions and 29 deletions.
45 changes: 16 additions & 29 deletions src/main/java/io/xlate/edi/internal/stream/StaEDIStreamWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.logging.Logger;

Expand Down Expand Up @@ -293,9 +293,17 @@ public Map<String, Character> getDelimiters() {
return delimiters;
}

private Validator validator() {
private Optional<Validator> validator() {
Validator validator;

// Do not use the transactionValidator in the period where it may be set/mutated by the user
return transaction && !transactionSchemaAllowed ? transactionValidator : controlValidator;
if (transaction && !transactionSchemaAllowed) {
validator = transactionValidator;
} else {
validator = controlValidator;
}

return Optional.ofNullable(validator);
}

private void write(int output) throws EDIStreamException {
Expand Down Expand Up @@ -833,7 +841,7 @@ public boolean elementData(char[] text, int start, int length) {
elementHolder.set(text, start, length);
dialect.elementData(elementHolder, location);

withValidator(validator -> {
validator().ifPresent(validator -> {
if (!validator.validateElement(dialect, location, elementHolder, null)) {
reportElementErrors(validator, elementHolder);
}
Expand Down Expand Up @@ -898,7 +906,7 @@ public void segmentError(CharSequence token, EDIReference typeReference, EDIStre
}

private void validate(Consumer<Validator> command) {
withValidator(validator -> {
validator().ifPresent(validator -> {
errors.clear();
command.accept(validator);

Expand All @@ -909,7 +917,7 @@ private void validate(Consumer<Validator> command) {
}

private void validateCompositeOccurrence() {
withValidator(validator -> {
validator().ifPresent(validator -> {
errors.clear();

if (!validator.validCompositeOccurrences(dialect, location)) {
Expand All @@ -923,7 +931,7 @@ private void validateCompositeOccurrence() {
}

private CharSequence validateElement(Runnable setupCommand, CharSequence data) {
return withValidator(validator -> {
return validator().map(validator -> {
CharSequence elementData;

if (this.formatElements) {
Expand All @@ -947,28 +955,7 @@ private CharSequence validateElement(Runnable setupCommand, CharSequence data) {

dialect.elementData(elementData, location);
return elementData;
}, () -> data);
}

void withValidator(Consumer<Validator> process) {
final Validator validator = validator();

if (validator != null) {
process.accept(validator);
}
}

<T> T withValidator(Function<Validator, T> process, Supplier<T> unvalidatedResult) {
final Validator validator = validator();
final T result;

if (validator != null) {
result = process.apply(validator);
} else {
result = unvalidatedResult.get();
}

return result;
}).orElse(data);
}

void reportElementErrors(Validator validator, CharSequence data) {
Expand Down

0 comments on commit 57682d1

Please sign in to comment.