/* 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.task;
import java.util.Arrays;
import java.util.Date;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.activiti.explorer.Constants;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.I18nManager;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ui.custom.PopupWindow;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.ShortcutAction;
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.ComboBox;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Form;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.themes.Reindeer;
/**
* Popup window to create a new task
*
* @author Joram Barrez
*/
public class NewCasePopupWindow extends PopupWindow {
private static final long serialVersionUID = 1L;
protected TaskService taskService;
protected I18nManager i18nManager;
// protected HorizontalLayout layout;
protected Form form;
protected TextField nameField;
protected TextArea descriptionArea;
protected DateField dueDateField;
protected PriorityComboBox priorityComboBox;
protected Button createTaskButton;
public NewCasePopupWindow() {
this.taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();
this.i18nManager = ExplorerApp.get().getI18nManager();
setModal(true);
center();
setResizable(false);
setCaption(i18nManager.getMessage(Messages.TASK_NEW));
addStyleName(Reindeer.WINDOW_LIGHT);
setWidth(430, UNITS_PIXELS);
setHeight(320, UNITS_PIXELS);
initForm();
initCreateTaskButton();
initEnterKeyListener();
}
protected void initForm() {
form = new Form();
form.setValidationVisibleOnCommit(true);
form.setImmediate(true);
addComponent(form);
// name
nameField = new TextField(i18nManager.getMessage(Messages.TASK_NAME));
nameField.focus();
nameField.setRequired(true);
nameField.setRequiredError(i18nManager.getMessage(Messages.TASK_NAME_REQUIRED));
form.addField("name", nameField);
// description
descriptionArea = new TextArea(i18nManager.getMessage(Messages.TASK_DESCRIPTION));
descriptionArea.setColumns(25);
form.addField("description", descriptionArea);
// duedate
dueDateField = new DateField(i18nManager.getMessage(Messages.TASK_DUEDATE));
dueDateField.setResolution(DateField.RESOLUTION_DAY);
form.addField("duedate", dueDateField);
// priority
priorityComboBox = new PriorityComboBox(i18nManager);
form.addField("priority", priorityComboBox);
}
protected void initCreateTaskButton() {
HorizontalLayout buttonLayout = new HorizontalLayout();
buttonLayout.setWidth(100, UNITS_PERCENTAGE);
form.getFooter().setWidth(100, UNITS_PERCENTAGE);
form.getFooter().addComponent(buttonLayout);
Button createButton = new Button(i18nManager.getMessage(Messages.BUTTON_CREATE));
buttonLayout.addComponent(createButton);
buttonLayout.setComponentAlignment(createButton, Alignment.BOTTOM_RIGHT);
createButton.addListener(new ClickListener() {
public void buttonClick(ClickEvent event) {
handleFormSubmit();
}
});
}
protected void initEnterKeyListener() {
addActionHandler(new Handler() {
public void handleAction(Action action, Object sender, Object target) {
handleFormSubmit();
}
public Action[] getActions(Object target, Object sender) {
return new Action[] {new ShortcutAction("enter", ShortcutAction.KeyCode.ENTER, null)};
}
});
}
protected void handleFormSubmit() {
try {
// Check for errors
form.commit(); // will throw exception in case validation is false
// Create task
Task task = taskService.newTask();
task.setName(nameField.getValue().toString());
task.setDescription(descriptionArea.getValue().toString());
task.setDueDate((Date) dueDateField.getValue());
task.setPriority(priorityComboBox.getPriority());
task.setOwner(ExplorerApp.get().getLoggedInUser().getId());
taskService.saveTask(task);
// close popup and navigate to new group
close();
ExplorerApp.get().getViewManager().showTasksPage(task.getId());
} catch (InvalidValueException e) {
// Do nothing: the Form component will render the errormsgs automatically
setHeight(350, UNITS_PIXELS);
}
}
}