Package org.activiti.explorer.ui.process.simple.editor.table

Source Code of org.activiti.explorer.ui.process.simple.editor.table.TaskTable

/* 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.process.simple.editor.table;

import java.util.ArrayList;
import java.util.List;

import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.I18nManager;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ui.process.simple.editor.listener.AddTaskClickListener;
import org.activiti.explorer.ui.process.simple.editor.listener.DeleteTaskClickListener;
import org.activiti.explorer.ui.process.simple.editor.listener.ShowFormClickListener;
import org.activiti.explorer.ui.process.simple.editor.listener.TaskFormModelListener;
import org.activiti.workflow.simple.definition.HumanStepDefinition;
import org.activiti.workflow.simple.definition.form.FormDefinition;
import org.apache.commons.lang3.StringUtils;

import com.vaadin.data.Item;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;

/**
* @author Joram Barrez
*/
public class TaskTable extends Table implements TaskFormModelListener {

  private static final long serialVersionUID = -2578437667358797351L;
 
  public static final String ID_NAME = "name";
  public static final String ID_ASSIGNEE = "assignee";
  public static final String ID_GROUPS = "groups";
  public static final String ID_DESCRIPTION = "description";
  public static final String ID_START_WITH_PREVIOUS = "startWithPrevious";
  public static final String ID_ACTIONS = "actions";

  protected I18nManager i18nManager;
 
  protected TaskFormModel taskFormModel = new TaskFormModel();

