Package org.drools.integration.console.forms

Source Code of org.drools.integration.console.forms.TaskFormDispatcher

package org.drools.integration.console.forms;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.activation.DataHandler;

import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.drools.SystemEventListenerFactory;
import org.drools.task.Content;
import org.drools.task.I18NText;
import org.drools.task.Task;
import org.drools.task.service.MinaTaskClient;
import org.drools.task.service.TaskClientHandler;
import org.drools.task.service.responsehandlers.BlockingGetContentResponseHandler;
import org.drools.task.service.responsehandlers.BlockingGetTaskResponseHandler;
import org.jboss.bpm.console.server.plugin.FormAuthorityRef;

/**
* @author Kris Verlaenen
*/
public class TaskFormDispatcher extends AbstractFormDispatcher {

  // TODO make this configurable
  private String ipAddress = "127.0.0.1";
  private int port = 9123;
  private MinaTaskClient client;

  public void connect() {
    if (client == null) {
      client = new MinaTaskClient(
        "org.drools.process.workitem.wsht.WSHumanTaskHandler",
                    new TaskClientHandler(SystemEventListenerFactory.getSystemEventListener()));
      NioSocketConnector connector = new NioSocketConnector();
      SocketAddress address = new InetSocketAddress(ipAddress, port);
      boolean connected = client.connect(connector, address);
      if (!connected) {
        throw new IllegalArgumentException(
          "Could not connect task client");
      }
    }
  }
 
  public DataHandler provideForm(FormAuthorityRef ref) {
    connect();
    BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
      client.getTask(new Long(ref.getReferenceId()), getTaskResponseHandler);
    Task task = getTaskResponseHandler.getTask();
    Object input = null;
    long contentId = task.getTaskData().getDocumentContentId();
    if (contentId != -1) {
      BlockingGetContentResponseHandler getContentResponseHandler = new BlockingGetContentResponseHandler();
        client.getContent(contentId, getContentResponseHandler);
        Content content = getContentResponseHandler.getContent();
        ByteArrayInputStream bis = new ByteArrayInputStream(content.getContent());
      ObjectInputStream in;
      try {
        in = new ObjectInputStream(bis);
        input = in.readObject();
        in.close();
      } catch (IOException e) {
        e.printStackTrace();
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      }
    }

    // check if a template exists
    String name = null;
    List<I18NText> names = task.getNames();
    for (I18NText text: names) {
      if ("en-UK".equals(text.getLanguage())) {
        name = text.getText();
      }
    }
    InputStream template = getTemplate(name);
    if (template == null) {
      template = TaskFormDispatcher.class.getResourceAsStream("/DefaultTask.ftl");
    }

    // merge template with process variables
    Map<String, Object> renderContext = new HashMap<String, Object>();
    renderContext.put("task", task);
    renderContext.put("content", input);
    if (input instanceof Map) {
      Map<?, ?> map = (Map) input;
      for (Map.Entry<?, ?> entry: map.entrySet()) {
        if (entry.getKey() instanceof String) {
          renderContext.put((String) entry.getKey(), entry.getValue());
        }
      }
    }
    return processTemplate(name, template, renderContext);
  }

}
TOP

Related Classes of org.drools.integration.console.forms.TaskFormDispatcher

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.