Search in sources :

Example 1 with Action

use of org.talend.sdk.component.api.service.Action in project component-runtime by Talend.

the class PluginGenerator method createService.

private byte[] createService(final JarOutputStream outputStream, final String packageName, final String name) throws IOException {
    final String className = packageName + "/AService.class";
    outputStream.putNextEntry(new ZipEntry(className));
    final ClassWriter writer = new ClassWriter(COMPUTE_FRAMES);
    writer.visitAnnotation(Type.getDescriptor(Service.class), true).visitEnd();
    writer.visit(V1_8, ACC_PUBLIC + ACC_SUPER, className.substring(0, className.length() - ".class".length()), null, Type.getInternalName(Object.class), null);
    writer.visitSource(className.replace(".class", ".java"), null);
    addConstructor(writer);
    final MethodVisitor action = writer.visitMethod(ACC_PUBLIC, "doAction", "(L" + packageName + "/AModel;)L" + packageName + "/AModel;", null, new String[0]);
    final AnnotationVisitor actionAnnotation = action.visitAnnotation(Type.getDescriptor(Action.class), true);
    actionAnnotation.visit("family", "proc");
    actionAnnotation.visit("value", name + "Action");
    actionAnnotation.visitEnd();
    action.visitCode();
    action.visitTypeInsn(NEW, packageName + "/AModel");
    action.visitInsn(DUP);
    action.visitMethodInsn(INVOKESPECIAL, packageName + "/AModel", "<init>", "()V", false);
    action.visitInsn(ARETURN);
    action.visitInsn(ARETURN);
    action.visitMaxs(1, 1);
    action.visitEnd();
    writer.visitEnd();
    return writer.toByteArray();
}
Also used : Action(org.talend.sdk.component.api.service.Action) ZipEntry(java.util.zip.ZipEntry) AnnotationVisitor(org.apache.xbean.asm6.AnnotationVisitor) ClassWriter(org.apache.xbean.asm6.ClassWriter) MethodVisitor(org.apache.xbean.asm6.MethodVisitor)

Aggregations

ZipEntry (java.util.zip.ZipEntry)1 AnnotationVisitor (org.apache.xbean.asm6.AnnotationVisitor)1 ClassWriter (org.apache.xbean.asm6.ClassWriter)1 MethodVisitor (org.apache.xbean.asm6.MethodVisitor)1 Action (org.talend.sdk.component.api.service.Action)1