  public TaskTable() {
    this.i18nManager  = ExplorerApp.get().getI18nManager();
    this.taskFormModel.addFormModelListener(this);

    setEditable(true);
    setColumnReorderingAllowed(true);

    setSizeFull();
    setPageLength(0);

    addContainerProperty(ID_NAME, String.class, null);
    addContainerProperty(ID_ASSIGNEE, ComboBox.class, null);
    addContainerProperty(ID_GROUPS, ComboBox.class, null);
    addContainerProperty(ID_DESCRIPTION, TextField.class, null);
    addContainerProperty(ID_START_WITH_PREVIOUS, CheckBox.class, null);
    addContainerProperty(ID_ACTIONS, HorizontalLayout.class, null);

    setColumnHeader(ID_NAME, i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_NAME));
    setColumnHeader(ID_ASSIGNEE, i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_ASSIGNEE));
    setColumnHeader(ID_GROUPS, i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_GROUPS));
    setColumnHeader(ID_DESCRIPTION, i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_DESCRIPTION));
    setColumnHeader(ID_START_WITH_PREVIOUS, i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_CONCURRENCY));
    setColumnHeader(ID_ACTIONS, i18nManager.getMessage(Messages.PROCESS_EDITOR_ACTIONS));

    setColumnAlignment(ID_NAME, ALIGN_CENTER);
    setColumnAlignment(ID_ASSIGNEE, ALIGN_CENTER);
    setColumnAlignment(ID_GROUPS, ALIGN_CENTER);
    setColumnAlignment(ID_START_WITH_PREVIOUS, ALIGN_CENTER);
    setColumnAlignment(ID_START_WITH_PREVIOUS, ALIGN_CENTER);
    setColumnWidth(ID_ACTIONS, 170);
  }

  public void addTaskRow(HumanStepDefinition humanStepDefinition) {
    Object taskItemId = addTaskRow(null, humanStepDefinition.getName(), humanStepDefinition.getAssignee(),
            getCommaSeperated(humanStepDefinition.getCandidateGroups()), humanStepDefinition.getDescription(),
            humanStepDefinition.isStartsWithPrevious());
    if (humanStepDefinition.getForm() != null) {
      taskFormModel.addForm(taskItemId, humanStepDefinition.getForm());
    }
  }

  protected String getCommaSeperated(List<String> list) {
    if(list != null && !list.isEmpty()) {
      return StringUtils.join(list, ", ");
    }
    return null;
  }

  public void addDefaultTaskRow() {
    addDefaultTaskRowAfter(null);
  }

  public void addDefaultTaskRowAfter(Object itemId) {
    addTaskRow(itemId, null, null, null, null, null);
  }

  protected Object addTaskRow(Object previousTaskItemId, String taskName, String taskAssignee,
          String taskGroups, String taskDescription, Boolean startWithPrevious) {
   
    Object newItemId = null;
    if (previousTaskItemId == null) { // add at the end of list
      newItemId = addItem();
    } else {
      newItemId = addItemAfter(previousTaskItemId);
    }
    Item newItem = getItem(newItemId);

    // name
    newItem.getItemProperty(ID_NAME).setValue(taskName == null ? "my task" : taskName);

    // assignee
    ComboBox assigneeComboBox = new ComboBox();
    assigneeComboBox.setNullSelectionAllowed(true);
  
    try {
      for (User user : ProcessEngines.getDefaultProcessEngine().getIdentityService().createUserQuery().orderByUserFirstName().asc().list()) {
      assigneeComboBox.addItem(user.getId());
      assigneeComboBox.setItemCaption(user.getId(), user.getFirstName() + " " + user.getLastName());
    }
    } catch(Exception e) {
      // Don't do anything. Will be an empty dropdown.
    }
   
    if (taskAssignee != null) {
      assigneeComboBox.select(taskAssignee);
    }
   
    newItem.getItemProperty(ID_ASSIGNEE).setValue(assigneeComboBox);
   
    // groups
    ComboBox groupComboBox = new ComboBox();
    groupComboBox.setNullSelectionAllowed(true);
   
    try {
      for (Group group : ProcessEngines.getDefaultProcessEngine().getIdentityService().createGroupQuery().orderByGroupName().asc().list()) {
        groupComboBox.addItem(group.getId());
        groupComboBox.setItemCaption(group.getId(), group.getName());
      }
    } catch (Exception e) {
      // Don't do anything. Will be an empty dropdown.
    }
   
    if (taskGroups != null) {
      groupComboBox.select(taskGroups);
    }
   
    newItem.getItemProperty(ID_GROUPS).setValue(groupComboBox);

    // description
    TextField descriptionTextField = new TextField();
    descriptionTextField.setColumns(16);
    descriptionTextField.setRows(1);
    if (taskDescription != null) {
      descriptionTextField.setValue(taskDescription);
    }
    newItem.getItemProperty(ID_DESCRIPTION).setValue(descriptionTextField);

    // concurrency
    CheckBox startWithPreviousCheckBox = new CheckBox(i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_START_WITH_PREVIOUS));
    startWithPreviousCheckBox.setValue(startWithPrevious == null ? false : startWithPrevious);
    newItem.getItemProperty(ID_START_WITH_PREVIOUS).setValue(startWithPreviousCheckBox);

    // actions
    newItem.getItemProperty(ID_ACTIONS).setValue(generateActionButtons(newItemId));

    return newItemId;
  }

  protected HorizontalLayout generateActionButtons(Object taskItemId) {
    HorizontalLayout actionButtons = new HorizontalLayout();

    FormDefinition form = taskFormModel.getForm(taskItemId);
    Button formButton = new Button(form == null ? i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_FORM_CREATE) :
        i18nManager.getMessage(Messages.PROCESS_EDITOR_TASK_FORM_EDIT));
    formButton.addListener(new ShowFormClickListener(taskFormModel, taskItemId));
    formButton.setData(taskItemId);
    actionButtons.addComponent(formButton);

    Button deleteTaskButton = new Button("-");
    deleteTaskButton.setData(taskItemId);
    deleteTaskButton.addListener(new DeleteTaskClickListener(this));
    actionButtons.addComponent(deleteTaskButton);

    Button addTaskButton = new Button("+");
    addTaskButton.setData(taskItemId);
    addTaskButton.addListener(new AddTaskClickListener(this));
    actionButtons.addComponent(addTaskButton);

    return actionButtons;
  }

  public List<HumanStepDefinition> getSteps() {
    List<HumanStepDefinition> steps = new ArrayList<HumanStepDefinition>();
    for (Object itemId : getItemIds()) {
      Item item = getItem(itemId);

      HumanStepDefinition humanStepDefinition = new HumanStepDefinition();
     
      String name = (String) item.getItemProperty(ID_NAME).getValue();
      if (name != null && name.length() > 0) {
        humanStepDefinition.setName(name);
      }
     
      String assignee = (String) ((ComboBox) item.getItemProperty(ID_ASSIGNEE).getValue()).getValue();
      if (assignee != null && assignee.length() > 0) {
        humanStepDefinition.setAssignee(assignee);
      }
     
      String groups = (String) ((ComboBox) item.getItemProperty("groups").getValue()).getValue();
      List<String> candidateGroups = new ArrayList<String>();
      if (groups != null && groups.length() > 0) {
        for (String group : groups.split(",")) {
          candidateGroups.add(group.trim());
        }
      }
      humanStepDefinition.setCandidateGroups(candidateGroups);

      String description = (String) ((TextField) item.getItemProperty(ID_DESCRIPTION).getValue()).getValue();
      if (description != null && description.length() > 0) {
        humanStepDefinition.setDescription(description);
      }
     
      humanStepDefinition.setStartsWithPrevious((boolean) ((CheckBox) item.getItemProperty(ID_START_WITH_PREVIOUS).getValue()).booleanValue());
     
      FormDefinition formDefinition = taskFormModel.getForm(itemId);
      humanStepDefinition.setForm(formDefinition);

      steps.add(humanStepDefinition);
    }
    return steps;
  }
 
  /** Implements FormModelListener */
  public void formAdded(Object taskItemId) {
    getItem(taskItemId).getItemProperty(ID_ACTIONS).setValue(generateActionButtons(taskItemId));
  }

  /** Implements FormModelListener */
  public void formRemoved(Object taskItemId) {
    getItem(taskItemId).getItemProperty(ID_ACTIONS).setValue(generateActionButtons(taskItemId));
  }

}
TOP

Related Classes of org.activiti.explorer.ui.process.simple.editor.table.TaskTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.