diff --git a/gsrs-module-substance-example/src/test/java/example/substance/processor/UniqueCodeGeneratorTest.java b/gsrs-module-substance-example/src/test/java/example/substance/processor/UniqueCodeGeneratorTest.java index 4a05ae9b..ace2a77f 100644 --- a/gsrs-module-substance-example/src/test/java/example/substance/processor/UniqueCodeGeneratorTest.java +++ b/gsrs-module-substance-example/src/test/java/example/substance/processor/UniqueCodeGeneratorTest.java @@ -183,7 +183,8 @@ public void testSeqGenCheckDefaults() { CodeSequentialGenerator codeGenerator = new CodeSequentialGenerator(seqGenName, length, suffix, padding, max, codeSystem, null); ProteinSubstance substance = getSubstanceFromFile("YYD6UT8T47"); AutowireHelper.getInstance().autowire(codeGenerator); - assertEquals(codeGenerator.getMax(), codeGenerator.DEFAULT_MAX); + assertEquals(codeGenerator.getMax(), (Long) Long.MAX_VALUE); + assertEquals(codeGenerator.getLen(),String.valueOf(codeGenerator.getMax()).length()+codeGenerator.getSuffix().length()); } diff --git a/gsrs-module-substances-core/src/main/java/gsrs/module/substance/processors/UniqueCodeGenerator.java b/gsrs-module-substances-core/src/main/java/gsrs/module/substance/processors/UniqueCodeGenerator.java index 2b02ce12..6256f2a7 100644 --- a/gsrs-module-substances-core/src/main/java/gsrs/module/substance/processors/UniqueCodeGenerator.java +++ b/gsrs-module-substances-core/src/main/java/gsrs/module/substance/processors/UniqueCodeGenerator.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -37,8 +38,8 @@ public UniqueCodeGenerator(Map with) { log.trace("UniqueCodeGenerator constructor with Map"); String name = (String) with.get("name"); codeSystem = (String) with.get("codesystem"); - String codeSystemSuffix = (String) with.get("suffix"); - int length = (Integer) with.get("length"); + String codeSystemSuffix = (String) with.getOrDefault("suffix", ""); + int length = (int) with.getOrDefault("length", 0); boolean padding = (Boolean) with.get("padding"); Boolean useLegacy = (Boolean) with.get("useLegacy"); Map groups = (Map) with.get("groups"); @@ -46,7 +47,8 @@ public UniqueCodeGenerator(Map with) { try { maxValue = Long.parseLong(String.valueOf(with.get("max"))); } catch (Exception e) { - maxValue = Long.MAX_VALUE; + int counterLen = length - codeSystemSuffix.length(); + maxValue = counterLen < 1 ? Long.MAX_VALUE : Long.valueOf(String.join("", Collections.nCopies(counterLen, "9"))); } final Long max = maxValue; String msg = String.format("codeSystem: %s; codeSystemSuffix: %s; length: %d; padding: %b, max: %d", diff --git a/gsrs-module-substances-core/src/main/java/ix/ginas/utils/CodeSequentialGenerator.java b/gsrs-module-substances-core/src/main/java/ix/ginas/utils/CodeSequentialGenerator.java index 61aa5d82..ad000a3f 100644 --- a/gsrs-module-substances-core/src/main/java/ix/ginas/utils/CodeSequentialGenerator.java +++ b/gsrs-module-substances-core/src/main/java/ix/ginas/utils/CodeSequentialGenerator.java @@ -13,6 +13,7 @@ import ix.ginas.models.v1.Substance; import lombok.extern.slf4j.Slf4j; +import java.util.Collections; import java.util.Map; import java.util.Objects; /* @@ -49,8 +50,6 @@ @Component public class CodeSequentialGenerator extends SequentialNumericIDGenerator { - public static final Long DEFAULT_MAX = Long.MAX_VALUE; - @Autowired private CodeRepository codeRepository; @@ -88,10 +87,12 @@ public CodeSequentialGenerator( @JsonProperty("name") String name, @JsonProperty("groups") Map groups) { super(len, suffix, padding); - if(max==null) { max=DEFAULT_MAX; } - - this.max = max; if(suffix==null) { this.suffix= "";} + if(max==null) { + int counterLen = len - this.suffix.length(); + max = counterLen < 1 ? Long.MAX_VALUE : Long.valueOf(String.join("", Collections.nCopies(counterLen, "9"))); + } + this.max = max; this.groups = (groups != null) ? groups.values().stream().toArray(String[]::new) : null; if(!this.getClass().equals(LegacyCodeSequentialGenerator.class)) { // Legacy could be an extension of this class, and if so these checks aren't appropriate.