Package net.sf.jhylafax

Source Code of net.sf.jhylafax.JobHelper

package net.sf.jhylafax;

import static net.sf.jhylafax.JHylaFAX.i18n;
import gnu.hylafax.HylaFAXClient;
import gnu.inet.ftp.ServerResponseException;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import net.sf.jhylafax.fax.Document;
import net.sf.jhylafax.fax.FaxJob;
import net.sf.jhylafax.fax.HylaFAXClientHelper;
import net.sf.jhylafax.fax.ReceivedFax;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xnap.commons.io.Job;
import org.xnap.commons.io.ProgressMonitor;
import org.xnap.commons.io.UserAbortException;

public class JobHelper {
 
  private final static Log logger = LogFactory.getLog(JobHelper.class);
 
  static void retryJob(final int jobID) {
    Job<?> ioJob = new Job() {
      public Object run(ProgressMonitor monitor) throws Exception
      {
        monitor.setTotalSteps(3);
       
        HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
        monitor.work(1);

        monitor.setText(i18n.tr("Retrying job"));
        gnu.hylafax.Job editJob = client.getJob(jobID);
        client.suspend(editJob);
        editJob.setProperty("SENDTIME", "NOW");
        monitor.work(1);
       
        client.submit(editJob);
        monitor.work(1);

        return null;
      }
    };
   
    try {
      JHylaFAX.getInstance().runJob(ioJob);
      JHylaFAX.getInstance().updateTables();
    }
    catch (UserAbortException e) {
    }
    catch (Exception e) {
      logger.debug("Error retrying job", e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not retry job"), e);
    }
  }

  static void resumeJob(final int jobID) {
    Job<?> ioJob = new Job() {
      public Object run(ProgressMonitor monitor) throws Exception
      {
        monitor.setTotalSteps(2);
       
        HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
        monitor.work(1);

        monitor.setText(i18n.tr("Resuming job"));
        gnu.hylafax.Job editJob = client.getJob(jobID);
        client.submit(editJob);
        monitor.work(1);

        return null;
      }
    };
   
    try {
      JHylaFAX.getInstance().runJob(ioJob);
      JHylaFAX.getInstance().updateTables();
    }
    catch (UserAbortException e) {
    }
    catch (Exception e) {
      logger.debug("Error resuming job", e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not resume job"), e);
    }
  }

  static FileStat[] retrieveJobFilenames(final int jobID) {
    Job<FileStat[]> ioJob = new Job<FileStat[]>() {
      public FileStat[] run(ProgressMonitor monitor) throws Exception
      {
        monitor.setTotalSteps(2);
       
        HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
        monitor.work(1);

        monitor.setText(i18n.tr("Getting document filenames"));
        gnu.hylafax.Job editJob = client.getJob(jobID);
        String[] filenames = editJob.getDocumentName().split("\n");
       
        List<FileStat> results = new ArrayList<FileStat>(filenames.length);
        for (int i = 0; i < filenames.length; i++) {
          StringTokenizer t = new StringTokenizer(filenames[i]);
          String filetype = t.nextToken();
          if (t.hasMoreTokens() &&
              ("PS".equalsIgnoreCase(filetype) || "PDF".equalsIgnoreCase(filetype))) {
            String filename = t.nextToken();
            try {
              long filesize = client.size(filename);
              results.add(new FileStat(filename, filesize));
            }
            catch (FileNotFoundException e) {
            }
          }
        }
        monitor.work(1);

        return results.toArray(new FileStat[0]);
      }
    };
   
    try {
      return JHylaFAX.getInstance().runJob(ioJob);
    }
    catch (UserAbortException e) {
    }
    catch (Exception e) {
      logger.debug("Error getting job documents", e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not get filenames"), e);
    }
    return null;
  }

  static boolean delete(final String filename) {
    Job<?> ioJob = new Job() {
      public Object run(ProgressMonitor monitor) throws Exception
      {
        monitor.setTotalSteps(2);
        monitor.setText(i18n.tr("Deleting file"));
        HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
        monitor.work(1);
        client.dele(filename);
        monitor.work(1);
        return null;
      }
    };
   
    try {
      JHylaFAX.getInstance().runJob(ioJob);
      JHylaFAX.getInstance().updateTables();
    }
    catch (UserAbortException e) {
      return false;
    }
    catch (Exception e) {
      logger.debug("Error deleting file " + filename, e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not delete file"), e);
      return false;
    }
    return true;
  }

  static boolean save(final File file, final String filename, final long size) {
    Job<?> ioJob = new Job() {
      public Object run(ProgressMonitor monitor) throws Exception
      {
        monitor.setTotalSteps(12);
       
        HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
        monitor.work(1);
       
        monitor.setText(i18n.tr("Setting mode"));
        client.mode(HylaFAXClient.MODE_STREAM);
        client.type(HylaFAXClient.TYPE_IMAGE);
        monitor.work(1);

        monitor.setText(i18n.tr("Downloading file"));
        TransferMonitor transferMonitor = new TransferMonitor(monitor, 10, size);
        OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
        try {
          client.addTransferListener(transferMonitor);
          client.get(filename, out);
        }
        finally {
          transferMonitor.transferCompleted();
          client.removeTransferListener(transferMonitor);
          out.close();
        }
        // check if monitor was cancelled
        monitor.work(0);
        return null;
      }
    };
   
    try {
      JHylaFAX.getInstance().runJob(ioJob);
    }
    catch (UserAbortException e) {
      return false;
    }
    catch (Exception e) {
      logger.debug("Error getting file " + filename, e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not download file"), e);
      return false;
    }
    return true;
  }

  static void removeJob(final int jobID) {
    Job<?> ioJob = new Job() {
      public Object run(ProgressMonitor monitor) throws Exception
      {
        monitor.setTotalSteps(2);
       
        HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
        monitor.work(1);

        monitor.setText(i18n.tr("Removing job"));
        gnu.hylafax.Job editJob = client.getJob(jobID);
        client.kill(editJob);
        monitor.work(1);

        return null;
      }
    };
   
    try {
      JHylaFAX.getInstance().runJob(ioJob);
      JHylaFAX.getInstance().updateTables();
    }
    catch (UserAbortException e) {
    }
    catch (Exception e) {
      logger.debug("Error killing job", e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not remove job"), e);
    }
  }

  static void suspendJob(final int jobID) {
    Job<?> ioJob = new Job() {
      public Object run(ProgressMonitor monitor) throws Exception
      {
        monitor.setTotalSteps(2);
       
        HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
        monitor.work(1);

        monitor.setText(i18n.tr("Suspending job"));
        gnu.hylafax.Job editJob = client.getJob(jobID);
        client.suspend(editJob);
        monitor.work(1);

        return null;
      }
    };
   
    try {
      JHylaFAX.getInstance().runJob(ioJob);
      JHylaFAX.getInstance().updateTables();
    }
    catch (UserAbortException e) {
    }
    catch (Exception e) {
      logger.debug("Error suspending job", e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not suspend job"), e);
    }
  }

  public static class FileStat {

    public String filename;
    public long filesize;

    public FileStat(String filename, long filesize)
    {
      this.filename = filename;
      this.filesize = filesize;
    }
   
  }

  public static StatusResponse updateStatus()
  {
    Job<StatusResponse> ioJob = new StatusUpdateJob();
    try {
      return JHylaFAX.getInstance().runJob(ioJob);
    }
    catch (UserAbortException e) {
    }
    catch (Exception e) {
      logger.debug("Error updating status", e);
      JHylaFAX.getInstance().showError(i18n.tr("Could not get status"), e);
    }
    return null;
  }

  public static class StatusResponse {
    String status;
    String verboseStatus;
    List<ReceivedFax> recvq;
    List<FaxJob> sendq;
    List<FaxJob> pollq;
    List<FaxJob> doneq;
    List<Document> docq;
  }

  public static class StatusUpdateJob implements Job<StatusResponse> {
    @SuppressWarnings("unchecked")
    public StatusResponse run(ProgressMonitor monitor) throws Exception {       
      monitor.setTotalSteps(1 + 1 + 5 /* connection + status + queues*/);
     
      HylaFAXClient client = JHylaFAX.getInstance().getConnection(monitor);
      monitor.work(1);
     
      StatusResponse response = new StatusResponse();
     
      monitor.setText(i18n.tr("Getting Status"));
      List<String> lines = client.getList("status");
      StringBuffer sb = new StringBuffer();
      for (Iterator<String> it = lines.iterator(); it.hasNext();) {
        String line = it.next();
        if (response.status == null) {
          response.status = line;
        }
        sb.append(line + "\n");
      }
      response.verboseStatus = sb.toString();
      monitor.work(1);
     
      client.jobfmt(HylaFAXClientHelper.JOBFMT);
      client.rcvfmt(HylaFAXClientHelper.RCVFMT);
      client.filefmt(HylaFAXClientHelper.FILEFMT);
     
      response.recvq = getQueue(monitor, client, "recvq", ReceivedFax.class);
      response.sendq = getQueue(monitor, client, "sendq", FaxJob.class);
      response.pollq = getQueue(monitor, client, "pollq", FaxJob.class);
      response.doneq = getQueue(monitor, client, "doneq", FaxJob.class);
      response.docq = getQueue(monitor, client, "docq", Document.class);
     
      return response;
    }       
   
    @SuppressWarnings("unchecked")
    private <T> List<T> getQueue(ProgressMonitor monitor, HylaFAXClient client, String name, Class<T> clazz)
    throws IOException, ServerResponseException {
      monitor.setText(i18n.tr("Getting {0}", name));
      List<T> result = new ArrayList<T>();
      List<String> lines = client.getList(name);
      for (String line : lines) {
        Object o = HylaFAXClientHelper.parseFmt(line);
        if (o != null && clazz.isAssignableFrom(o.getClass())) {
          result.add((T)o);
        }
      }
      monitor.work(1);       
      return result;
    }
   
  }
 
}
TOP

Related Classes of net.sf.jhylafax.JobHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.