Package pl.net.bluesoft.rnd.pt.ext.userdata.widget

Source Code of pl.net.bluesoft.rnd.pt.ext.userdata.widget.UserDataWidget

package pl.net.bluesoft.rnd.pt.ext.userdata.widget;

import com.vaadin.data.Property;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.VerticalLayout;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolDataWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolVaadinWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AperteDoc;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AutoWiredProperty;
import pl.net.bluesoft.rnd.processtool.ui.widgets.impl.BaseProcessToolVaadinWidget;
import pl.net.bluesoft.rnd.pt.ext.userdata.model.ProcessInstanceUserAssignment;

import java.util.Collection;
import java.util.HashSet;

import static pl.net.bluesoft.util.lang.FormatUtil.nvl;

/**
* @author tlipski@bluesoft.net.pl
*/
public abstract class UserDataWidget
    extends BaseProcessToolVaadinWidget
    implements ProcessToolDataWidget, ProcessToolVaadinWidget, Property.ValueChangeListener {

  UserData selectedUser = null;
  private ComboBox combo;
  private Collection<UserData> users;

  @AutoWiredProperty
    @AperteDoc(
            humanNameKey = "userdata.widget.bpmVariableName",
            descriptionKey = "userdata.widget.bpmVariableName.description"
    )
  private String bpmVariableName;

    @AutoWiredProperty(required = true)
    @AperteDoc(
            humanNameKey = "userdata.widget.roleInProcess",
            descriptionKey = "userdata.widget.roleInProcess.description"
    )
    private String roleInProcess;

    @AutoWiredProperty
    @AperteDoc(
            humanNameKey = "userdata.widget.required",
            descriptionKey = "userdata.widget.required.description"
    )
    private Boolean required;

  @Override
  public Collection<String> validateData(BpmTask task, boolean skipRequired) {
    Collection<String> res = new HashSet<String>();
    if (getRequired() && selectedUser==null) {
      res.add("ext.userdata.validate.required."+ roleInProcess);
    }
    return res;
  }

  @Override
  public void saveData(BpmTask task) {
    boolean found = false;
        ProcessInstance pi = task.getProcessInstance();
    for (ProcessInstanceUserAssignment assign : getAttributes(ProcessInstanceUserAssignment.class, pi)) {
      if ((roleInProcess == null && assign.getRole() == null) || (assign.getRole() != null && assign.getRole().equals(roleInProcess))) {
        found = true;
        if (selectedUser == null) {
                    pi.removeAttribute(assign);
        } else {
                    assign.setBpmLogin(selectedUser.getBpmLogin());
          assign.setUserLogin(selectedUser.getLogin());
          assign.setUserDescription(selectedUser.getDescription());
        }
      }
    }
    if (!found && selectedUser != null) {
      ProcessInstanceUserAssignment assign = new ProcessInstanceUserAssignment();
      assign.setUserLogin(selectedUser.getLogin());
      assign.setUserDescription(selectedUser.getDescription());
      assign.setBpmLogin(selectedUser.getBpmLogin());
      assign.setRole(roleInProcess);
      assign.setKey(roleInProcess);
            pi.addAttribute(assign);
    }
  }

  @Override
  public void loadData(BpmTask task) {
        ProcessInstance processInstance = task.getProcessInstance();
    for (ProcessInstanceUserAssignment assign : getAttributes(ProcessInstanceUserAssignment.class, processInstance)) {
      if ((roleInProcess == null && assign.getRole() == null) || (assign.getRole() != null && assign.getRole().equals(roleInProcess))) {
        selectedUser = new UserData();
        selectedUser.setLogin(assign.getUserLogin());
        selectedUser.setDescription(assign.getUserDescription());
        break;
      }
    }
    if (selectedUser != null && combo != null) {
      for (UserData ud : users) {
        if (selectedUser.getLogin().equals(ud.getLogin())) {
          combo.setValue(ud);
        }
      }
    }

  }

  @Override
  public Component render() {
    combo = new ComboBox(i18NSource.getMessage("ext.userdata.prompt." + roleInProcess));

    combo.setItemCaptionPropertyId("description");
    combo.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
    combo.setFilteringMode(AbstractSelect.Filtering.FILTERINGMODE_CONTAINS);
    combo.setImmediate(true);
    combo.addListener(this);
    combo.setNewItemsAllowed(false);
        if (getRequired()) {
            combo.setRequired(true);
            combo.setDescription(i18NSource.getMessage("ext.userdata.validate.required."+ roleInProcess));
        }

    users = getUsers();
    BeanItemContainer bic = new BeanItemContainer(users);
    combo.setContainerDataSource(bic);
    bic.sort(new Object[] { "description" }, new boolean[] { true });

    if (selectedUser != null) {
      for (UserData ud : users) {
        if (selectedUser.getLogin().equals(ud.getLogin())) {
          combo.setValue(ud);
        }
      }
    }
    VerticalLayout vl = new VerticalLayout();
    vl.addComponent(combo);
    combo.setReadOnly(!hasPermission("EDIT"));

    vl.setWidth("100%");
    combo.setWidth("100%");
    return vl;
     
  }

  public void valueChange(Property.ValueChangeEvent event) {
    selectedUser = (UserData) combo.getValue();
  }

  protected abstract Collection<UserData> getUsers();

  @Override
  public void addChild(ProcessToolWidget child) {
    throw new IllegalArgumentException("Not supported!");
  }

  public String getBpmVariableName() {
    return bpmVariableName;
  }

  public void setBpmVariableName(String bpmVariableName) {
    this.bpmVariableName = bpmVariableName;
  }

    public String getRoleInProcess() {
        return roleInProcess;
    }

    public void setRoleInProcess(String roleInProcess) {
        this.roleInProcess = roleInProcess;
    }


    public Boolean getRequired() {
        return nvl(required, false);
    }

    public void setRequired(Boolean required) {
        this.required = required;
    }
}
TOP

Related Classes of pl.net.bluesoft.rnd.pt.ext.userdata.widget.UserDataWidget

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.