/machinelearning/5.0.x/drools-core/src/main/java/org/drools/process/instance/impl/demo/UIWorkItemHandler.java

https://github.com/droolsjbpm/droolsjbpm-contributed-experiments · Java · 168 lines · 141 code · 23 blank · 4 comment · 15 complexity · 6f647b4e0240c059b338c46c713fefd0 MD5 · raw file

  1. package org.drools.process.instance.impl.demo;
  2. import java.awt.BorderLayout;
  3. import java.awt.Dimension;
  4. import java.awt.GridBagConstraints;
  5. import java.awt.GridBagLayout;
  6. import java.awt.Insets;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.util.ArrayList;
  12. import java.util.HashMap;
  13. import java.util.Iterator;
  14. import java.util.List;
  15. import java.util.Map;
  16. import javax.swing.JButton;
  17. import javax.swing.JFrame;
  18. import javax.swing.JList;
  19. import javax.swing.JPanel;
  20. import javax.swing.ListSelectionModel;
  21. import javax.swing.WindowConstants;
  22. import javax.swing.event.ListSelectionEvent;
  23. import javax.swing.event.ListSelectionListener;
  24. import org.drools.runtime.process.WorkItem;
  25. import org.drools.runtime.process.WorkItemHandler;
  26. import org.drools.runtime.process.WorkItemManager;
  27. /**
  28. *
  29. * @author <a href="mailto:kris_verlaenen@hotmail.com">Kris Verlaenen</a>
  30. */
  31. public class UIWorkItemHandler extends JFrame implements WorkItemHandler {
  32. private static final long serialVersionUID = 400L;
  33. private Map<WorkItem, WorkItemManager> workItems = new HashMap<WorkItem, WorkItemManager>();
  34. private JList workItemsList;
  35. private JButton selectButton;
  36. public UIWorkItemHandler() {
  37. setSize(new Dimension(400, 300));
  38. setTitle("Work Items");
  39. setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  40. initializeComponent();
  41. }
  42. private void initializeComponent() {
  43. JPanel panel = new JPanel();
  44. panel.setLayout(new GridBagLayout());
  45. getRootPane().setLayout(new BorderLayout());
  46. getRootPane().add(panel, BorderLayout.CENTER);
  47. workItemsList = new JList();
  48. workItemsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  49. workItemsList.addMouseListener(new MouseAdapter() {
  50. public void mouseClicked(MouseEvent e) {
  51. if (e.getClickCount() == 2) {
  52. select();
  53. }
  54. }
  55. });
  56. workItemsList.addListSelectionListener(new ListSelectionListener() {
  57. public void valueChanged(ListSelectionEvent e) {
  58. selectButton.setEnabled(getSelectedWorkItem() != null);
  59. }
  60. });
  61. reloadWorkItemsList();
  62. GridBagConstraints c = new GridBagConstraints();
  63. c.weightx = 1;
  64. c.weighty = 1;
  65. c.fill = GridBagConstraints.BOTH;
  66. c.insets = new Insets(5, 5, 5, 5);
  67. panel.add(workItemsList, c);
  68. selectButton = new JButton("Select");
  69. selectButton.setEnabled(false);
  70. selectButton.addActionListener(new ActionListener() {
  71. public void actionPerformed(ActionEvent event) {
  72. select();
  73. }
  74. });
  75. c = new GridBagConstraints();
  76. c.gridy = 1;
  77. c.weightx = 1;
  78. c.anchor = GridBagConstraints.EAST;
  79. c.insets = new Insets(5, 5, 5, 5);
  80. panel.add(selectButton, c);
  81. }
  82. private void select() {
  83. WorkItem workItem = getSelectedWorkItem();
  84. if (workItem != null) {
  85. UIWorkItemHandlerDialog dialog = new UIWorkItemHandlerDialog(UIWorkItemHandler.this, workItem);
  86. dialog.setVisible(true);
  87. }
  88. }
  89. public WorkItem getSelectedWorkItem() {
  90. int index = workItemsList.getSelectedIndex();
  91. if (index != -1) {
  92. Object selected = workItemsList.getModel().getElementAt(index);
  93. if (selected instanceof WorkItemWrapper) {
  94. return ((WorkItemWrapper) selected).getWorkItem();
  95. }
  96. }
  97. return null;
  98. }
  99. private void reloadWorkItemsList() {
  100. List<WorkItemWrapper> result = new ArrayList<WorkItemWrapper>();
  101. for (Iterator<WorkItem> iterator = workItems.keySet().iterator(); iterator.hasNext(); ) {
  102. WorkItem workItem = iterator.next();
  103. result.add(new WorkItemWrapper(workItem));
  104. }
  105. workItemsList.setListData(result.toArray());
  106. }
  107. public void complete(WorkItem workItem, Map<String, Object> results) {
  108. WorkItemManager manager = workItems.get(workItem);
  109. if (manager != null) {
  110. manager.completeWorkItem(workItem.getId(), results);
  111. workItems.remove(workItem);
  112. reloadWorkItemsList();
  113. }
  114. selectButton.setEnabled(getSelectedWorkItem() != null);
  115. }
  116. public void abort(WorkItem workItem) {
  117. WorkItemManager manager = workItems.get(workItem);
  118. if (manager != null) {
  119. manager.abortWorkItem(workItem.getId());
  120. workItems.remove(workItem);
  121. reloadWorkItemsList();
  122. }
  123. selectButton.setEnabled(getSelectedWorkItem() != null);
  124. }
  125. public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
  126. workItems.remove(workItem);
  127. reloadWorkItemsList();
  128. }
  129. public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
  130. workItems.put(workItem, manager);
  131. reloadWorkItemsList();
  132. }
  133. private class WorkItemWrapper {
  134. private WorkItem workItem;
  135. public WorkItemWrapper(WorkItem workItem) {
  136. this.workItem = workItem;
  137. }
  138. public WorkItem getWorkItem() {
  139. return workItem;
  140. }
  141. public String toString() {
  142. return workItem.getName() + " [" + workItem.getId() + "]";
  143. }
  144. }
  145. }