docs: public synchronized Set<String> getGroupIds( String parentGroupId )
      {
          Set<String> result = new TreeSet<String>();
          if ( StringUtils.isEmpty( parentGroupId ) )
          {
              for ( String groupId : contents.keySet() )
              {
                  int index = groupId.indexOf( '.' );
                  result.add( index == -1 ? groupId : groupId.substring( 0, index ) );
              }
          }
          else
          {
              String prefix = parentGroupId + '.';
              int start = prefix.length();
              for ( String groupId : contents.keySet() )
              {
                  if ( groupId.startsWith( prefix ) )
                  {
                      int index = groupId.indexOf( '.', start );
                      result.add( index == -1 ? groupId.substring( start ) : groupId.substring( start, index ) );
                  }
              }
          }
          return result;
      }