Skip to content

[Feature] Simulation

Jinyoung Jang edited this page Sep 20, 2016 · 4 revisions

Simulation Feature

EditorPanel.java

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")));
	}


ProcessEditor.java is a simulatable editor


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

ProcessMap.java provides a starting user input form for new process instance and run process definitions as simulation instances.

SocialBPMInitActivityFilter.java marks the instances as simulations

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);
                }
            }
        }
        
        
    }
}

ProcessEditor.java

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);
        }
    }


}


Clone this wiki locally