public ShiwaPoolEngine(Connection connection) {
    this(null, null);

    service = ShiwaClientService.getInstance();
    // TODO remove setConnection from client service
    service.setConnection(connection);
  }
  /**
   * @param id workflow ID
   * @throws RemoteException
   * @throws ServiceException
   */
  @Override
  public void kill(String id) throws java.rmi.RemoteException, javax.xml.rpc.ServiceException {

    try {
      service.cancel(id);
    } catch (org.jivesoftware.smack.XMPPException ex) {
      logger.error(ex);
    }
  }
  /**
   * @param proxy proxy filename
   * @param dn user DN
   * @return
   * @throws RemoteException
   * @throws ServiceException
   */
  @Override
  public String launch(String proxy, String dn)
      throws java.rmi.RemoteException, javax.xml.rpc.ServiceException {

    String id = null;
    try {

      File bundle = File.createTempFile("bundle-", ".zip");
      bundle.deleteOnExit();
      File workflowFile = ShiwaPoolEngine.stringToFile("workflow", ".gwendia", workflow);
      File inputFile = ShiwaPoolEngine.stringToFile("input", ".xml", input);
      BundleHelpers.createGwendiaInputBundle(
          workflowFile, inputFile, bundle.getAbsolutePath(), settings);
      id = service.submit(bundle);
    } catch (org.jivesoftware.smack.XMPPException ex) {
      logger.error(ex);
    } catch (java.io.IOException ex) {
      logger.error(ex);
    }

    return id;
  }
  @Override
  public SimulationStatus getStatus(String workflowID)
      throws java.rmi.RemoteException, javax.xml.rpc.ServiceException {

    SimulationStatus status = SimulationStatus.Unknown;
    String workflowStatus = "UNKNOWN";
    try {

      workflowStatus = service.getStatus(workflowID);
    } catch (org.jivesoftware.smack.XMPPException ex) {
      logger.error(ex);
    }

    PoolStatus poolStatus = PoolStatus.valueOf(workflowStatus);
    switch (poolStatus) {
      case FINISHED:
        return SimulationStatus.Completed;

      case CANCELLED:
      case FAILED:
      case KILLED:
        return SimulationStatus.Killed;

      case SENDING:
      case SENT:
      case LAUNCHING:
      case RUNNING:
        return SimulationStatus.Running;

      case PENDING:
      case WAITING_INSTANCE:
      case QUEUED:
        return SimulationStatus.Queued;

      default:
        return SimulationStatus.Unknown;
    }
  }