Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.jbpm.process.instance.impl.humantask.HumanTaskDialog Maven / Gradle / Ivy
/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* 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.jbpm.process.instance.impl.humantask;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.kie.api.runtime.process.WorkItem;
/**
*
*/
public class HumanTaskDialog extends JDialog {
private static final long serialVersionUID = 510l;
private HumanTaskHandler handler;
private WorkItem workItem;
private JTextField resultNameField;
private JTextField resultValueField;
private List results = new ArrayList();
private JList resultList;
private JButton removeResultButton;
private JButton completeButton;
private JButton abortButton;
public HumanTaskDialog(HumanTaskHandler handler, WorkItem workItem) {
super(handler, "Execute Human Task", true);
this.handler = handler;
this.workItem = workItem;
setSize(new Dimension(400, 400));
initializeComponent();
}
private void initializeComponent() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
getRootPane().setLayout(new BorderLayout());
getRootPane().add(panel, BorderLayout.CENTER);
// Parameters
JLabel nameLabel = new JLabel("Name");
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(nameLabel, c);
String taskName = (String) workItem.getParameter("TaskName");
JTextField nameField = new JTextField(
taskName == null ? "" : taskName);
nameField.setEditable(false);
c = new GridBagConstraints();
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
panel.add(nameField, c);
JLabel priorityLabel = new JLabel("Priority");
c = new GridBagConstraints();
c.gridy = 1;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(priorityLabel, c);
String priority = (String) workItem.getParameter("Priority");
JTextField priorityField = new JTextField(
priority == null ? "" : priority);
priorityField.setEditable(false);
c = new GridBagConstraints();
c.gridy = 1;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
panel.add(priorityField, c);
JLabel commentLabel = new JLabel("Comment");
c = new GridBagConstraints();
c.gridy = 2;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(commentLabel, c);
String comment = (String) workItem.getParameter("Comment");
JTextArea params = new JTextArea(
comment == null ? "" : comment);
params.setEditable(false);
c = new GridBagConstraints();
c.gridy = 2;
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(5, 5, 5, 5);
panel.add(params, c);
int additionalParameters = 0;
for (Map.Entry entry: workItem.getParameters().entrySet()) {
String name = entry.getKey();
if (!"TaskName".equals(name)
&& !"Priority".equals(name)
&& !"Comment".equals(name)
&& !"ActorId".equals(name)) {
additionalParameters++;
JLabel label = new JLabel(name);
c = new GridBagConstraints();
c.gridy = 2 + additionalParameters;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(label, c);
JTextField field = new JTextField(
workItem.getParameter(name).toString());
field.setEditable(false);
c = new GridBagConstraints();
c.gridy = 2 + additionalParameters;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
panel.add(field, c);
}
}
// Result Panel
JPanel resultPanel = new JPanel();
resultPanel.setLayout(new GridBagLayout());
resultPanel.setBorder(new TitledBorder("Results"));
JLabel resultNameLabel = new JLabel("Name");
c = new GridBagConstraints();
c.insets = new Insets(5, 5, 5, 5);
resultPanel.add(resultNameLabel, c);
resultNameField = new JTextField();
c = new GridBagConstraints();
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
resultPanel.add(resultNameField, c);
JLabel resultValueLabel = new JLabel("Value");
c = new GridBagConstraints();
c.insets = new Insets(5, 5, 5, 5);
resultPanel.add(resultValueLabel, c);
resultValueField = new JTextField();
c = new GridBagConstraints();
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
resultPanel.add(resultValueField, c);
JButton addResultButton = new JButton("Add");
addResultButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addResult();
}
});
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
resultPanel.add(addResultButton, c);
resultList = new JList();
resultList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
resultList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
removeResultButton.setEnabled(resultList.getSelectedIndex() != -1);
}
});
c = new GridBagConstraints();
c.gridy = 1;
c.gridwidth = 4;
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(5, 5, 5, 5);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(resultList);
resultPanel.add(scrollPane, c);
removeResultButton = new JButton("Remove");
removeResultButton.setEnabled(false);
removeResultButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
removeResult();
}
});
c = new GridBagConstraints();
c.gridy = 1;
c.anchor = GridBagConstraints.NORTH;
c.insets = new Insets(5, 5, 5, 5);
resultPanel.add(removeResultButton, c);
c = new GridBagConstraints();
c.gridy = 3 + additionalParameters;
c.gridwidth = 2;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
panel.add(resultPanel, c);
// Buttom Panel
JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new GridBagLayout());
completeButton = new JButton("Complete");
completeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
complete();
}
});
c = new GridBagConstraints();
c.weightx = 1;
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(5, 5, 5, 5);
bottomPanel.add(completeButton, c);
abortButton = new JButton("Abort");
abortButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
abort();
}
});
c = new GridBagConstraints();
c.insets = new Insets(5, 5, 5, 5);
bottomPanel.add(abortButton, c);
c = new GridBagConstraints();
c.gridy = 4 + additionalParameters;
c.gridwidth = 2;
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(5, 5, 5, 5);
panel.add(bottomPanel, c);
}
private void addResult() {
String name = resultNameField.getText();
String value = resultValueField.getText();
if ("".equals(name) || "".equals(value)) {
JOptionPane.showMessageDialog(this,
"Name or value of result may not be null!", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
Result result = new Result(name, value);
if (results.contains(result)) {
JOptionPane.showMessageDialog(this,
"Cannot add result more than once!", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
results.add(result);
reloadResultList();
resultNameField.setText("");
resultValueField.setText("");
}
private void reloadResultList() {
resultList.setListData(results.toArray());
}
private void removeResult() {
int index = resultList.getSelectedIndex();
if (index != -1) {
results.remove(index);
reloadResultList();
}
}
private void complete() {
Map resultMap = null;
if (results.size() > 0) {
resultMap = new HashMap();
for (Result result: results) {
resultMap.put(result.getName(), result.getValue());
}
}
handler.complete(workItem, resultMap);
dispose();
}
private void abort() {
handler.abort(workItem);
dispose();
}
public static class Result {
private String name;
private Object value;
public Result(String name, Object value) {
this.name = name;
this.value = value;
}
public String getName() {
return this.name;
}
public Object getValue() {
return this.value;
}
public String toString() {
return this.name + " = " + this.value;
}
public boolean equals(Object o) {
if (o instanceof Result) {
return ((Result) o).getName().equals(this.name);
}
return false;
}
public int hashCode() {
return this.name.hashCode();
}
}
}