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);
}
}