/* 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.custom;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.I18nManager;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ViewManager;
import org.activiti.explorer.ui.mainlayout.ExplorerLayout;
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.CssLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.MenuBar.MenuItem;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.themes.Reindeer;
/**
* Header that is shown on top of each task list,
* which allows the quick creation of new tasks.
*
* @author Frederik Heremans
* @author Joram Barrez
*/
public class TaskListHeader extends Panel {
private static final long serialVersionUID = 1L;
protected I18nManager i18nManager;
protected TaskService taskService;
protected HorizontalLayout layout;
protected TextField inputField;
public TaskListHeader() {
this.i18nManager = ExplorerApp.get().getI18nManager();
this.taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();
addStyleName(Reindeer.PANEL_LIGHT);
addStyleName(ExplorerLayout.STYLE_SEARCHBOX);
layout = new HorizontalLayout();
layout.setHeight(36, UNITS_PIXELS);
layout.setWidth(99, UNITS_PERCENTAGE); // 99, otherwise the Panel will display scrollbars
layout.setSpacing(true);
layout.setMargin(false, true, false, true);
setContent(layout);
initInputField();
initKeyboardListener();
// initSortMenu();
}
protected void initInputField() {
// Csslayout is used to style inputtext as rounded
CssLayout csslayout = new CssLayout();
csslayout.setHeight(24, UNITS_PIXELS);
csslayout.setWidth(100, UNITS_PERCENTAGE);
layout.addComponent(csslayout);
inputField = new TextField();
inputField.setWidth(100, UNITS_PERCENTAGE);
inputField.addStyleName(ExplorerLayout.STYLE_SEARCHBOX);
inputField.setInputPrompt(i18nManager.getMessage(Messages.TASK_CREATE_NEW));
inputField.focus();
csslayout.addComponent(inputField);
layout.setComponentAlignment(csslayout, Alignment.MIDDLE_LEFT);
layout.setExpandRatio(csslayout, 1.0f);
}
protected void initKeyboardListener() {
addActionHandler(new Handler() {
public void handleAction(Action action, Object sender, Object target) {
if (inputField.getValue() != null && !"".equals(inputField.getValue().toString())) {
// Create task
Task task = taskService.newTask();
task.setName(inputField.getValue().toString());
task.setOwner(ExplorerApp.get().getLoggedInUser().getId());
taskService.saveTask(task);
// Switch to the new task
ExplorerApp.get().getViewManager().showTasksPage(task.getId());
}
}
public Action[] getActions(Object target, Object sender) {
return new Action[] {new ShortcutAction("enter", ShortcutAction.KeyCode.ENTER, null)};
}
});
}
protected void initSortMenu() {
MenuBar menuBar = new MenuBar();
menuBar.addStyleName(ExplorerLayout.STYLE_SEARCHBOX_SORTMENU);
//TODO: Adding types of sorting manually and listener/events
MenuItem rootItem = menuBar.addItem("Sort by", null);
rootItem.addItem("Id", null);
rootItem.addItem("Name", null);
rootItem.addItem("Due date", null);
rootItem.addItem("Creation date", null);
layout.addComponent(menuBar);
layout.setComponentAlignment(menuBar, Alignment.MIDDLE_RIGHT);
}
@Override
public void focus() {
inputField.focus();
}
}