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

Source Code of pl.net.bluesoft.rnd.processtool.ui.activity.ActivityFiltersPane

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

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 java.util.List;

import org.aperteworkflow.util.vaadin.EventHandler;
import org.aperteworkflow.util.vaadin.VaadinUtility;

import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.bpm.ProcessToolBpmSession;
import pl.net.bluesoft.rnd.processtool.dao.ProcessInstanceFilterDAO;
import pl.net.bluesoft.rnd.processtool.filters.FilterChangedEvent;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceFilter;
import pl.net.bluesoft.rnd.processtool.model.UserData;
import pl.net.bluesoft.util.eventbus.EventListener;

import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.themes.BaseTheme;

public class ActivityFiltersPane extends Panel implements VaadinUtility.Refreshable {

  private ActivityMainPane activityMainPane;
  private GridLayout filterList;

  public ActivityFiltersPane(ActivityMainPane activityMainPane) {
    this.activityMainPane = activityMainPane;
    setWidth("100%");
    setCaption(getMessage("activity.filters.title"));
    addComponent(horizontalLayout(new Label(getMessage("activity.filters.help.short"), Label.CONTENT_XHTML),
                                     refreshIcon(activityMainPane.getApplication(), this)));
    filterList = new GridLayout();
    filterList.setColumns(2);
    filterList.setMargin(true);
    filterList.setWidth(100, Sizeable.UNITS_PERCENTAGE);
    addComponent(filterList);
    refreshData();

    activityMainPane.getBpmSession().getEventBusManager().subscribe(FilterChangedEvent.class, new EventListener<FilterChangedEvent>() {
      @Override
      public void onEvent(FilterChangedEvent e) {
        if (ActivityFiltersPane.this.isVisible() && ActivityFiltersPane.this.getApplication() != null) {
          refreshData();
        }
      }
    });
  }



    @Override
  public void refreshData() {
    filterList.removeAllComponents();
    ProcessToolContext processToolContextFromThread = ProcessToolContext.Util.getThreadProcessToolContext();

    final ProcessToolBpmSession bpmSession = activityMainPane.getBpmSession();
    final UserData user = bpmSession.getUser(processToolContextFromThread);

    final ProcessInstanceFilterDAO processInstanceFilterDAO = processToolContextFromThread.getProcessInstanceFilterDAO();
    List<ProcessInstanceFilter> filters = processInstanceFilterDAO.findAllByUserData(user);

    for (final ProcessInstanceFilter filter : filters)
    {
      Button taskName = new Button(filter.getName());     
      List<BpmTask> tasks = bpmSession.findFilteredTasks(filter, processToolContextFromThread);
      taskName.setCaption(taskName.getCaption() + " (" + tasks.size() + ")");
     
      if(tasks.isEmpty())
        taskName.addStyleName("v-disabled");
     
      taskName.addStyleName(BaseTheme.BUTTON_LINK);
      taskName.addListener(new Button.ClickListener() {
        @Override
        public void buttonClick(Button.ClickEvent event) {
          withErrorHandling(getApplication(), new Runnable() {
            @Override
            public void run() {
              ProcessInstanceFilterDAO processInstanceFilterDAO =
                                    ProcessToolContext.Util.getThreadProcessToolContext().getProcessInstanceFilterDAO();
              final ProcessInstanceFilter fullFilter = processInstanceFilterDAO.fullLoadById(filter.getId());
              activityMainPane.displayFilterPane(fullFilter);
            }
          });
        }
      });

      filterList.addComponent(taskName);
      filterList.setComponentAlignment(taskName, Alignment.MIDDLE_LEFT);

      Button taskDelete = new Button(getMessage("activity.filters.delete"));
      taskDelete.setStyleName(BaseTheme.BUTTON_LINK);
      taskDelete.addListener(new Button.ClickListener() {
        @Override
        public void buttonClick(Button.ClickEvent event) {
          withErrorHandling(getApplication(), new Runnable() {
            @Override
            public void run() {

              EventHandler okHandler = new EventHandler() {
                @Override
                public void onEvent() {
                  ProcessInstanceFilterDAO processInstanceFilterDAO = ProcessToolContext.Util
                                            .getThreadProcessToolContext().getProcessInstanceFilterDAO();
                  processInstanceFilterDAO.deleteFilter(filter);
                  activityMainPane.getBpmSession().getEventBusManager().publish(new FilterChangedEvent());
                }
              };
              VaadinUtility.displayConfirmationWindow(activityMainPane.getApplication(),
                                                         activityMainPane.getI18NSource(),
                                                         getMessage("activity.filters.delete.popup.title"),
                                                         getMessage("activity.filters.delete.popup.question")
                                                                                   .replaceAll("%s", filter.getName()),
                                                         okHandler,
                                                         null
              );
            }
          });
        }
      });

      filterList.addComponent(taskDelete);
      filterList.setComponentAlignment(taskDelete, Alignment.MIDDLE_RIGHT);
    }
  }

  private String getMessage(String title) {
    return activityMainPane.getI18NSource().getMessage(title);
  }
}
TOP

Related Classes of pl.net.bluesoft.rnd.processtool.ui.activity.ActivityFiltersPane

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.