TimelineReaderUtils { static String joinAndEscapeStrings(final String[] strs, final char delimiterChar, final char escapeChar) { int len = strs.length; for (int index = 0; index < len; index++) { if (strs[index] == null) { return null; } strs[index] = escapeString(strs[index], delimiterChar, escapeChar); } return StringUtils.join(strs, delimiterChar); } private  TimelineReaderUtils(); static List<String> split(final String str); static String joinAndEscapeStrings(final String[] strs); @VisibleForTesting
  static final char DEFAULT_DELIMITER_CHAR; @VisibleForTesting
  static final char DEFAULT_ESCAPE_CHAR; static final String FROMID_KEY; @VisibleForTesting
  static final String UID_KEY; }
@Test public void testJoinAndEscapeStrings() throws Exception { assertEquals("*!cluster!*!b**o***!xer!oozie**", TimelineReaderUtils.joinAndEscapeStrings( new String[] {"!cluster", "!b*o*!xer", "oozie*"}, '!', '*')); assertEquals("*!cluster!*!b**o***!xer!!", TimelineReaderUtils.joinAndEscapeStrings( new String[] {"!cluster", "!b*o*!xer", "", ""}, '!', '*')); assertNull(TimelineReaderUtils.joinAndEscapeStrings( new String[] {"!cluster", "!b*o*!xer", null, ""}, '!', '*')); }