Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions dsf-bpe/dsf-bpe-process-api-v1-impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@
<artifactId>hapi-fhir-validation-resources-r4</artifactId>
<version>${hapi.fhir.version.v1}</version>
</dependency>

<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
</dependency>

<dependency>
<groupId>org.apache.logging.log4j</groupId>
Expand Down Expand Up @@ -194,6 +199,10 @@
<artifactId>hapi-fhir-base</artifactId>
<version>${hapi.fhir.version.v1}</version>
</artifactItem>
<artifactItem>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
</artifactItem>
</artifactItems>
</configuration>
</execution>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.Objects;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.operaton.bpm.engine.delegate.DelegateExecution;
import org.springframework.beans.factory.InitializingBean;

import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import java.util.Objects;
import java.util.function.Function;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.ResourceType;
import org.hl7.fhir.r4.model.StringType;
import org.hl7.fhir.r4.model.Task;
import org.hl7.fhir.r4.model.Task.ParameterComponent;
import org.operaton.bpm.engine.delegate.DelegateExecution;
import org.operaton.bpm.engine.delegate.ExecutionListener;
import org.springframework.beans.factory.InitializingBean;

public abstract class AbstractListener implements ExecutionListener, InitializingBean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import java.util.function.Function;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.hl7.fhir.r4.model.Task;
import org.operaton.bpm.engine.delegate.DelegateExecution;
import org.operaton.bpm.engine.delegate.ExecutionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import java.util.Objects;
import java.util.function.Function;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.hl7.fhir.r4.model.Task;
import org.hl7.fhir.r4.model.Task.TaskStatus;
import org.operaton.bpm.engine.delegate.DelegateExecution;
import org.operaton.bpm.engine.delegate.ExecutionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -116,4 +116,4 @@ private void logEnd(boolean subProcess, Task endTask, Task mainTask)
getCurrentTime(), endTaskUrl, requester, businessKey);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import java.util.function.Function;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.hl7.fhir.r4.model.Task;
import org.operaton.bpm.engine.delegate.DelegateExecution;
import org.operaton.bpm.engine.delegate.ExecutionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
import java.util.Objects;
import java.util.function.Function;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.ResourceType;
import org.hl7.fhir.r4.model.StringType;
import org.hl7.fhir.r4.model.Task;
import org.hl7.fhir.r4.model.Task.ParameterComponent;
import org.operaton.bpm.engine.delegate.DelegateExecution;

import dev.dsf.bpe.api.Constants;
import dev.dsf.bpe.api.logging.AbstractPluginMdc;
Expand Down Expand Up @@ -89,4 +89,4 @@ private String getFirstInputParameter(Task task, Coding code)
.filter(v -> v instanceof StringType).map(v -> (StringType) v).map(StringType::getValue).findFirst()
.orElse(null);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
package dev.dsf.bpe.v1.plugin;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;

import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Handle;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;

public class ProcessPluginClassLoader extends URLClassLoader
{
private static final String FROM_PACKAGE = "org/camunda/bpm";
private static final String TO_PACKAGE = "org/operaton/bpm";

public ProcessPluginClassLoader(String name, URL[] urls, ClassLoader parent)
{
super(name, urls, parent);
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException
{
try (InputStream is = getResourceAsStream(name.replace('.', '/') + ".class"))
{
if (is == null)
throw new ClassNotFoundException(name);

ClassReader reader = new ClassReader(is);
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES)
{
@Override
protected ClassLoader getClassLoader()
{
return ProcessPluginClassLoader.this;
}
};

ClassVisitor visitor = new ClassVisitor(Opcodes.ASM9, writer)
{
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces)
{
super.visit(version, access, name, signature, replace(superName), replaceAll(interfaces));
}

@Override
public FieldVisitor visitField(int access, String name, String descriptor, String signature,
Object value)
{
return super.visitField(access, name, replace(descriptor), replace(signature), value);
}

@Override
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature,
String[] exceptions)
{
MethodVisitor mv = super.visitMethod(access, name, replace(descriptor), replace(signature),
replaceAll(exceptions));

return new MethodVisitor(Opcodes.ASM9, mv)
{
@Override
public void visitTypeInsn(int opcode, String type)
{
super.visitTypeInsn(opcode, replace(type));
}

@Override
public void visitFieldInsn(int opcode, String owner, String name, String descriptor)
{
super.visitFieldInsn(opcode, replace(owner), name, replace(descriptor));
}

@Override
public void visitMethodInsn(int opcode, String owner, String name, String descriptor,
boolean isInterface)
{
super.visitMethodInsn(opcode, replace(owner), name, replace(descriptor), isInterface);
}

@Override
public void visitLdcInsn(Object value)
{
if (value instanceof Type t)
value = Type.getType(replace(t.getDescriptor()));
else if (value instanceof String s)
value = replace(s);

super.visitLdcInsn(value);
}

@Override
public void visitInvokeDynamicInsn(String name, String descriptor, Handle bootstrapMethodHandle,
Object... bootstrapMethodArguments)
{
super.visitInvokeDynamicInsn(name, replace(descriptor), bootstrapMethodHandle,
replaceMethodArguments(bootstrapMethodArguments));
}
};
}
};

reader.accept(visitor, ClassReader.EXPAND_FRAMES);

byte[] modified = writer.toByteArray();

return defineClass(name, modified, 0, modified.length);
}
catch (IOException e)
{
throw new ClassNotFoundException("Failed to load class: " + name, e);
}
}

