# Telosys news

Find out what's new in each new version.

To stay informed of the latest news, you can also follow Telosys on

* **Twitter (@telosys)** : <https://twitter.com/telosys>&#x20;
* **LinkedIn** : <https://www.linkedin.com/company/telosys/>&#x20;


# Version 4.3.0 (2025-November)

<figure><img src="https://2543123082-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MZOF5Cw_8kkjHlQxg2e%2Fuploads%2FCNKWCKTjMTC2gZHK2GzL%2FTelosys-v430.png?alt=media&amp;token=22d8b35c-5f66-4d47-b25c-94f326c0973d" alt=""><figcaption></figcaption></figure>

**Telosys version 4.3.0** brings many significant improvements, such as **4 new neutral types** and new commands in the command-line interface, such as "**git**" and "**sql**".

See the details below:

## 🟠 Telosys model has now 4 new neutral types&#x20;

The **Telosys model grammar** has been enhanced with 4 new neutral types:

#### 🔷 **uuid**

This type is for "**Universally Unique Identifier**" (128-bit number used to uniquely identify information). A type that is now supported by almost all programming languages ​​and by some databases.&#x20;

#### 🔷 **datetime**

This type is intended for storing a **date** with a **time**.

#### 🔷 **datetimetz**

This type is like "**datetime**" but with "**Time Zone Offset**"

#### 🔷 **timetz**

This type is like "**time**" but with "**Time Zone Offset**"

ℹ️ the type "**timestamp**" is replaced by "**datetime**" and is now deprecated.\
It is maintained to ensure backward compatibility and can be considered a synonym of "**datetime**" .

For more details about new model types conversion to target language types&#x20;\
see <https://doc.telosys.org/target-languages>&#x20;

## 🟠 Target languages&#x20;

#### 🔷 Python - Type Hints

In Python, "**Type Hints**" allow developers to annotate code by specifying the expected types for variables and function arguments (type hints were introduced in Python 3.5).

Python “**Type Hints**” are now supported by Telosys:

* Define Python as the current target language&#x20;
  * &#x20;`#set( $env.language = 'Python' )`
* When Python is the current target language the "Type Hint" is used or returned by all objects using an attribute type:
  * &#x20;`$attribute.type`
  * &#x20;`$attribute.simpleType`
  * &#x20;`$fn.argumentsListWithType($entity.keyAttributes)` &#x20;
  * etc

For more details about model types conversion to Python type hints \
see <https://doc.telosys.org/target-languages/python>

## 🟠 Database configuration

#### 🔷 "databases.yaml"  simplification

Default values ​​have been added to simplify database configuration.

The "databases.yaml" file is therefore less verbose.

Example for PostgreSQL: <https://doc.telosys.org/project-databases/postgresql-database>

## 🟠 Telosys CLI&#x20;

#### 🔷 New "git" command

**Git** is now **embedded in Telosys-CLI** in order to execute some basic Git commands directly in the CLI, even if Git is not installed on the workstation.

This makes it easy to manage the creation and modification of **models** and **bundles**, which are made available as Git repositories.

Here are some examples of commands:

* **Init**   **`git initm`** (for a model)  or  **`git initb`** (for a bundle)
* **Clone    `git clonem`** (for a model)  or  **`git cloneb`** (for a bundle)
* **Status    `git statusm`** (for a model)  or  **`git statusb`** (for a bundle)
* **Publish    `git pubm`** (for a model)  or  **`git pubb`** (for a bundle)  => add + commit + push&#x20;

The "Git remote" is the current "Telosys depot" (GitHub, etc)

#### 🔷 New "sql" command

With this new version it is now possible to execute a **SQL script** on a database directly in Telosys-CLI..

Command usage:   **`sql database-id sql-file`**

The **database-id** is one of the databases defined in **databases.yaml**

## 🟠 Telosys objects for templates

#### 🔷 $model

* `$model.`**`entities`**  →  **NEW** (same as “allEntities”)
* `$model.`***`folderName`***  →  is now deprecated
* `$model.`***`type`***  →  is now deprecated

#### 🔷 $entity

* `$entity.`**`hasUuidAttribute`**`()`  →  **NEW**
* `$entity.`**`hasBinaryAttribute`**`()`  →  **NEW**
* `$entity.`**`hasTemporalAttribute`**`()`  →  **NEW**
* `$entity.`***`selectedLinks`*** → deprecated

#### 🔷 $attribute

