code: @Override
      protected String doBackward(final String flat) {
          log.debug("Converting incoming identifier: {}", flat);
          final List<String> hierarchySegments = createHierarchySegments();
          final List<String> flatSegments = asList(flat.split(separator));
          List<String> firstSegments = emptyList();
          List<String> lastSegment = emptyList();
          if (flatSegments.size() == 0) {
              // either empty identifier or separator identifier
              return on(separator).join(hierarchySegments);
          }
          if (flatSegments.size() > 1) {
              lastSegment = singletonList(getLast(flatSegments));
              firstSegments = flatSegments.subList(0, flatSegments.size() - 1);
          } else {
              // just one segment
              lastSegment = singletonList(flatSegments.get(0));
          }
          final Iterable<String> allSegments = concat(firstSegments, hierarchySegments, lastSegment);
  
          return on(separator).join(allSegments);
      }
docs: /*
  (non-Javadoc)
  @see com.google.common.base.Converter#doBackward(java.lang.Object)