/* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.activiti.explorer.ui.reports; import java.util.Map; import org.activiti.engine.ProcessEngines; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.explorer.ExplorerApp; import org.activiti.explorer.I18nManager; import org.activiti.explorer.Messages; import org.activiti.explorer.ui.custom.PopupWindow; import org.activiti.explorer.ui.mainlayout.ExplorerLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.Reindeer; /** * @author Joram Barrez */ public class SaveReportPopupWindow extends PopupWindow { private static final long serialVersionUID = 1L; protected String processDefinitionId; protected Map<String, String> originalFormProperties; protected Component componentToDisableOnClose; protected TextField nameField; public SaveReportPopupWindow() { I18nManager i18nManager = ExplorerApp.get().getI18nManager(); setCaption(i18nManager.getMessage(Messages.REPORTING_SAVE_POPUP_CAPTION)); VerticalLayout layout = new VerticalLayout(); addComponent(layout); createNameTextField(i18nManager, layout); createSaveButton(i18nManager, layout); setModal(true); center(); setResizable(false); setWidth(400, UNITS_PIXELS); setHeight(150, UNITS_PIXELS); addStyleName(Reindeer.WINDOW_LIGHT); } protected void createNameTextField(I18nManager i18nManager, VerticalLayout layout) { HorizontalLayout fieldLayout = new HorizontalLayout(); fieldLayout.setWidth(100, UNITS_PERCENTAGE); layout.addComponent(fieldLayout); fieldLayout.addComponent(new Label(i18nManager.getMessage(Messages.REPORTING_SAVE_POPUP_NAME))); nameField = new TextField(); nameField.setWidth(250, UNITS_PIXELS); nameField.focus(); fieldLayout.addComponent(nameField); } protected void createSaveButton(final I18nManager i18nManager, final VerticalLayout layout) { layout.addComponent(new Label(" ", Label.CONTENT_XHTML)); Button saveButton = new Button(i18nManager.getMessage(Messages.BUTTON_SAVE)); layout.addComponent(saveButton); layout.setComponentAlignment(saveButton, Alignment.MIDDLE_CENTER); saveButton.addListener(new ClickListener() { private static final long serialVersionUID = 1L; public void buttonClick(ClickEvent event) { String reportName = null; // Validate String error = null; if (nameField.getValue() == null || ((String) nameField.getValue()).length() == 0) { error = i18nManager.getMessage(Messages.REPORTING_SAVE_POPUP_NAME_EMPTY); } else { reportName = ExplorerApp.get().getLoggedInUser().getId() + "_" + nameField.getValue(); if (reportName.length() > 255) { error = i18nManager.getMessage(Messages.REPORTING_SAVE_POPUP_NAME_TOO_LONG); } else { boolean nameUsed = ProcessEngines.getDefaultProcessEngine().getHistoryService() .createHistoricProcessInstanceQuery().processInstanceBusinessKey(reportName).count() != 0; if (nameUsed) { error = i18nManager.getMessage(Messages.REPORTING_SAVE_POPUP_NAME_EXISTS); } } } if (error != null) { setHeight(185, UNITS_PIXELS); layout.addComponent(new Label(" ", Label.CONTENT_XHTML)); Label errorLabel = new Label(error); errorLabel.addStyleName(ExplorerLayout.STYLE_ERROR); layout.addComponent(errorLabel); } else { // Re-run reports to store the data for good now (the previous process instance was deleted) if (originalFormProperties != null) { startProcessInstanceWithFormProperties(reportName); } else { startProcessInstance(reportName); } // Remove the popup if (componentToDisableOnClose != null) { componentToDisableOnClose.setEnabled(false); } close(); } } }); } protected ProcessInstance startProcessInstanceWithFormProperties(String businessKey) { return ProcessEngines.getDefaultProcessEngine().getFormService() .submitStartFormData(processDefinitionId, businessKey, originalFormProperties); } protected ProcessInstance startProcessInstance(String businessKey) { return ProcessEngines.getDefaultProcessEngine().getRuntimeService().startProcessInstanceById(processDefinitionId, businessKey); } public String getProcessDefinitionId() { return processDefinitionId; } public void setProcessDefinitionId(String processDefinitionId) { this.processDefinitionId = processDefinitionId; } public Map<String, String> getOriginalFormProperties() { return originalFormProperties; } public void setOriginalFormProperties(Map<String, String> originalFormProperties) { this.originalFormProperties = originalFormProperties; } public Component getComponentToDisableOnClose() { return componentToDisableOnClose; } public void setComponentToDisableOnClose(Component componentToDisableOnClose) { this.componentToDisableOnClose = componentToDisableOnClose; } }