* `$attribute.`**`isDatetimeType`**`()`  →  **NEW**
* `$attribute.`**`isDatetimetzType`**`()`  →  **NEW**
* `$attribute.`**`isTimetzType`**`()`  →  **NEW**
* `$attribute.`**`isUuidType`**`()`  →  **NEW**
* `$attribute.`***`dateAfterValue`***  → deprecated
* `$attribute.`***`hasDateAfterValidation`***  → deprecated
* `$attribute.`***`dateBeforeValue`***  → deprecated
* `$attribute.`***`hasDateBeforeValidation`***  → deprecated

#### 🔷 $link

* `$link.`*`isSelected`*`()`  →  removed (useless)&#x20;

#### 🔷 $java

* `$java.`**`hashCodeMethod`**`(..)`  and `$java.`**`equalsMethod`**`(..)`\
  parameters standardization, same parameters as in other languages
* new methods:
  * `$java.`**`validationAnnotations`**`(4, $attribute)`
  * `$java.`**`validationAnnotationsMultiline`**`(4, $attribute)`
  * `$java.`**`hasValidationAnnotations`**`($attribute)`

#### 🔷 $beanValidation  is now DEPRECATED

all methods have been moved in **$java** object

#### 🔷 $fn

* `$fn.`**`attributeNames`**`(..)`  →  **NEW**
* `$fn.`**`joinWithTransformation`**`(..)`  →  **NEW**
* *`$fn.`**`firstCharToUpperCase`*** → deprecated
* *`$fn.`**`tab`*** → deprecated

#### 🔷 $values

* `$values.`**`contains`**`(”val”)`  →  **NEW**
* `$values.`**`getValues`**`(attributes, separator)`  →  **NEW**

#### 🔷 $\_, $\_\_, $\_\_\_, etc

Special "empty variables" that can be used for indenting directives in templates.


# Version 4.2.0 (2024-November)

Version 4.2.0 mainly includes improvements to CLI commands and configuration.

### -> New variables usable in bundles (targets definition)

3 new variables have been added to offer greater flexibility in defining "targets" (in the bundle file):

* **${ENT}**  for current entity (to replace ${BEANNAME} in the future)
* **${BUN}** for current **bundle**&#x20;
* **${MOD}** for current **model**

Each variable can be used with the “\_UC” or “\_LC” suffix for upper/lower case

### -> Specific models folder&#x20;

It is now possible to define a specific directory to contain project models.

In the configuration file, simply define the “**SpecificModelsFolder**” property.\
To see the current "models folder" use "**cfg**" command.

### -> Notion of "depot"

A “**depot**” is the place where "bundles" and "models" are stored and available for installation. \
It's a set of "git repositories" usually located on GitHub

### -> Models installation

It's now possible to install "models" from a "depot" (from GitHub for now), just like for "bundles".

It can be useful to share models between teams.

### -> New commands to list and install "bundles" and "models"&#x20;

* “**lbd**” command -> List "bundles" available in the "depot for bundles"
* "**lmd**" command -> List "models" available in the "depot for models"
* "**im**" command -> Install "model(s)" from a depot

### -> Depots configuration (for bundles and models)

The "depots" to be used for storing and installing models can be defined in the configuration file.

A depot can now be of different types: **organization**, **any user** or **current user** (authenticated with a token)

See documentation for more details.

### -> GitHub authentication with "Personal Acces Token" (PAT)

The new command "**ght**" ("GitHub Token") alows to define (or remove) a "Personal Acces Token" that Telosys will use to call the GitHub API. The token is encrypted and stored locally (on the user workstation)&#x20;

By default the GitHub API is limited to 50 calls for the same IP address. Defining a token increase the "GitHub API rate limit", this can be useful to list and install "bundles" and "models" when multiple users are sharing the same external IP address in an enterprise (due to a proxy).

When a token is defined it's also possible to list and install bundles or models located in "private repositories" (if the authenticated user has the required privileges).

### -> Removing unnecessary commands

* The  "**ghu**" command is replaced by "**ght**" command
* The "**gh**" command has been removed (useless)

### -> "telosys" command

"**telosys**" is now the command to launch Telosys-CLI ;-)\
( "tt" is kept for backward compatibility )

### -> Some minor bug fixes and small improvements in commands


# Version 4.1.1 (2024-January)

Version 4.1.1 is a minor release with the following changes:&#x20;

