code: public void process() {
      if (src == null && dest == null) {
        throw new IllegalArgumentException("Source and destination shouldn't be null together");
      }
  
      File destinationFile = null;
      try {
        destinationFile = getDestinationFile();
        ZipOutputStream out = null;
        ZipEntryOrInfoAdapter zipEntryAdapter = null;
  
        if (destinationFile.isFile()) {
          out = ZipFileUtil.createZipOutputStream(new BufferedOutputStream(new FileOutputStream(destinationFile)), charset);
          zipEntryAdapter = new ZipEntryOrInfoAdapter(new CopyingCallback(transformers, out, preserveTimestamps), null);
        }
        else { // directory
          zipEntryAdapter = new ZipEntryOrInfoAdapter(new UnpackingCallback(transformers, destinationFile), null);
        }
        try {
          processAllEntries(zipEntryAdapter);
        }
        finally {
          IOUtils.closeQuietly(out);
        }
          handleInPlaceActions(destinationFile);
      }
      catch (IOException e) {
        ZipExceptionUtil.rethrow(e);
      }
      finally {
        if (isInPlace()) {
          // destinationZip is a temporary file
          FileUtils.deleteQuietly(destinationFile);
        }
      }
    }
docs: Iterates through source Zip entries removing or changing them according to
  set parameters.