org.jbpm.examples.request.RequestUI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jbpm-examples Show documentation
Show all versions of jbpm-examples Show documentation
Run JBPMExamplesApp to try the jBPM examples.
/*
* 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.examples.request;
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.HashMap;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import org.jbpm.workflow.instance.node.DynamicNodeInstance;
import org.jbpm.workflow.instance.node.DynamicUtils;
import org.kie.api.KieServices;
import org.kie.api.event.process.DefaultProcessEventListener;
import org.kie.api.event.process.ProcessStartedEvent;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.manager.RuntimeEnvironment;
import org.kie.api.runtime.manager.RuntimeEnvironmentBuilder;
import org.kie.api.runtime.manager.RuntimeManagerFactory;
import org.kie.api.runtime.process.WorkItem;
import org.kie.api.runtime.process.WorkItemHandler;
import org.kie.api.runtime.process.WorkItemManager;
import org.kie.api.runtime.process.WorkflowProcessInstance;
public class RequestUI extends JFrame {
private static final long serialVersionUID = 510l;
private int requestId = 0;
private JTextField nameField;
private JTextField amountField;
private JTextField signalField;
private JTextField processField;
private KieSession ksession;
private WorkflowProcessInstance processInstance;
public static void main(String[] args) {
new RequestUI().setVisible(true);
}
public RequestUI() {
setSize(new Dimension(400, 300));
setTitle("Requests");
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
initializeComponent();
}
private void initializeComponent() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
getRootPane().setLayout(new BorderLayout());
getRootPane().add(panel, BorderLayout.CENTER);
JLabel nameLabel = new JLabel("Name");
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(nameLabel, c);
nameField = new JTextField();
c = new GridBagConstraints();
c.gridx = 1;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
panel.add(nameField, c);
JLabel amountLabel = new JLabel("Amount");
c = new GridBagConstraints();
c.gridy = 1;
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(amountLabel, c);
amountField = new JTextField();
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 1;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
panel.add(amountField, c);
JButton selectButton = new JButton("Request");
selectButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
select();
}
});
c = new GridBagConstraints();
c.gridy = 2;
c.insets = new Insets(5, 5, 5, 5);
panel.add(selectButton, c);
JLabel signalLabel = new JLabel("Signal");
c = new GridBagConstraints();
c.gridy = 3;
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(signalLabel, c);
signalField = new JTextField();
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 3;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
panel.add(signalField, c);
JButton signalButton = new JButton("Signal");
signalButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
signal();
}
});
c = new GridBagConstraints();
c.gridy = 4;
c.insets = new Insets(5, 5, 5, 5);
panel.add(signalButton, c);
JLabel addLabel = new JLabel("Process");
c = new GridBagConstraints();
c.gridy = 5;
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(addLabel, c);
processField = new JTextField("com.sample.contactCustomer");
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 5;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
panel.add(processField, c);
JButton addButton = new JButton("Dynamically add sub-process");
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
addSubProcessInstance();
}
});
c = new GridBagConstraints();
c.gridy = 6;
c.gridwidth = 2;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
panel.add(addButton, c);
ksession = createKieSession();
}
private void select() {
int id = ++this.requestId;
Request request = new Request(id + "");
request.setPersonId(nameField.getText());
request.setAmount(Long.parseLong(amountField.getText()));
if (ksession == null) {
ksession = createKieSession();
}
ksession.insert(request);
Map params = new HashMap();
params.put("request", request);
processInstance = (WorkflowProcessInstance) ksession.startProcess("com.sample.requestHandling", params);
ksession.insert(processInstance);
// rule validation
ksession.fireAllRules();
}
private void signal() {
ksession.signalEvent(signalField.getText(), null, processInstance.getId());
}
private void addSubProcessInstance() {
DynamicNodeInstance dynamicNodeInstance = (DynamicNodeInstance)
processInstance.getNodeInstances().iterator().next();
DynamicUtils.addDynamicSubProcess(dynamicNodeInstance, ksession, "com.sample.contactCustomer", null);
}
private KieSession createKieSession() {
try {
final KieSession ksession = getKieSession();
KieServices.Factory.get().getLoggers().newThreadedFileLogger(ksession, "test", 1000);
UIWorkItemHandler handler = new UIWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
handler.setVisible(true);
ksession.getWorkItemManager().registerWorkItemHandler("Email", new WorkItemHandler() {
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
System.out.println("Sending email ...");
manager.completeWorkItem(workItem.getId(), null);
}
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
}
});
Person person = new Person("john", "John Doe");
person.setAge(40);
ksession.insert(person);
person = new Person("krisv", "Kris Verlaenen");
person.setAge(30);
ksession.insert(person);
person = new Person("baby", "Baby");
person.setAge(1);
ksession.insert(person);
ksession.addEventListener(new DefaultProcessEventListener() {
public void beforeProcessStarted(ProcessStartedEvent event) {
ksession.insert(event);
}
});
return ksession;
} catch (Throwable t) {
throw new RuntimeException("Could not initialize session!", t);
}
}
private static KieSession getKieSession() throws Exception {
RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get().newEmptyBuilder()
.addAsset(KieServices.Factory.get().getResources().newClassPathResource("request/requestHandling.bpmn"), ResourceType.BPMN2)
.addAsset(KieServices.Factory.get().getResources().newClassPathResource("request/contactCustomer.bpmn"), ResourceType.BPMN2)
.addAsset(KieServices.Factory.get().getResources().newClassPathResource("request/validation.drl"), ResourceType.DRL)
.addAsset(KieServices.Factory.get().getResources().newClassPathResource("request/eventProcessing.drl"), ResourceType.DRL)
.addAsset(KieServices.Factory.get().getResources().newClassPathResource("request/exceptions.drl"), ResourceType.DRL)
.addAsset(KieServices.Factory.get().getResources().newClassPathResource("request/adhoc.drl"), ResourceType.DRL)
.get();
return RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment).getRuntimeEngine(null).getKieSession();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy