Package com.alfresco.designer.gui.property

Source Code of com.alfresco.designer.gui.property.PropertyAlfrescoUserTaskSection

package com.alfresco.designer.gui.property;

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.activiti.bpmn.model.UserTask;
import org.activiti.designer.eclipse.preferences.PreferencesUtil;
import org.activiti.designer.util.eclipse.ActivitiUiUtil;
import org.activiti.designer.util.preferences.Preferences;
import org.activiti.designer.util.property.ActivitiPropertySection;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.ui.editor.DiagramEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;

public class PropertyAlfrescoUserTaskSection extends ActivitiPropertySection implements ITabbedPropertyConstants {

  private CCombo performerTypeCombo;
  private List<String> performerTypes = Arrays.asList("Assignee", "Candidate users", "Candidate groups");
  private String currentType = "Assignee";
  private Text expressionText;
  private CCombo formTypeCombo;
  private Text priorityText;
  private Text documentationText;

  @Override
  public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) {
    super.createControls(parent, tabbedPropertySheetPage);

    TabbedPropertySheetWidgetFactory factory = getWidgetFactory();
    Composite composite = factory.createFlatFormComposite(parent);
    FormData data;

    performerTypeCombo = createCCombo(composite, performerTypes, factory, null);
    createLabel("Performer type:", composite, factory, performerTypeCombo);

    expressionText = createText(composite, factory, performerTypeCombo);
    createLabel("Expression:", composite, factory, expressionText);

    formTypeCombo = createCCombo(composite, PreferencesUtil.getStringArray(Preferences.ALFRESCO_FORMTYPES_USERTASK),
            factory, expressionText);
    createLabel("Form key:", composite, factory, formTypeCombo);
   
    priorityText = createText(composite, factory, formTypeCombo);
    createLabel("Priority:", composite, factory, priorityText);

    documentationText = factory.createText(composite, "", SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); //$NON-NLS-1$
    data = new FormData(SWT.DEFAULT, 100);
    data.left = new FormAttachment(0, 160);
    data.right = new FormAttachment(100, 0);
    data.top = new FormAttachment(priorityText, VSPACE);
    documentationText.setLayoutData(data);
    documentationText.addFocusListener(listener);

    createLabel("Documentation:", composite, factory, documentationText);
  }

  @Override
  public void refresh() {
    performerTypeCombo.removeFocusListener(listener);
    expressionText.removeFocusListener(listener);
    formTypeCombo.removeFocusListener(listener);
    priorityText.removeFocusListener(listener);
    documentationText.removeFocusListener(listener);
    PictogramElement pe = getSelectedPictogramElement();
    if (pe != null) {
      Object bo = getBusinessObject(pe);
      if (bo == null)
        return;

      expressionText.setText("");
      UserTask userTask = (UserTask) bo;
      int performerIndex = 0;
      if (userTask.getCandidateUsers() != null && userTask.getCandidateUsers().size() > 0) {
        performerIndex = performerTypes.indexOf("Candidate users");
        StringBuffer expressionBuffer = new StringBuffer();
        for (String user : userTask.getCandidateUsers()) {
          if (expressionBuffer.length() > 0) {
            expressionBuffer.append(";");
          }
          expressionBuffer.append(user);
        }
        currentType = "Candidate users";
        expressionText.setText(expressionBuffer.toString());
      } else if (userTask.getCandidateGroups() != null && userTask.getCandidateGroups().size() > 0) {
        performerIndex = performerTypes.indexOf("Candidate groups");
        StringBuffer expressionBuffer = new StringBuffer();
        for (String group : userTask.getCandidateGroups()) {
          if (expressionBuffer.length() > 0) {
            expressionBuffer.append(";");
          }
          expressionBuffer.append(group);
        }
        currentType = "Candidate groups";
        expressionText.setText(expressionBuffer.toString());
      } else {
        performerIndex = performerTypes.indexOf("Assignee");
        if (userTask.getAssignee() != null && userTask.getAssignee().length() > 0) {
          currentType = "Assignee";
          expressionText.setText(userTask.getAssignee());
        }
      }
      if(userTask.getFormKey() != null && userTask.getFormKey().length() > 0) {
        int formIndex = formTypeCombo.indexOf(userTask.getFormKey());
        if(formIndex >= 0) {
          formTypeCombo.select(formIndex);
        }
      }
     
      priorityText.setText("");
      if(userTask.getPriority() != null) {
        priorityText.setText(userTask.getPriority().toString());
      }

      documentationText.setText("");
      if (StringUtils.isNotEmpty(userTask.getDocumentation())) {
        documentationText.setText(userTask.getDocumentation());
      }

      performerTypeCombo.select(performerIndex == -1 ? 0 : performerIndex);
      performerTypeCombo.addFocusListener(listener);
      expressionText.addFocusListener(listener);
      formTypeCombo.addFocusListener(listener);
      priorityText.addFocusListener(listener);
      documentationText.addFocusListener(listener);
    }
  }

  private FocusListener listener = new FocusListener() {

    public void focusGained(final FocusEvent e) {
    }

    public void focusLost(final FocusEvent e) {
      final String performerType = performerTypeCombo.getText();
      if (e.getSource() instanceof CCombo && !currentType.equalsIgnoreCase(performerType)) {
        expressionText.setText("");
      }
      currentType = performerType;
      PictogramElement pe = getSelectedPictogramElement();
      if (pe != null) {
        final Object bo = getBusinessObject(pe);
        if (bo instanceof UserTask) {
          DiagramEditor diagramEditor = (DiagramEditor) getDiagramEditor();
          TransactionalEditingDomain editingDomain = diagramEditor.getEditingDomain();
          ActivitiUiUtil.runModelChange(new Runnable() {

            public void run() {
              UserTask userTask = (UserTask) bo;
              String expression = expressionText.getText();
              if (performerType != null && expression != null && expression.length() > 0) {
                if ("assignee".equalsIgnoreCase(performerType)) {
                  userTask.setAssignee(expression);
                  removeCandidateUsers(userTask);
                  removeCandidateGroups(userTask);
                } else if ("candidate users".equalsIgnoreCase(performerType)) {
                  String[] expressionList = null;
                  if (expression.contains(";")) {
                    expressionList = expression.split(";");
                  } else {
                    expressionList = new String[] { expression };
                  }
                  for (String user : expressionList) {
                    if (!candidateUserExists(userTask, user)) {
                      userTask.getCandidateUsers().add(user);
                    }
                  }
                  removeCandidateUsersNotInList(expressionList, userTask);
                  userTask.setAssignee(null);
                  removeCandidateGroups(userTask);
                } else {
                  String[] expressionList = null;
                  if (expression.contains(";")) {
                    expressionList = expression.split(";");
                  } else {
                    expressionList = new String[] { expression };
                  }
                  for (String group : expressionList) {
                    if (!candidateGroupExists(userTask, group)) {
                      userTask.getCandidateGroups().add(group);
                    }
                  }
                  removeCandidateGroupsNotInList(expressionList, userTask);
                  userTask.setAssignee(null);
                  removeCandidateUsers(userTask);
                }
              }
              String formKey = formTypeCombo.getText();
              if (formKey != null) {
                userTask.setFormKey(formKey);
              } else {
                userTask.setFormKey("");
              }
              userTask.setPriority(priorityText.getText());
              userTask.setDocumentation(documentationText.getText());
            }
          }, editingDomain, "Model Update");
        }

      }
    }

    private void removeCandidateUsers(UserTask userTask) {
      if (userTask.getCandidateUsers() == null)
        return;
      userTask.getCandidateUsers().clear();
    }

    private void removeCandidateUsersNotInList(String[] expressionList, UserTask userTask) {
      Iterator<String> entryIterator = userTask.getCandidateUsers().iterator();
      while (entryIterator.hasNext()) {
        String candidateUser = entryIterator.next();
        boolean found = false;
        for (String user : expressionList) {
          if (user.equals(candidateUser)) {
            found = true;
            break;
          }
        }
        if (found == false) {
          entryIterator.remove();
        }
      }
    }

    private boolean candidateUserExists(UserTask userTask, String userText) {
      if (userTask.getCandidateUsers() == null)
        return false;
      for (String user : userTask.getCandidateUsers()) {
        if (userText.equalsIgnoreCase(user)) {
          return true;
        }
      }
      return false;
    }

    private void removeCandidateGroups(UserTask userTask) {
      if (userTask.getCandidateGroups() == null)
        return;
      userTask.getCandidateGroups().clear();
    }

    private void removeCandidateGroupsNotInList(String[] expressionList, UserTask userTask) {
      Iterator<String> entryIterator = userTask.getCandidateGroups().iterator();
      while (entryIterator.hasNext()) {
        String candidateGroup = entryIterator.next();
        boolean found = false;
        for (String group : expressionList) {
          if (group.equals(candidateGroup)) {
            found = true;
            break;
          }
        }
        if (found == false) {
          entryIterator.remove();
        }
      }
    }

    private boolean candidateGroupExists(UserTask userTask, String groupText) {
      if (userTask.getCandidateGroups() == null)
        return false;
      for (String group : userTask.getCandidateGroups()) {
        if (groupText.equalsIgnoreCase(group)) {
          return true;
        }
      }
      return false;
    }

  };
 
  private Text createText(Composite parent, TabbedPropertySheetWidgetFactory factory, Control top) {
    Text text = factory.createText(parent, ""); //$NON-NLS-1$
    FormData data = new FormData();
    data.left = new FormAttachment(0, 160);
    data.right = new FormAttachment(100, -HSPACE);
    if(top == null) {
      data.top = new FormAttachment(0, VSPACE);
    } else {
      data.top = new FormAttachment(top, VSPACE);
    }
    text.setLayoutData(data);
    text.addFocusListener(listener);
    return text;
  }
 
  private CLabel createLabel(String text, Composite parent, TabbedPropertySheetWidgetFactory factory, Control control) {
    CLabel label = factory.createCLabel(parent, text);
    FormData data = new FormData();
    data.left = new FormAttachment(0, 0);
    data.right = new FormAttachment(control, -HSPACE);
    data.top = new FormAttachment(control, 0, SWT.CENTER);
    label.setLayoutData(data);
    return label;
  }

  private CCombo createCCombo(Composite parent, List<String> values, TabbedPropertySheetWidgetFactory factory, Control top) {
    CCombo combo = factory.createCCombo(parent, SWT.NONE);
    for (String value : values) {
      combo.add(value);
    }
    FormData data = new FormData();
    data.left = new FormAttachment(0, 160);
    data.right = new FormAttachment(100, 0);
    if(top == null) {
      data.top = new FormAttachment(0, VSPACE);
    } else {
      data.top = new FormAttachment(top, VSPACE);
    }
    combo.setLayoutData(data);
    combo.addFocusListener(listener);
    return combo;
  }
}
TOP

Related Classes of com.alfresco.designer.gui.property.PropertyAlfrescoUserTaskSection

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.