private String replace(String name)
{
return name == null ? null : name.replace(FROM_PACKAGE, TO_PACKAGE);
}

private String[] replaceAll(String[] names)
{
if (names == null)
return null;

String[] result = new String[names.length];

for (int i = 0; i < names.length; i++)
result[i] = replace(names[i]);

return result;
}

private Object[] replaceMethodArguments(Object... args)
{
Object[] newArgs = new Object[args.length];

for (int i = 0; i < args.length; i++)
{
Object arg = args[i];
if (arg instanceof Type t)
newArgs[i] = Type.getType(replace(t.getDescriptor()));
else if (arg instanceof Handle h)
newArgs[i] = new Handle(h.getTag(), h.getOwner(), h.getName(), replace(h.getDesc()), h.isInterface());
else
newArgs[i] = arg;
}

return newArgs;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package dev.dsf.bpe.v1.plugin;

import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Path;
import java.util.stream.Stream;

import org.camunda.bpm.engine.impl.variable.serializer.TypedValueSerializer;
import org.operaton.bpm.engine.impl.variable.serializer.TypedValueSerializer;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

Expand All @@ -25,9 +26,15 @@ public ProcessPluginFactoryImpl(ClassLoader apiClassLoader, ApplicationContext a
ProcessPluginDefinition.class);
}

@Override
protected URLClassLoader createPluginClassLoader(String name, URL[] urls, ClassLoader parent)
{
return new ProcessPluginClassLoader(name, urls, parent);
}

@Override
protected ProcessPlugin createProcessPlugin(Object processPluginDefinition, boolean draft, Path jarFile,
URLClassLoader pluginClassLoader)
ClassLoader pluginClassLoader)
{
return new ProcessPluginImpl((ProcessPluginDefinition) processPluginDefinition, API_VERSION, draft, jarFile,
pluginClassLoader, environment, apiApplicationContext, serverBaseUrl);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,6 @@
import java.util.function.Function;
import java.util.function.Predicate;

import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.camunda.bpm.engine.delegate.TaskListener;
import org.camunda.bpm.engine.delegate.VariableScope;
import org.camunda.bpm.engine.impl.bpmn.parser.FieldDeclaration;
import org.camunda.bpm.engine.impl.util.ClassDelegateUtil;
import org.camunda.bpm.engine.variable.value.PrimitiveValue;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.ActivityDefinition;
import org.hl7.fhir.r4.model.CodeSystem;
Expand All @@ -35,6 +28,13 @@
import org.hl7.fhir.r4.model.Task;
import org.hl7.fhir.r4.model.Task.TaskStatus;
import org.hl7.fhir.r4.model.ValueSet;
import org.operaton.bpm.engine.delegate.ExecutionListener;
import org.operaton.bpm.engine.delegate.JavaDelegate;
import org.operaton.bpm.engine.delegate.TaskListener;
import org.operaton.bpm.engine.delegate.VariableScope;
import org.operaton.bpm.engine.impl.bpmn.parser.FieldDeclaration;
import org.operaton.bpm.engine.impl.util.ClassDelegateUtil;
import org.operaton.bpm.engine.variable.value.PrimitiveValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.Locale;

import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.operaton.bpm.engine.delegate.ExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import java.nio.charset.StandardCharsets;
import java.util.Objects;

import org.camunda.bpm.engine.impl.variable.serializer.PrimitiveValueSerializer;
import org.camunda.bpm.engine.impl.variable.serializer.ValueFields;
import org.camunda.bpm.engine.variable.impl.value.UntypedValueImpl;
import org.hl7.fhir.r4.model.Resource;
import org.operaton.bpm.engine.impl.variable.serializer.PrimitiveValueSerializer;
import org.operaton.bpm.engine.impl.variable.serializer.ValueFields;
import org.operaton.bpm.engine.variable.impl.value.UntypedValueImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import java.util.Map;

import org.camunda.bpm.engine.variable.impl.type.PrimitiveValueTypeImpl;
import org.camunda.bpm.engine.variable.impl.value.PrimitiveTypeValueImpl;
import org.camunda.bpm.engine.variable.type.PrimitiveValueType;
import org.camunda.bpm.engine.variable.value.PrimitiveValue;
import org.camunda.bpm.engine.variable.value.TypedValue;
import org.hl7.fhir.r4.model.Resource;
import org.operaton.bpm.engine.variable.impl.type.PrimitiveValueTypeImpl;
import org.operaton.bpm.engine.variable.impl.value.PrimitiveTypeValueImpl;
import org.operaton.bpm.engine.variable.type.PrimitiveValueType;
import org.operaton.bpm.engine.variable.value.PrimitiveValue;
import org.operaton.bpm.engine.variable.value.TypedValue;

public final class FhirResourceValues
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import java.io.IOException;
import java.util.Objects;

import org.camunda.bpm.engine.impl.variable.serializer.PrimitiveValueSerializer;
import org.camunda.bpm.engine.impl.variable.serializer.ValueFields;
import org.camunda.bpm.engine.variable.impl.value.UntypedValueImpl;
import org.operaton.bpm.engine.impl.variable.serializer.PrimitiveValueSerializer;
import org.operaton.bpm.engine.impl.variable.serializer.ValueFields;
import org.operaton.bpm.engine.variable.impl.value.UntypedValueImpl;
import org.springframework.beans.factory.InitializingBean;

import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down
Loading