/* (non-Javadoc)
   * @see com.athena.chameleon.engine.core.analizer.Analyzer#analyze(java.io.File)
   */
  @Override
  public String analyze(File file) {
    Assert.notNull("file", "file must not be null.");
    Assert.isTrue(file.getName().endsWith(".zip"), "file name must be ends with \".zip\".");

    String newFileName = null;

    try {
      // 임시 디렉토리에 압축 해제
      String tempDir = policy.getUnzipDir() + File.separator + System.currentTimeMillis();
      ZipUtil.decompress(file.getAbsolutePath(), tempDir);

      ThreadLocalUtil.add(ChameleonConstants.ZIP_ROOT_DIR, tempDir);

      // 인코딩 변경
      converter.convert(new File(tempDir), analyzeDefinition);

      // 프로젝트 소스(zip) 입력 시 class 파일에 대한 의존성 검사를 수행하지 않는다.
      // ClasspathUtil.addPath(tempDir);

      // 압축 해제 디렉토리 내의 파일을 분석한다.
      analyze(new File(tempDir), tempDir);

      // 해당 zip 파일을 xxx-result.zip으로 재 압축한다.
      newFileName = getResultFile(file);
      ZipUtil.compress(tempDir, newFileName, ArchiveType.ZIP);

      // 임시 디렉토리를 삭제한다.
      deleteDirectory(new File(tempDir));

      ThreadLocalUtil.add(ChameleonConstants.ZIP_ROOT_DIR, null);
    } catch (Exception e) {
      logger.error("Unahandled Exception has occurred : ", e);
    }

    return newFileName;
  } // end of analyze()
  /**
   *
   *
   * <pre>
   * ibm-ejb-jar-bnd.xmi 파일에 대한 파싱 테스트
   * </pre>
   */
  @Test
  public void testIbmEjbJarBnd() {
    // 초기화
    File file = new File(this.getClass().getResource("/parser/ibm-ejb-jar-bnd.xmi").getFile());
    AnalyzeDefinition analyzeDefinition = new AnalyzeDefinition();

    PDFMetadataDefinition metadataDefinition = new PDFMetadataDefinition();
    ThreadLocalUtil.clearSharedObject();
    ThreadLocalUtil.add(ChameleonConstants.PDF_METADATA_DEFINITION, metadataDefinition);

    try {
      File jboss =
          new File(new File(this.getClass().getResource("/parser").getFile()), "jboss.xml");
      if (jboss.exists()) {
        jboss.delete();
      }

      // 테스트
      new IbmEjbJarBndXMIParser().parse(file, analyzeDefinition);

      // 검증
      List<EjbRecommend> recommendList = metadataDefinition.getEjbRecommendList();
      List<String> transFileList = metadataDefinition.getEjbTransFileList();
      assertTrue("recommendList의 크기는 2이어야 합니다.", recommendList.size() == 2);
      assertTrue("transFileList의 크기는 1이어야 합니다.", transFileList.size() == 1);
      assertTrue(
          "첫 번째 transFileList는 \"jboss.xml\"이어야 합니다.", transFileList.get(0).endsWith("jboss.xml"));

      System.err.println(recommendList.get(0).getContents());
      System.err.println(recommendList.get(1).getContents());

      // jboss.xml 파일 생섬 결과 검증
      jboss = new File(this.getClass().getResource("/parser/jboss.xml").getFile());
      assertTrue("jboss.xml 파일이 생성되어 있어야 합니다.", jboss.exists());
      jboss.delete();
    } catch (Throwable t) {
      fail("Exception이 발생하면 안됩니다.");
    }
  } // end of testIbmEjbJarBnd()