Uploaded image for project: 'Commons Lang'
  1. Commons Lang
  2. LANG-482

Enhance StrSubstitutor to support nested ${var-${subvr}} expansion

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.0
    • Component/s: lang.text.*
    • Labels:
      None

      Description

      t would be really handy of StrSubstitutor could support nested variable interpolation:

      org.osgi.framework.system.packages=org.osgi.framework; version=1.4.0, \
      org.osgi.service.packageadmin; version=1.2.0, \
      org.osgi.service.startlevel; version=1.1.0, \
      org.osgi.service.url; version=1.0.0, \
      org.osgi.util.tracker; version=1.3.3 \
      ${jre-${java.specification.version}}

      The process being to expand innermost variable references first and work outwards - this allows for very advance config, such as the above, which can dynamically detect the Java version and expand a JRE version specific property into the property being defined.

      Looking at the implementation, it seems it might be a fairly straightforward enhancement to:

      private int substitute(StrBuilder buf, int offset, int length, List priorVariables)

      The code already has the cyclic map in place.

      I already have code that achieves this within Apache Felix, so I will see if I can retro-fit a similar model to the above and if so submit a patch.

        Attachments

        1. StrSubstitutor.java.nested.patch
          6 kB
          Rob Walker
        2. lang-482.diff
          17 kB
          Oliver Heger

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                walkerr Rob Walker
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: