bsayan2 81c47c2b04
MNT-24883 adding source file name to transform options
Added source file name to transform options if exist in nodeService. It will be used in ATS to maintain consistency in transform for filenames.
2025-06-17 14:13:41 +05:30
..
2022-09-14 13:40:19 +01:00

Common base code for T-Engines

This project provides a common base for T-Engines and supersedes the original base.

This project provides a base Spring Boot application (as a jar) to which transform specific code may be added. It includes actions such as communication between components and logging.

For more details on build a custom T-Engine and T-Config, please refer to the docs in ACS Packaging, including:

Overview

A T-Engine project which extends this base is expected to provide the following:

  • An implementation of the TransformEngine interface to describe the T-Engine.
  • Implementations of the CustomTransformer interface with the actual transform code.
  • An application-default.yaml file to define a unique name for the message queue to the T-Engine.

The TransformEngine and CustomTransformer implementations should have an @Component annotation and be in or below theorg.alfresco.transform package, so that they will be discovered by the base T-Engine.

The TransformEngine.getTransformConfig() method typically reads a json file. The names in the config should match the names returned by the CustomTransformer implementations.

Example TransformEngine

The TransformEngineName is important if the config from multiple T-Engines is being combined as they are sorted by name.

package org.alfresco.transform.example;

import com.google.common.collect.ImmutableMap;
import org.alfresco.transform.base.TransformEngine;
import org.alfresco.transform.base.probes.ProbeTransform;
import org.alfresco.transform.config.reader.TransformConfigResourceReader;
import org.alfresco.transform.config.TransformConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class HelloTransformEngine implements TransformEngine
{
    @Autowired
    private TransformConfigResourceReader transformConfigResourceReader;

    @Override
    public String getTransformEngineName()
    {
        return "0200_hello";
    }

    @Override
    public String getStartupMessage()
    {
        return "Startup "+getTransformEngineName()+"\nNo 3rd party licenses";
    }

    @Override
    public TransformConfig getTransformConfig()
    {
        return transformConfigResourceReader.read("classpath:hello_engine_config.json");
    }

    @Override
    public ProbeTransform getProbeTransform()
    {
        return new ProbeTransform("probe.txt", "text/plain", "text/plain",
            ImmutableMap.of("sourceEncoding", "UTF-8", "language", "English"),
            11, 10, 150, 1024, 1, 60 * 2);
    }
}

Example CustomTransformer

package org.alfresco.transform.example;

import org.alfresco.transform.base.CustomTransformer;
import org.alfresco.transform.base.TransformManager;
import org.springframework.stereotype.Component;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;

@Component
public class HelloTransformer implements CustomTransformer
{
    @Override
    public String getTransformerName()
    {
        return "hello";
    }

    @Override
    public void transform(String sourceMimetype, InputStream inputStream, String targetMimetype,
            OutputStream outputStream, Map<String, String> transformOptions, TransformManager transformManager)
            throws Exception
    {
        String name = new String(inputStream.readAllBytes(), transformOptions.get("sourceEncoding"));
        String greeting = String.format(getGreeting(transformOptions.get("language")), name);
        byte[] bytes = greeting.getBytes(transformOptions.get("sourceEncoding"));
        outputStream.write(bytes, 0, bytes.length);
    }

    private String getGreeting(String language)
    {
        return "Hello %s";
    }
}

Example T-Config resources/hello_engine_config.json

{
  "transformOptions": {
    "helloOptions": [
      {"value": {"name": "language"}},
      {"value": {"name": "sourceEncoding"}}
    ]
  },
  "transformers": [
    {
      "transformerName": "hello",
      "supportedSourceAndTargetList": [
        {"sourceMediaType": "text/plain", "targetMediaType": "text/plain" }
      ],
      "transformOptions": [
        "helloOptions"
      ]
    }
  ]
}

Example properties resources/application-default.yaml

As can be seen the following defines a default which can be overridden by an environment variable.

queue:
  engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.libreoffice.acs}

Example ProbeTransform test file resources/probe.txt

Jane