* Model checking rules now allow foreign keys to reference attributes other than primary keys
* Proxy configuration is now operational (useful if accessing GitHub for bundles installation is via a proxy)&#x20;
* Some minor bugs have been fixed&#x20;


# Version 4.1.0 (2023-August)

Version 4.1.0 is an intermediate version providing significant improvements.

Model objects have been enriched (new objects and new attributes/functions for some objects).

Templates objects have been improved for more accurate code generation.

New target languages are now available.

Model creation from a database is now more customizable.

Deprecated or unnecessary elements have been removed.

Telosys-CLI has new commands.

See below for details :

* [Model](/version-4.1.0/model)
* [Templates](/version-4.1.0/templates)
* [Target languages](/version-4.1.0/target-languages)
* [Model from database](/version-4.1.0/model-from-database)
* [Telosys-CLI](/version-4.1.0/telosys-cli)


# Model

### New annotations&#x20;

* **@JoinEntity**  (for entity) : to explicitly define a 'join entity' (for ORM)
* **@Cascade** (for link) : for ORM cascade management (MERGE, REMOVE, etc)
* **@OrphanRemoval** (for link) : for ORM like JPA, Doctrine, etc

### Modified annotations

* **@AutoIncremented** : this annotation is now just a shortcut for 'GeneratedValue(IDENTITY)'
* **@GeneratedValue** : the parameters are different and simpler

### Model objects in template context

* $entity.hasGeneratedKey() : **new**&#x20;
* $entity.isJoinEntity() : now based on annotation @JoinEntity   <br>
* $attribute.fkPartsCount : **new**&#x20;
* $attribute.ini : **new**&#x20;
* $attribute.hasGeneratedValueStrategy(...)  : **new** &#x20;
* $attribute.hasGeneratedValueAllocationSize()  : **new**  \
  $attribute.generatedValueAllocationSize : **new** &#x20;
* $attribute.hasGeneratedValueInitialValue() : **new**  \
  $attribute.generatedValueInitialValue : **new** &#x20;
* $attribute.hasGeneratedValueSequenceName()  : **new**  $attribute.generatedValueSequenceName : **new** &#x20;
* $attribute.hasGeneratedValueTablePkValue() : **new** \
  $attribute.generatedValueTablePkValue: **new**&#x20;
* $attribute.generatedValueGenerator : removed  &#x20;
* $attribute.isSelected() : removed &#x20;
* $attribute.jdbcRecommendedJavaType : removed &#x20;
* $attribute.jdbcTypeCode : removed&#x20;
* $attribute.jdbcTypeName : removed  <br>
* $link.isOrphanRemoval() : **new**&#x20;
* $link.joinEntity : **new**  <br>
* $fk.isExplicit() : **new**,  true if 'real FK' ( with a name )
* $fk.isComposite() :  **new**,  true if more than 1 attribute<br>
* $fkPart.referencedAttribute : new &#x20;
* $fkPart.referencedEntity : new  <br>


# Templates

### Generator objects&#x20;

In addition to the evolutions concerning the model, some technical objects have also changed.

#### New objects&#x20;

* **$csharp** : utility functions for **C#** code generation
* **$php** : utility functions for **PHP** code generation&#x20;

#### Changed objects&#x20;

* **$java** : toStringMethod(..) new parameters (same as in $csharp and $php )
* **$jdbc** : provides automatic conversion to SQL column and type,\
  useless functions removed :  \
  &#x20;  resultSetGetter(), valueForPreparedStatement(), preparedStatementSetter()&#x20;
