-
Notifications
You must be signed in to change notification settings - Fork 10
[Feature] Simulation
Jinyoung Jang edited this page Sep 20, 2016
·
4 revisions
EditorPanel.java contains a ServiceMethod to invoke the simulatable Editor's method simulate()
@ServiceMethod(callByContent = true, target = ServiceMethod.TARGET_POPUP)
public void simulate() throws Exception {
TransactionContext.getThreadLocalInstance().setSharedContext("isDevelopmentTime", true);
save();
if(getEditor() instanceof Simulatable) {
ModalWindow runner = new ModalWindow();
runner.setWidth(1000);
runner.setTitle("Simulation");
IResource resource = new DefaultResource();
resource.setPath(getResourcePath());
runner.setPanel(((Simulatable) getEditor()).simulator(resource));
MetaworksRemoteService.wrapReturn(runner);
}else
MetaworksRemoteService.wrapReturn(new ModalWindow(new Label("This resource is not supporting simulation")));
}
package org.uengine.modeling.resource.editor;
...
public class ProcessEditor extends ProcessModeler implements IEditor<ProcessDefinition>, Simulatable {
....
@Override
public Object simulator(IResource resource) {
ProcessManagerRemote processManager = MetaworksRemoteService.getComponent(ProcessManagerRemote.class);
ProcessMap processMap = new ProcessMap();
processMap.setName("[Test] " + resource.getName());
processMap.setDefId(resource.getPath().substring(resource.getPath().indexOf("/") + 1));
MetaworksRemoteService.autowire(processMap);
try {
return processMap.simulate();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
ProcessMap.java provides a starting user input form for new process instance and run process definitions as simulation instances.
After instantiating a new simulation instance, mark the instances isSim = 1 in the database table bpm_procinst so that they can be distinguished with regular instances.
package org.uengine.social;
public class SocialBPMInitActivityFilter implements SensitiveActivityFilter, Serializable {
...
@Override
public void onEvent(Activity activity, ProcessInstance instance, String eventName, Object payload) throws Exception {
// mark isSim = 1 if the process is simulation process
if(instance instanceof EJBProcessInstance){
EJBProcessInstance ejbProcessInstance = (EJBProcessInstance) instance;
if(ejbProcessInstance.getProcessInstanceDAO().getMainInstId()==null && "instance.beforeStart".equals(eventName)){
if(instance.getName().startsWith("[Test]")){
ejbProcessInstance.getProcessInstanceDAO().set("isSim", 1);
}
}
}
}
}
Check whether the existing running simulation instance and if exists, shows the existing simulation view instead showing the new instance form.
package org.uengine.modeling.resource.editor;
...
public class ProcessEditor extends ProcessModeler implements IEditor<ProcessDefinition>, Simulatable {
....
@Override
public Object simulator(IResource resource) {
............ here ..........
if(
else{
ProcessManagerRemote processManager = MetaworksRemoteService.getComponent(ProcessManagerRemote.class);
ProcessMap processMap = new ProcessMap();
processMap.setName("[Test] " + resource.getName());
processMap.setDefId(resource.getPath().substring(resource.getPath().indexOf("/") + 1));
MetaworksRemoteService.autowire(processMap);
try {
return processMap.simulate();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}