package com.l7tech.server.audit;

import com.l7tech.common.io.DigestZipOutputStream;
import com.l7tech.objectmodel.Goid;
import java.io.IOException;
import java.io.OutputStream;
import java.security.PrivateKey;
import java.security.SignatureException;
import java.security.cert.X509Certificate;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public interface AuditExporter {
   @Transactional(propagation = Propagation.SUPPORTS)
   long getHighestTime();

   @Transactional(propagation = Propagation.SUPPORTS)
   long getNumExportedSoFar();

   @Transactional(propagation = Propagation.SUPPORTS)
   long getApproxNumToExport();

   @Transactional(propagation = Propagation.REQUIRED, readOnly = true)
   void exportAuditsAsZipFile(long var1, long var3, Goid[] var5, OutputStream var6, X509Certificate var7, PrivateKey var8) throws IOException, SQLException, HibernateException, SignatureException, InterruptedException;

   DigestZipOutputStream newAuditExportOutputStream(OutputStream var1) throws IOException;

   @Transactional(propagation = Propagation.REQUIRED, readOnly = true)
   AuditExporter.ExportedInfo exportAudits(long var1, long var3, DigestZipOutputStream var5, long var6, AuditExporter.ExportedInfo var8) throws IOException, SQLException, InterruptedException;

   void addXmlSignature(DigestZipOutputStream var1, AuditExporter.ExportedInfo var2, X509Certificate var3, PrivateKey var4) throws SignatureException;

   interface ExportedInfo {
      long getEarliestTime();

      long getLatestTime();

      boolean hasTransferredFullRange();

      long getTransferredBytes();

      long getReceivedBytes();

      long getRecordsExported();

      long getExportStartTime();

      long getExportEndTime();
   }
}