* **$env**.typeWithNullableMark = true/false (for target languages with nullable mark : PHP, C#, ...)

#### Deprecated objects&#x20;

* **$today** : use $now instead

### New features&#x20;

* Improvements regarding generic ORM 'GeneratedValues' ('AutoIncremented')
* JPA code generation improvements ( $jpa object ) : generated value, cascade, etc
* Many to many relationship is now simpler to manage ( with JoinTable based on @JoinEntity )


# Target languages

### Kotlin&#x20;

Kotlin is a new predefined target language added in version 4.1.0&#x20;

It supports nullable types.

### C\#

C# target language has been improved&#x20;

New temporal types have been added :&#x20;

* **DateOnly** ( Day / Month / Year ) &#x20;
* **TimeOnly** ( Hour / Min / Sec / NanoSec )

Nullable types are now supported for C#

### PHP

Typed class properties have been added in PHP 7.4&#x20;

So it's now possible to generate PHP code with the type corresponding to the attribute.

The type can be : string, bool, int, float or DateTime

Nullable types are supported for PHP

### Nullable types&#x20;

Nullable types are now automatically provided for the languages concerned ( C#, PHP and Kotlin )

A nullable type is a type with a "nullable mark" at the end or at the beginning of the type,   \
for example : &#x20;

* "in&#x74;**?**" and "strin&#x67;**?**" for C#&#x20;
* "**?**&#x69;nt" and "**?**&#x73;tring" for PHP

The "nullable mark" is automatically added to the type if : \
&#x20;  the attribute is 'nullable' \
&#x20;  and \
&#x20;  $env.typeWithNullableMark  is set to TRUE


# Model from database

Creating a new model from a database is now more accurate and more flexible.

### New model information retrieved from database : &#x20;

* Entity level :&#x20;
  * @DbCatalog(..)&#x20;
  * @DbSchema(..)&#x20;
  * @DbTable(..)&#x20;
  * @DbView <br>
* Attribute level :&#x20;
  * @DbType(..)&#x20;
  * @DbName(..)

### Customization in "databases.yaml"

New options allow you to define more precisely what you want to get from the database :&#x20;

```
linksManyToOne: true
linksOneToMany: false
linksManyToMany: false

dbComment : false
dbCatalog : false
dbSchema : false
dbTable : false
dbView : false
dbName  :     false    
dbType :     false    
dbDefaultValue: false
```

### Other&#x20;

* model files are now always created in UTF-8


# Telosys-CLI

Telosys-CLI version 4.1.0 brings some minor improvements and 3 new commands.

### New commands&#x20;

#### "genb" command&#x20;

"genb" means "Generation in Batch mode".

It allows to launch code generation for multiple models and multiple bundles of templates

For example  `genb * *`   launch generation for all models with all bundles of templates&#x20;

#### "fx" command

"fx" means "File eXplorer"

It opens a file explorer located in the current directory.

The file explorer tool is customizable in "telosys-cli.cfg" ( FileExplorerCommand ) so you can use your prefered tool.

#### "exit" command   ;-)

Just a synonym for "q" command, for those who are used to quit with the "exit" command in other tools. Telosys don't want to change your habits ;-)

### Minor changes&#x20;

* commands standardization (options and behavior)
* "-none" option for commands "b" and "m" (to clear current model or bundle)
* partial name generalization in many commands (for bundle name and model name)


# Version 4.0.0 (2022-April)

**Version 4.0.0** (2022, April) is a **major release** with many important changes.

The DSL model has been improved (with a new parser) and is now the unique model for Telosys.

For now version 4.0.0 is only available with **Telosys-CLI**

### Models

Since version 4.0.0 there is **only one type of model**: the **DSL model**.&#x20;

The DSL model has been enhanced to support all functionality previously available only in "db-model", thus the "db-model" is no longer useful.&#x20;

**Annotations** and **tags** are now usable at **entity** level.

It is possible to **create a new DSL model from a database schema** (as for the previous "db-model")&#x20;

The DSL model has a new structure: \
each model is completely contained in a directory.\
It is more convenient to exchange and store models.&#x20;

See: <https://doc.telosys.org/dsl-model>

Many new annotations have been added to enrich the DSL model.&#x20;

The DSL model offers now 55 annotations.

See: <https://doc.telosys.org/dsl-model/annotations>

### Templates

New objects and functions have been added in the generator context to make it easier to write templates.&#x20;

For example, a combination of new annotations and new functions simplifies SQL code generation.

Among others, here are some new objects usable in the templates: \
$sql, $reference, $factory

### Databases

The databases are now defined in a ".yaml" file : "**databases.yaml**"

A "yaml" file is more convenient for editing, the yaml format being supported by most editors.


# Version 3.3.0 (2021-July )

Version 3.3.0 is an intermediate version preparing the future version 4.0.0.

This version mainly brings improvements for the **DSL model** and the **templates**.

### DSL model :

* Composite Primary Key
* Explicit Foreign Keys&#x20;
* Explicit links between entities
* The concept of "tag" allowing a better customization of the model
* New annotations

### Templates :

* New objects usable in templates ( $bundle, $now, $file, $fkPart )
* Possibility to cancel a generation in a template with the new directive  "#cancel"
* Improvement of existing objects
* Using files in templates (text files, csv files, etc)
* Java JPA customization for default behavior

### New documentation :

The new Telosys reference documentation is available here :\
<https://doc.telosys.org/>

Thanks to [GitBook](https://www.gitbook.com/) for supporting Open Source projects.


# DSL model annotations

### New annotations

* Explicit **Foreign Key** with&#x20;
  * **@FK(**&#x78;&#x78;**)**
* **@Insertable(**&#x74;rue|fals&#x65;**)** &#x20;
* **@Updatable(**&#x74;rue|fals&#x65;**)**
* **@Optional**
* **@Transient**

### New annotations for links&#x20;

* Link **fetch type** :
  * **@FetchTypeLazy**&#x20;
  * **@FetchTypeEager**<br>
* Link by **attribute** with
  * **@LinkByAttr(**&#x61;ttribNam&#x65;**)**&#x20;
  * **@LinkByAttr(**&#x61;ttr1 > refAttr1 ,  attr2 > refAttr2 , ...**)**<br>
* Link by **column** with
  * **@LinkByCol(**&#x63;olumn\[, column2 \[, columnN ] ] **)**<br>
* Link by **Foreign Key** :
  * **@LinkByFK(**&#x66;kNam&#x65;**)**<br>
* Link by "**join entity**" (for "many to many" cardinality)
  * **@LinkByJoinEntity(**&#x65;ntityNam&#x65;**)**<br>
* Link **cardinality** :
  * **@ManyToMany**&#x20;
  * **@OneToOne**<br>
* Link "mapped by" (for ORM) :
  * **@MappedBy(**&#x61;ttributeNam&#x65;**)**

### Annotation removed

The useless annotation "**@SqlType**" has been removed


# DSL model "Tags"

Although Telosys now has many annotations for customizing entities, not all use cases can be predicted in advance and it is not possible to define enough annotations to meet all needs.

This is why the "tags" have been added.&#x20;

The user can now add information to the attributes of an entity by definig tags of his choice.

Tags are an important advance in the adaptability and flexibility of models.

### General principles for tags:

* a tag starts with the character "#"
* it is placed in the same block as the annotations (between {and})
* it can have any name
* it may or may not have a value&#x20;
* in the templates we can check if a tag is present or not and possibly use its value
  * $attrib.**hasTag**("tagName") \
    Check if "tagName" is defined for $attrib
  * $attrib.**tagValue**("tagName")\
    Get "tagName" value

### Example 1 - Simple tag without value :

Tag "**mytag**" in entity file :

```
MyEntity {
  id  : int { @Id } ;

  // tag "mytag" (without value) :
  comment : string { #mytag } ;
}
```

Usage in a template :

```
#if ( $attrib.hasTag("mytag") )  
## do something ...
#end
```

### Example 2 - Tag with value :

Tag "**OpenAPIFormat**" in entity file :

```
MyEntity {
  id  : int { @Id } ;

  // tag "OpenAPIFormat" with value :
  val : long  { #OpenAPIFormat(int64) } ;
}
```

Usage in a template :

```
#if ( $attrib.hasTag("OpenAPIFormat") )  
$attrib.tagValue("OpenAPIFormat")
#end
```


# Templates features

### New target languages

2 new predefined target languages have been added : **C++** and **Scala**&#x20;

To set these languages as the default target languages in a template file :

```
#set( $env.language = 'C++' )
```

```
#set( $env.language = 'Scala' )
```

### Files usage

It's now possible to use files located in a bundle folder, in a model folder or anywhere on the filesystem.

Examples :

```
## Get a file :
#set( $file = $fn.fileFromBundle("foo.txt") )
#set( $file = $fn.fileFromModel("foo.txt") )
#set( $file = $fn.file("/foo/bar/foo.txt") )

## File information :
file.name          : $file.name
file.parent        : $file.parent
file.path          : $file.path
file.absolutePath  : $file.absolutePath
file.canonicalPath : $file.canonicalPath
file.exists()      : $file.exists()
file.isFile()      : $file.isFile()
file.isDirectory() : $file.isDirectory()
file.isHidden()    : $file.isHidden()
file.length        : $file.length

## Load file content :
#set($content = $file.loadContent() )
#set($lines = $file.loadLines() )

#if( $file.exists() && $file.isFile() )
$file.loadContent(2)## NO EOL
#end

#foreach ( $line in $file.loadLines(3) )
 . $line
#end

## CSV file
#set( $file = $fn.fileFromBundle("enum-csv.txt") )
#set( $lines = $file.loadValues(",", 1) )
#foreach ( $line in $lines )
 $line.get(0) : $line.get(1) 
#else
```

### Java JPA improvements

In addition to the new JPA annotations in the model some JPA customizations have been added to define global default values in order to facilitate JPA entities generation and make it more flexible.

Examples :

Define default "**fetch type**" ("**LAZY**" or "**EAGER**") for all links cardinality ("ManyToMany", "OneToMany", "ManyToOne", "OneToOne" ) :

```
#set( $jpa.manyToManyFetchType = 'EAGER' )
#set( $jpa.manyToManyFetchType = 'LAZY' )

#set( $jpa.manyToOneFetchType = 'LAZY' )

#set( $jpa.oneToManyFetchType = 'EAGER' )

#set( $jpa.oneToOneFetchType = 'LAZY' )
```

Define the value for "**insertable**" and "**updatable**" attribute in "**@JoinColumn**" annotation

```
#set( $jpa.joinColumnInsertable = true )
#set( $jpa.joinColumnInsertable = false)

#set( $jpa.joinColumnUpdatable = true )
#set( $jpa.joinColumnUpdatable = false)
```

Define if "**targetEntity**" must be generated in JPA annotation (@ManyToMany, @OneToMany, etc)

```
#set( $jpa.genTargetEntity = true )
```

The **default collection type** to be used can defined in the current environement object (default is "java.util.List" )

```
#set($env.collectionType = "java.util.Set")
#set($env.collectionType = "java.util.Collection")
```

### #cancel directive

It's now possible to cancel the current file generation in a template.\
The cancel directive just stop the generation without writing the output file (with a message explaining why the generation has been canceled).

Example to avoid overwriting an existing file :

```
#if( $target.outputFileExists() )
#cancel("File already exists")
#end
```


# Templates objects

### New objects

4 new objects have been added and are now usable in templates :&#x20;

* **$bundle** \
  the current bundle of templates<br>
* **$now**\
  provides the current system date and time in different formats<br>
* **$file**\
  allows to work with a file located on the filesystem, each file instance is created with $fn.file(..) or $fn.fileFromXxx(..)<br>
* **$fkPart**\
  a Foreign Key element (got from an attribute involved in 1 or more Foreign Keys)

For more information see "**Telosys objects reference**" documentation.

### Objects improvement

Many objects have been improved with new attributes and new methods added.

* **$attribute :**&#x20;
  * fkParts&#x20;
  * hasDatabaseComment()&#x20;
  * hasInputType()&#x20;
  * hasLabel()&#x20;
  * hasTag(tagName)&#x20;
  * insertable&#x20;
  * insertableIs(value)&#x20;
  * isTransient()&#x20;
  * sqlType&#x20;
  * tagValue(tagName)&#x20;
  * updatable&#x20;
  * updatableIs(value)<br>
* **$entity :**&#x20;
  * isJoinEntity()&#x20;
  * linksCount<br>
* **$fn :**&#x20;
  * className(object)
  * file(filePath)&#x20;
  * fileFromBundle(filePath)&#x20;
  * fileFromModel(filePath)&#x20;
  * join(collection, separator)&#x20;
  * joinWithPrefixSuffix(collection, separator, prefix, suffix)&#x20;
  * replaceInList(list, oldElement, newElement)
  * toList(array)&#x20;
  * trimAll(list)<br>
* **$jpa :**&#x20;
  * genTargetEntity
  * joinColumnInsertable
  * joinColumnUpdatable&#x20;
  * linkAnnotations(leftMargin, link)
  * linkCardinalityAnnotation(leftMargin,link)&#x20;
  * linkJoinAnnotation(leftMargin, link)&#x20;
  * linkJoinAnnotation(leftMargin, link, alreadyMappedFields)&#x20;
  * manyToManyFetchType&#x20;
  * manyToOneFetchType&#x20;
  * oneToManyFetchType&#x20;
  * oneToOneFetchType<br>
* **$link :**&#x20;
  * entity&#x20;
  * hasMappedBy()&#x20;
  * insertable
  * insertableIs(boolean value)
  * isEmbedded()&#x20;
  * isTransient()&#x20;
  * updatable&#x20;
  * updatableIs(boolean value)<br>
* **$model :**&#x20;
  * description&#x20;
  * folderName&#x20;
  * name&#x20;
  * title&#x20;
  * type&#x20;
  * version<br>
* **$project :**
  * modelsFolderFullPath<br>
* **$target :**
  * originalFolderDefinition&#x20;
  * outputFileExists()&#x20;
  * outputFileFullPath&#x20;
  * type


