É possível em um modelo Telosys chamar uma função criada especificamente?

Aug 18 2020

Eu uso Telosys (https://www.telosys.org) para gerar o código-fonte do Python e funciona bem. Mas tenho uma necessidade específica que poderia ser resolvida chamando uma função de conversão específica.

É possível criar uma função específica e chamá-la dentro de um modelo Telosys?

Por exemplo: myFunction(“abc”)ou $something.myFunction(“abc”)ou qualquer outra coisa

Se necessário, é possível criar esta função em diferentes linguagens como Java, Python ou JavaScript.

Respostas

3 lgu Aug 19 2020 at 10:02

O Telosys foi projetado para ser extensível, então sim, você pode criar suas próprias funções e chamá-las em seus modelos. Como o Telosys é escrito em Java, você terá que criar essas funções em Java e, em seguida, usar o objeto " loader " no arquivo ".vm" para carregar sua classe e chamar os métodos definidos nesta classe.

Veja como fazer isso passo a passo:

  1. Use seu IDE preferido para criar uma classe Java definindo seu (s) método (s) específico (s). Esta classe pode estar em qualquer pacote (incluindo o "pacote padrão / sem nome"), os métodos podem ser "estáticos" se você não precisar de uma instância da classe.

  2. Compile esta classe (o objetivo é produzir um arquivo " .class " simples ou um arquivo " .jar ", se preferir)

  3. Coloque a classe (ou o jar) na pasta do pacote de modelos:

  • se você tiver um arquivo " .class " coloque-o na pasta " classes "
  • se você tiver um arquivo " .jar " coloque-o na pasta " lib "

Exemplos :

TelosysTools/templates/my-bundle/classes/MyClass.class
TelosysTools/templates/my-bundle/lib/my-lib.jar
  1. No arquivo de modelo (".vm"), use o objeto " $ loader " para carregar sua classe Java e chamar qualquer um de seus métodos. Consulte a referência de "$ loader" aqui:http://www.telosys.org/templates-doc/objects/loader.html

Se todos os seus métodos são “estáticos”, você não precisa de uma instância, então apenas use “ $ loader.loadClass () ”. Exemplo:

## load the class and keep it in a new “$Math” object (no instance created)
#set( $Math = $loader.loadClass("java.lang.Math")
## use the static methods of this class
$Math.random()

Se seus métodos não são "estáticos", então você precisa de uma instância, use " $ loader.newInstance () ". Exemplos :

## create an instance of StringBuilder and put it in the context with #set
#set( $strBuilder = $loader.newInstance('java.lang.StringBuilder') )
## use the instance to call a method
$strBuilder.append('aa') ## create new instance of a specific class : MyTool.class #set( $tool = $loader.newInstance('MyTool') ) ## use the instance to call a method $tool.myFunction()

Então, para resumir, você pode usar qualquer classe fornecida pelo Java-JRE (por exemplo, "Math", “StringBuilder”), você pode reutilizar as bibliotecas existentes adicionando um arquivo “.jar” (não se esqueça de adicionar as dependências necessárias se o jar não é independente) ou apenas adicione um único arquivo “.class”.