package org.kie.server.generator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicLong; import org.jbpm.casemgmt.api.generator.CaseIdGenerator; import org.jbpm.casemgmt.api.generator.CasePrefixNotFoundException; public class CustomNumberPrefixCaseIdGenerator implements CaseIdGenerator { private static final String IDENTIFIER = "CUSTOM_NUMBER_PREFIX"; private static final String CUSTOM_PREFIX = "01234"; private static ConcurrentMap<String, AtomicLong> caseIdMap = new ConcurrentHashMap<>(); @Override public String generate(String prefix, Map<String, Object> optionalParameters) throws CasePrefixNotFoundException { if(!caseIdMap.containsKey(prefix)) { throw new CasePrefixNotFoundException("Case id prefix \"" + prefix + "\" not found."); } long nextVal = caseIdMap.get(prefix).incrementAndGet(); String paddedNumber = String.format("%05d", nextVal); return prefix + "-" + CUSTOM_PREFIX + paddedNumber; } @Override public String getIdentifier() { return IDENTIFIER; } @Override public void register(String prefix) { caseIdMap.putIfAbsent(prefix, new AtomicLong(0L)); } @Override public void unregister(String prefix) { caseIdMap.remove(prefix); } }