
jadex.providedservice.impl.BpmnProvidedServiceLoader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of providedservicebpmn Show documentation
Show all versions of providedservicebpmn Show documentation
Provided service support for bpmn
The newest version!
package jadex.providedservice.impl;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import jadex.bpmn.model.MActivity;
import jadex.bpmn.model.MBpmnModel;
import jadex.bpmn.model.MSubProcess;
import jadex.common.ClassInfo;
import jadex.common.UnparsedExpression;
import jadex.javaparser.SJavaParser;
import jadex.model.modelinfo.IModelInfo;
import jadex.providedservice.impl.service.AbstractServiceInvocationHandler;
import jadex.providedservice.impl.service.ProvidedServiceImplementation;
import jadex.providedservice.impl.service.ProvidedServiceInfo;
import jadex.providedservice.impl.service.ProvidedServiceModel;
public class BpmnProvidedServiceLoader
{
public static Object readFeatureModel(IModelInfo modelinfo)
{
MBpmnModel model = (MBpmnModel)modelinfo.getRawModel();
ProvidedServiceModel ret = null;
ClassLoader cl = BpmnProvidedServiceLoader.class.getClassLoader();
Map exts = model.getExtension("providedservice");
if(exts!=null)
{
ret = new ProvidedServiceModel();
for(String name: exts.keySet())
{
Map attrs = (Map)exts.get(name);
//String name = attrs.get("name");
ClassInfo itrface = attrs.get("interface") != null? new ClassInfo(attrs.get("interface")) : null;
ClassInfo clazz = attrs.get("class") != null? new ClassInfo(attrs.get("class")) : null;
String proxytype = attrs.get("proxytype");
String impl = attrs.get("implementation");
ProvidedServiceInfo ps = new ProvidedServiceInfo();
ps.setName(name);
ps.setType(itrface);
ps.setImplementation(new ProvidedServiceImplementation());
ps.getImplementation().setClazz(clazz);
ps.getImplementation().setProxytype(proxytype);
ps.getImplementation().setValue(impl);
ret.addService(ps);
}
}
final Map> evtsubstarts = model.getEventSubProcessStartEventMapping();
if(evtsubstarts!=null)
{
//ProvidedServiceInfo[] psis = modelinfo.getProvidedServices();
ProvidedServiceInfo[] psis = ret!=null? ret.getServices(): null;
Set> haspsis = new HashSet>();
if(psis!=null)
{
for(ProvidedServiceInfo psi: psis)
{
haspsis.add(psi.getType().getType(cl));
}
}
for(Map.Entry> entry: evtsubstarts.entrySet())
{
Class> iface = null;
List macts = entry.getValue();
for(MActivity mact: macts)
{
if(MBpmnModel.EVENT_START_MESSAGE.equals(mact.getActivityType()))
{
if(mact.hasPropertyValue(MActivity.IFACE))
{
if(iface==null)
{
UnparsedExpression uexp = mact.getPropertyValue(MActivity.IFACE);
iface = (Class>)SJavaParser.parseExpression(uexp, modelinfo.getAllImports(), cl).getValue(null);
}
if(iface!=null && !haspsis.contains(iface))
{
// found interface without provided service impl
break;
}
}
}
}
// todo: provided service scope
if(iface!=null && !haspsis.contains(iface))
{
String exp = "java.lang.reflect.Proxy.newProxyInstance($component.getClassLoader(),"
+ "new Class[]{"+iface.getName()+".class"
+ "}, new jadex.providedservice.impl.ProcessServiceInvocationHandler($component, \""+entry.getKey().getId()+"\"))";
ProvidedServiceImplementation psim = new ProvidedServiceImplementation(null, exp, AbstractServiceInvocationHandler.PROXYTYPE_DECOUPLED, null);
ProvidedServiceInfo psi = new ProvidedServiceInfo("internal_"+iface.getName(), iface, psim);
//modelinfo.addProvidedService(psi);
if(ret==null)
ret = new ProvidedServiceModel();
ret.addService(psi);
}
}
}
return ret;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy