Class BambooStringUtils


  • public class BambooStringUtils
    extends Object
    • Method Detail

      • forceAlphaNumeric

        @NotNull
        public static @NotNull String forceAlphaNumeric​(@Nullable
                                                        @Nullable String str)
      • containsXssRelatedCharacters

        public static boolean containsXssRelatedCharacters​(@Nullable
                                                           @Nullable String string)
        Returns true if the supplied string contains characters that could be used to deface a page or trigger an XSS exploit (characters: "&'<>\). Should be used in addition to normal escaping of output, not instead of it.
        Parameters:
        string - string to check
        Returns:
        true if string contains unsafe characters, false otherwise
      • getFirstXssRelatedCharacter

        @NotNull
        public static @NotNull String getFirstXssRelatedCharacter​(@Nullable
                                                                  @Nullable String string)
        Retrieves first unsafe character from supplied string
        Parameters:
        string - the string to check
        Returns:
        string with the first encountered unsafe character.
      • containsRelaxedXssRelatedCharacters

        public static boolean containsRelaxedXssRelatedCharacters​(@Nullable
                                                                  @Nullable String string)
      • getFirstRelaxedXssRelatedCharacter

        @NotNull
        public static @NotNull String getFirstRelaxedXssRelatedCharacter​(@Nullable
                                                                         @Nullable String string)
      • containsShellInjectionRelatedCharacters

        public static boolean containsShellInjectionRelatedCharacters​(@Nullable
                                                                      @Nullable String string)
      • getFirstShellInjectionRelatedCharacters

        public static String getFirstShellInjectionRelatedCharacters​(@Nullable
                                                                     @Nullable String string)
      • containsRelatedCharacters

        @Deprecated
        public static boolean containsRelatedCharacters​(@Nullable
                                                        @Nullable String string,
                                                        @NotNull
                                                        @org.jetbrains.annotations.NotNull char[] characters)
        Deprecated.
        since 5.15 please use BambooStringUtils.containsRelatedCharacters(java.lang.String, char[])
      • getFirstRelatedCharacter

        @NotNull
        public static @NotNull String getFirstRelatedCharacter​(@Nullable
                                                               @Nullable String string,
                                                               @NotNull
                                                               @org.jetbrains.annotations.NotNull char[] characters)
      • forceValidHtmlId

        @NotNull
        public static @NotNull String forceValidHtmlId​(@NotNull
                                                       @NotNull String id)
        According to the HTML standard, ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). This method replaces all invalid characters in the supplied id with an underscore. It does not enforce the "must begin with a letter" rule. There are two functions that do it, one in FreeMarker functions.ftl and one in BambooStringUtils. They MUST be kept in sync.
      • lineIterator

        public static Iterable<String> lineIterator​(String string)
        Returns:
        an iterable that makes it possible to iterate over lines with Windows or Unix endings
      • lineStream

        public static Stream<String> lineStream​(String input)
        Returns:
        an iterable that makes it possible to iterate over lines with Windows or Unix endings
      • indexOf

        public static int indexOf​(String haystack,
                                  String needle,
                                  int n)
        Returns n-th occurence of string (index is 0-based)
        Parameters:
        haystack - search here
        needle - search for
        n - n-the cocurence to return
        Returns:
        -1 if not found, else the index
      • indexOfRegex

        public static int indexOfRegex​(String haystack,
                                       String needle,
                                       int occurence)
        Returns n-th occurence of regex (index is 0-based)
        Parameters:
        haystack - search here
        needle - search for
        occurence - n-the occurence to return
        Returns:
        -1 if not found, else the index
      • startsWithAny

        public static boolean startsWithAny​(String string,
                                            Collection<String> searchStrings)
        See Also:
        StringUtils.startsWithAny(CharSequence, CharSequence...)
      • nullIfBlank

        @Nullable
        public static @Nullable String nullIfBlank​(@Nullable
                                                   @Nullable String string)
      • encodeHtmlWithTagWhiteList

        public static String encodeHtmlWithTagWhiteList​(String string)
        Escapes string but preserves few defined tags. Allows some html formatting inside strings while preventing XSS. Allowed tags are: <br /> <i> <b> <p> <div> <a> <strong> . Properties are not allowed except 'href' in anchor tag.
        Parameters:
        string -
        Returns:
        html escaped string with white listed tags preserved
      • unquote

        @NotNull
        public static @NotNull String unquote​(@NotNull
                                              @NotNull String quotedVarValue,
                                              boolean processBackslashes)
        Removes quotes from variable using shell rules.
        Parameters:
        quotedVarValue -
        processBackslashes - whether backslash should be treated as a special character or not
        Returns:
      • in

        public static boolean in​(String needle,
                                 String... haystacks)
      • remove

        @NotNull
        public static @NotNull String remove​(@NotNull
                                             @NotNull String quotedVarValue,
                                             int index)
        Removes a character at specified index from string
        Parameters:
        quotedVarValue -
        index -
        Returns:
      • truncateAndAddEllipsis

        @Nullable
        public static @Nullable String truncateAndAddEllipsis​(@Nullable
                                                              @Nullable String string,
                                                              int maxLength)
        Truncates a string to specified length. If truncation causes actual information loss an ellipsis is appended to the end of the string.
        Parameters:
        string - string
        maxLength - maximum length of the string
        Returns:
        truncated string
      • truncateAndAddEllipsisToLengthInBytes

        @Nullable
        public static @Nullable String truncateAndAddEllipsisToLengthInBytes​(@Nullable
                                                                             @Nullable String string,
                                                                             int maxBytes)
      • stripFullyEnclosingQuotes

        public static String stripFullyEnclosingQuotes​(String input)
      • replaceAll

        public static com.google.common.base.Function<String,​String> replaceAll​(Pattern pattern,
                                                                                      String replacement)
      • replaceAll

        public static com.google.common.base.Function<String,​String> replaceAll​(String regex,
                                                                                      String replacement)
      • dos2unix

        @NotNull
        public static @NotNull String dos2unix​(@NotNull
                                               @NotNull String s)
        Changes Dos-style line endings to Unix style line endings
      • toCamelCase

        public static String toCamelCase​(@NotNull
                                         @NotNull String string,
                                         char separator)
        Returns the string in camel case. Com.atlassian.bamboo.somePlugin becomes comAtlassianBambooSomePlugin
        Parameters:
        string -
        separator -
        Returns:
      • toCommandLineString

        public static String toCommandLineString​(@NotNull
                                                 @NotNull Iterable<String> commandArgs)
        Joins supplied argument into a valid command line, wrapping arguments in single quotes if needed.
      • formatTemplate

        public static String formatTemplate​(String urlTemplate,
                                            Map<String,​String> variableValues)
        Expands variable references in urlTemplate with variableValues.

        The variable references look like "${foo}" and will be replaced with the value matching the that key from variableValues. The names may not contain '}' characters but are otherwise unconstrained. Variables which do not have associated values in the request are unmodified.

        Parameters:
        urlTemplate - the template to expand.
        variableValues - the variable values to use when expanding the template
        Returns:
        the template expanded as detailed above.
      • enumSetToString

        public static String enumSetToString​(@NotNull
                                             @NotNull Set<? extends Enum> enumSet)
        Converts collection of enums to comma delimited string
      • preventInlining

        @Deprecated
        public static String preventInlining​(String constant)
        This is to prevent inlining. Please see https://hello.atlassian.net/wiki/x/XoctDQ for details.
        Parameters:
        constant - The constant to return.
        Returns:
        the given constant.
      • firstNotBlank

        @Nullable
        public static @Nullable String firstNotBlank​(String... strings)
        Returns first String from the array which is not blank (so it is neither whitespace, empty nor null). If all strings are blank, null is returned.
        Parameters:
        strings - array of strings
        Returns:
        the first not blank string from the array or null, if all strings are blank
      • isMixedCase

        public static boolean isMixedCase​(@NotNull
                                          @NotNull String value)
        Returns true if the passed String contains both uppercase and lowercase characters. Character.isUpperCase(int) and Character.isLowerCase(int) methods are used to determine character case.
        Parameters:
        value - a string to test
        Returns:
        true if the passed string is mixed case (has both uppercase and lowercase characters)
      • smartContains

        public static boolean smartContains​(@Nullable
                                            @Nullable String haystack,
                                            @Nullable
                                            @Nullable String needle)
        Checks if needle exists in the haystack. If needle is lowercase, ignores case, otherwise it's case sensitive.