Package pl.net.bluesoft.rnd.processtool.ui.tasks

Source Code of pl.net.bluesoft.rnd.processtool.ui.tasks.TasksMainPane$MyEventListener

package pl.net.bluesoft.rnd.processtool.ui.tasks;

import com.vaadin.Application;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.event.FieldEvents;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.ui.*;
import com.vaadin.ui.Table.ColumnGenerator;
import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.bpm.BpmEvent;
import pl.net.bluesoft.rnd.processtool.bpm.ProcessToolBpmSession;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.ui.newprocess.NewProcessPane;
import pl.net.bluesoft.rnd.processtool.ui.process.ProcessDataPane;
import pl.net.bluesoft.rnd.processtool.ui.process.WindowProcessDataDisplayContext;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;
import org.aperteworkflow.util.vaadin.VaadinUtility.Refreshable;
import pl.net.bluesoft.util.eventbus.EventListener;

import java.io.Serializable;
import java.util.List;

import static org.aperteworkflow.util.vaadin.VaadinExceptionHandler.Util.withErrorHandling;
import static org.aperteworkflow.util.vaadin.VaadinUtility.horizontalLayout;
import static org.aperteworkflow.util.vaadin.VaadinUtility.refreshIcon;
import static pl.net.bluesoft.util.lang.Strings.hasText;

public class TasksMainPane extends VerticalLayout implements Refreshable {
    private I18NSource i18NSource;
    private TextField searchField = new TextField();

    private ProcessToolBpmSession session;
    private EventListener<BpmEvent> eventListener;
    private BeanItemContainer<TaskTableItem> bic;
    private Application application;
    private String filterExpression;

    public TasksMainPane(I18NSource i18NSource, ProcessToolBpmSession session, Application application) {
        this.i18NSource = i18NSource;
        this.session = session;
        this.application = application;
        initUI();
    }

    public TasksMainPane(ProcessToolBpmSession session) {
        this.session = session;
        initUI();
    }

    private void initUI() {
        addComponent(new Label(getMessage("tasks.help.short")));
        searchField.setWidth("100%");
        searchField.setTextChangeEventMode(AbstractTextField.TextChangeEventMode.LAZY);
        searchField.setTextChangeTimeout(500);
        searchField.setInputPrompt(i18NSource.getMessage("search.prompt"));
        searchField.addListener(new FieldEvents.TextChangeListener() {
            @Override
            public void textChange(FieldEvents.TextChangeEvent event) {
                filterExpression = event.getText();
                refreshData();
            }
        });
        Component rb = refreshIcon(application, this);
        HorizontalLayout hl = horizontalLayout(searchField, rb);
        hl.setMargin(new MarginInfo(false, false, true, false));
        addComponent(hl);

        Table table = getUserTasksTable();
        addComponent(table);
        addComponent(new NewProcessPane(session, i18NSource, null));

    }

    private Table getUserTasksTable() {
        final Table table = new Table();
        table.setWidth("100%");
        table.setHeight("200px");
        table.setImmediate(true); // react at once when something is selected
        table.setSelectable(true);

        bic = new BeanItemContainer<TaskTableItem>(TaskTableItem.class);
        fillTaskList(bic);
        table.setContainerDataSource(bic);
        table.addGeneratedColumn("definitionName", new ColumnGenerator() {
            @Override
            public Component generateCell(Table source, Object itemId, Object columnId) {
                TaskTableItem tti = bic.getItem(itemId).getBean();
                String definitionName = getMessage(tti.getDefinitionName());
                return new Label(definitionName, Label.CONTENT_XHTML);
            }
        });
        table.addGeneratedColumn("state", new ColumnGenerator() {
            @Override
            public Component generateCell(Table source, Object itemId, Object columnId) {
                TaskTableItem tti = bic.getItem(itemId).getBean();
                String state = getMessage(tti.getState());
                return new Label(state, Label.CONTENT_XHTML);
            }
        });
        table.setVisibleColumns(new Object[] {"definitionName", "internalId", "externalId", "state"});

        for (Object o : table.getVisibleColumns()) {
            table.setColumnHeader(o, getMessage("tasks." + o));
        }

        table.addListener(new ItemClickEvent.ItemClickListener() {
            public void itemClick(final ItemClickEvent event) {
                if (event.isDoubleClick()) {
                    withErrorHandling(getApplication(), new Runnable() {
                        public void run() {
                            BeanItem<TaskTableItem> beanItem = bic.getItem(event.getItemId());
                            TaskTableItem tti = beanItem.getBean();
                            Window w = new Window(tti.getInternalId());
                            w.setContent(new ProcessDataPane(getApplication(), session, i18NSource, tti.getTask(), new WindowProcessDataDisplayContext(w)));
                            w.center();
                            getWindow().addWindow(w);
                            w.focus();
                        }
                    });
                }
            }
        });

        if (eventListener == null) {
            session.getEventBusManager().subscribe(BpmEvent.class, eventListener = new MyEventListener());
        }

        return table;
    }

    public void refreshData() {
        bic.removeAllItems();
        fillTaskList(bic);
    }

    private void fillTaskList(BeanItemContainer<TaskTableItem> bic) {
        ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
        List<BpmTask> tasks = session.findUserTasks(0, 1000, ctx);
        for (BpmTask task : tasks) {
            TaskTableItem tti = new TaskTableItem(task);
            if (!hasText(filterExpression) || tti.matchSearchCriteria(filterExpression)) {
                bic.addBean(tti);
            }
        }
    }

    private String getMessage(String key) {
        return i18NSource.getMessage(key);
    }

    public I18NSource getI18NSource() {
        return i18NSource;
    }

    public void setI18NSource(I18NSource i18NSource) {
        this.i18NSource = i18NSource;
    }

    public TextField getSearchField() {
        return searchField;
    }

    public void setSearchField(TextField searchField) {
        this.searchField = searchField;
    }

  private class MyEventListener implements EventListener<BpmEvent>, Serializable {
    @Override
    public void onEvent(BpmEvent e) {
      if (TasksMainPane.this.isVisible() && TasksMainPane.this.getApplication() != null) {
        refreshData();
      }
    }
  }
}
TOP

Related Classes of pl.net.bluesoft.rnd.processtool.ui.tasks.TasksMainPane$MyEventListener

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.