All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.net.bluesoft.awf.ext.droolsstep.DroolsStep Maven / Gradle / Ivy

package pl.net.bluesoft.awf.ext.droolsstep;

import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceAttribute;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceLog;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceSimpleAttribute;
import pl.net.bluesoft.rnd.processtool.steps.ProcessToolProcessStep;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AutoWiredProperty;

import java.util.*;

/**
 * @author [email protected]
 */
@AliasName(name = "DroolsStep")
public class DroolsStep implements ProcessToolProcessStep {

    @AutoWiredProperty
    private String ruleUrl;

    @Override
	public String invoke(ProcessInstance processInstance, Map params) throws Exception {

		ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
        if (ruleUrl.startsWith("/")) {
	        ruleUrl = ctx.getSetting("drools.rules.baseurl") +
                    ruleUrl;
        }
        List facts = new ArrayList();
        facts.add(processInstance);
		for (ProcessInstanceAttribute attr : processInstance.getProcessAttributes()) {
			if (attr instanceof ProcessInstanceSimpleAttribute) //drools has to load the class again, does not use instance.getClass() - why?
				facts.add(attr);
		}

        Map globals = new HashMap();
        HashMap resultMap = new HashMap();
        globals.put("result", resultMap);
        DroolsUtils.processRules(facts,globals, ruleUrl);
		String logEntryVal = (String) resultMap.get("logEntry");
		if (logEntryVal != null) {
			ProcessInstanceLog logEntry = new ProcessInstanceLog();
			logEntry.setEntryDate(Calendar.getInstance());
			logEntry.setLogType(ProcessInstanceLog.LOG_TYPE_INFO);
			logEntry.setState(ctx.getProcessDefinitionDAO().getProcessStateConfiguration(processInstance));
			logEntry.setEventI18NKey(logEntryVal);
			processInstance.addProcessLog(logEntry);
		}
		return (String) resultMap.get("value");
	}
    public String getRuleUrl() {
        return ruleUrl;
    }

    public void setRuleUrl(String ruleUrl) {
        this.ruleUrl = ruleUrl;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy