package pl.net.bluesoft.rnd.processtool.ui.newprocess; import com.vaadin.data.util.BeanItemContainer; import com.vaadin.ui.*; import pl.net.bluesoft.rnd.processtool.ProcessToolContext; import pl.net.bluesoft.rnd.processtool.bpm.ProcessToolBpmSession; import pl.net.bluesoft.rnd.processtool.model.BpmTask; import pl.net.bluesoft.rnd.processtool.model.ProcessInstance; import pl.net.bluesoft.rnd.processtool.model.config.ProcessDefinitionConfig; import pl.net.bluesoft.rnd.processtool.ui.activity.ActivityMainPane; 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 java.util.List; import static org.aperteworkflow.util.vaadin.VaadinExceptionHandler.Util.withErrorHandling; /** * @author tlipski@bluesoft.net.pl */ public class NewProcessPane extends VerticalLayout { private ProcessToolBpmSession session; private I18NSource i18NSource; private ActivityMainPane activityMainPane; public NewProcessPane(final ProcessToolBpmSession session, final I18NSource i18NSource, final ActivityMainPane activityMainPane) { this.activityMainPane = activityMainPane; this.session = session; this.i18NSource = i18NSource; BeanItemContainer<ProcessDefinitionConfig> bic = new BeanItemContainer<ProcessDefinitionConfig>(ProcessDefinitionConfig.class); final ComboBox l = new ComboBox(getMessage("tasks.processType"), bic); ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext(); for (ProcessDefinitionConfig cfg : session.getAvailableConfigurations(ctx)) { bic.addItem(cfg); l.setItemCaption(cfg, getMessage(cfg.getDescription())); } if (bic.size() != 0) { l.setValue(bic.firstItemId()); } l.setNullSelectionAllowed(false); l.setNewItemsAllowed(false); l.setFilteringMode(ComboBox.FILTERINGMODE_OFF); l.setCaption(null);//getMessage("newProcess.caption")); Button b = new Button(getMessage("newProcess.start")); b.addStyleName("small default"); b.addListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { if (l.getValue() == null) { return; } withErrorHandling(getApplication(), new Runnable() { public void run() { ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext(); ProcessDefinitionConfig cfg = (ProcessDefinitionConfig) l.getValue(); cfg = ctx.getProcessDefinitionDAO().getActiveConfigurationByKey(cfg.getBpmDefinitionKey()); ProcessInstance instance = session.createProcessInstance(cfg, null, ctx, null, null, "portlet", null); getWindow().showNotification(getMessage("newProcess.started"), 2000); getWindow().executeJavaScript("Liferay.trigger('processtool.bpm.newProcess', '" + instance.getInternalId() + "');"); getWindow().executeJavaScript("vaadin.forceSync();"); List<BpmTask> tasks = session.findUserTasks(instance, ctx); if (!tasks.isEmpty()) { BpmTask task = tasks.get(0); if (activityMainPane != null) { activityMainPane.displayProcessData(task, session); } else { Window w = new Window(instance.getInternalId()); w.setContent(new ProcessDataPane(getApplication(), session, i18NSource, task, new WindowProcessDataDisplayContext(w))); w.center(); getWindow().addWindow(w); w.focus(); } } else if (activityMainPane != null) { activityMainPane.reloadCurrentViewData(); } } }); } }); HorizontalLayout hl = new HorizontalLayout(); hl.addComponent(l); hl.addComponent(b); hl.setSpacing(true); setSpacing(true); addComponent(new Label(getMessage("newProcess.caption"))); addComponent(hl); setMargin(new MarginInfo(true, false, false, false)); } private String getMessage(String s) { return i18NSource.getMessage(s); } }