static public int extractZipToFolder(File pZipFile, File pDestinationDirectory) 
  throws ZipException, IOException {
    
    if(!pDestinationDirectory.isDirectory()){
      throw new ExInternal(pDestinationDirectory.getAbsolutePath() + " is not a valid directory");
    }
    
    ZipFile lZipFile = new ZipFile(pZipFile);    
    Enumeration<? extends ZipEntry> lZipFileEntries = lZipFile.entries();
    
    int lFileCount = 0;

    // Process each entry
    while(lZipFileEntries.hasMoreElements()) {
      
      // grab a zip file entry
      ZipEntry lEntry = lZipFileEntries.nextElement();
      String lCurrentEntry = lEntry.getName();        
      File lDestFile = new File(pDestinationDirectory, lCurrentEntry);      
      File lDestinationParent = lDestFile.getParentFile();

      // create the parent directory structure if needed
      lDestinationParent.mkdirs();

      if(!lEntry.isDirectory()) {
        lFileCount++;
        InputStream lInput = lZipFile.getInputStream(lEntry);
        FileOutputStream lOutput =  new FileOutputStream(lDestFile);
        IOUtils.copy(lInput, lOutput);
        lInput.close();
        lOutput.flush();
        lOutput.close();
      }
    }
    
    return lFileCount;
  }