Class IdGenerator


  • public class IdGenerator
    extends java.lang.Object
    Generates strings to be used as identifiers.

    Use builder() to create an instance.

    • Field Detail

      • allowedCharacters

        private final java.util.regex.Pattern allowedCharacters
      • identityMap

        private final java.util.Map<java.lang.String,​java.lang.Integer> identityMap
      • prefix

        private final java.lang.String prefix
      • suffix

        private final java.lang.String suffix
      • defaultIdentifier

        private java.lang.String defaultIdentifier
    • Method Detail

      • builder

        public static IdGenerator.Builder builder()
        Returns:
        a new builder with default arguments
      • generateId

        public java.lang.String generateId​(java.lang.String text)

        Generate an ID based on the provided text and previously generated IDs.

        This method is not thread safe, concurrent calls can end up with non-unique identifiers.

        Note that collision can occur in the case that

        • Method called with 'X'
        • Method called with 'X' again
        • Method called with 'X-1'

        In that case, the three generated IDs will be:

        • X
        • X-1
        • X-1

        Therefore if collisions are unacceptable you should ensure that numbers are stripped from end of text.

        Parameters:
        text - Text that the identifier should be based on. Will be normalised, then used to generate the identifier.
        Returns:
        text if this is the first instance that the text has been passed to the method. Otherwise, text + "-" + X will be returned, where X is the number of times that text has previously been passed in. If text is empty, the default identifier given in the constructor will be used.
      • compileAllowedCharactersPattern

        private static java.util.regex.Pattern compileAllowedCharactersPattern()
      • normalizeText

        private java.lang.String normalizeText​(java.lang.String text)
        Assume we've been given a space separated text.
        Parameters:
        text - Text to normalize to an ID