@Test
  public void testDetermineFileGroupIdentifierToFileGroupMap() throws Exception {
    //
    String base = getBase();
    List<File> fileList = new ArrayList<File>();
    fileList.add(new File("C:\\temp\\admin_de_DE.properties"));
    fileList.add(new File("C:\\temp\\admin_en_US.properties"));
    fileList.add(new File("C:\\temp\\article_de_DE.properties"));
    fileList.add(new File("C:\\temp\\article_en_US.properties"));
    fileList.add(new File("C:\\temp\\article_de.properties"));
    fileList.add(new File("C:\\temp\\article_en.properties"));

    //
    FileGrouper fileGrouper = new FileGrouper();
    try {
      fileGrouper.addAllFiles(fileList);
      fileGrouper.setGroupingPatternReplacementToken("{locale}");
      fileGrouper.setGroupingPatternString("(.*?_(\\w{2,3}_\\w{2,3}|\\w{2,3})|.*())\\.\\w*");
      fileGrouper.setGroupingPatternGroupingGroupIndexList(Arrays.asList(2, 3));
    } catch (Exception e) {
      e.printStackTrace();
      Assert.fail();
    }

    //
    Map<String, FileGroup> fileGroupIdentifierToFileGroupMap =
        fileGrouper.determineFileGroupIdentifierToFileGroupMap();

    //
    assertEquals(2, fileGroupIdentifierToFileGroupMap.size());
    Set<String> fileGroupIdentifierSet = fileGroupIdentifierToFileGroupMap.keySet();
    assertTrue(fileGroupIdentifierSet.contains(base + "C:\\temp\\admin_{locale}.properties"));
    assertTrue(fileGroupIdentifierSet.contains(base + "C:\\temp\\article_{locale}.properties"));

    //
    {
      //
      FileGroup fileGroup =
          fileGroupIdentifierToFileGroupMap.get(base + "C:\\temp\\admin_{locale}.properties");

      //
      Map<String, File> groupTokenToFileMap = fileGroup.getGroupTokenToFileMap();
      assertEquals(2, groupTokenToFileMap.size());
      assertTrue(groupTokenToFileMap.containsKey("de_DE"));
      assertTrue(groupTokenToFileMap.containsKey("en_US"));
    }
    {
      //
      FileGroup fileGroup =
          fileGroupIdentifierToFileGroupMap.get(base + "C:\\temp\\article_{locale}.properties");

      //
      Map<String, File> groupTokenToFileMap = fileGroup.getGroupTokenToFileMap();
      assertEquals(4, groupTokenToFileMap.size());
      assertTrue(groupTokenToFileMap.containsKey("de_DE"));
      assertTrue(groupTokenToFileMap.containsKey("en_US"));
      assertTrue(groupTokenToFileMap.containsKey("de"));
      assertTrue(groupTokenToFileMap.containsKey("en"));
    }
  }
 @Override
 public String getGroupName(FileGroup fileGroup) {
   return fileGroup.getUpdateName();
 }
 @Override
 public String getGroupName(FileGroup fileGroup) {
   return fileGroup.getStatusName();
 }