Skip to content

Vertigo Migration Guide

Piedeloup Nicolas edited this page Jun 17, 2024 · 160 revisions

from 4.1.0 to 4.2.0

WIP

  • [DataModel] Renamings :
    • DtObject to DataObject
    • DtField to DataField
    • DtFieldName to DataFieldName
    • DtDefinition to DataDefinition
    • DtObjectUtil to DataModelUtil

from 4.0.0 to 4.1.0

WIP

  • [Ui] with new kvStorePlugin : berkeleyDb isn't embedded with vertigo-datastore anymore : you should add needed lib for your kvStorePlugin into your pom.xm
  • [Ui] Change namedComponent parametre encode : check you use th: prefix for thymeleaf, (before param value may be interpreted even without th:)

Example, before th: not needed :

<vu:select object="myObj" field="id" labelField="label" list="elements" @update:model-value="|httpPostAjax('@{_reload}',vueDataParams(['myObj']))|"/>

now th: needed :

<vu:select object="myObj" field="id" labelField="label" list="elements" th:@update:model-value="|httpPostAjax('@{_reload}',vueDataParams(['myObj']))|"/>
  • AbstractSqlSearchLoader : 1st generic attribute is removed
  • OIDCAppLoginHandler : doLogin last parameter, change from AuthorizationSuccessResponse to OIDCTokens
  • ElasticSearchFeatures, restHL feature (RestHighLevelElasticSearchConnector) have now mandatory boolean parameter ssl

from 3.6.0 to 4.0.0

  • [Core] Update to JDK17
  • [Core] Rename MessageText to LocaleMessageText
  • [Core] Rename @Analytics to @Trace
  • [Core] Rename Tuple.getValX() to Tuple.valX()
  • [Core] Rename record's getter from getMyProperty to myProperty()
  • [Ui, Vega] jakarta namespace : Spring 6, Javalin 5, Jetty 11
    • use jakarta package instead of javax
  • [Ui] Quasar v1 to v2 (see https://quasar.dev/start/upgrade-guide/)
    • The color CSS variable names in Quasar have changed (cf link), somes was defined by Vertigo and have changed too :
      • --q-color-primary-invert => --v-primary-invert
      • --q-color-secondary-invert => --v-secondary-invert
      • --q-color-accent-invert => --v-accent-invert
  • [Ui] Vue2 -> Vue3 (see https://v3-migration.vuejs.org/)
    • use @vue:mounted instead of @hook:mounted
    • Attributes on <img> are more strict, width and height must not contains unit (eg: px) or it will be set to 0
  • [Ui] Replace buttons attribute ariaLabel to title (aria-label wasn't use for a11y in button, title was)
    • if icon attribute is set, title is mandatory
  • [Quarto] Rename feature export to exporter

from 3.5.0 to 3.6.0

  • [Core] Protect URL resolver only accept file, classpath or jar url. If you use other unsafe protocols you may use UnsafeURLResourceResolverPlugin
  • [Ui] Quasar fix the usage of q-table__control for table's slots (before it add a q-table-control which doesnt exists) : check rendering if you use slots or subtitles.

To rollback to old rendering, you may add a <div class="column"> or switch flex direction to column of q-table__control when necessary

  • [Ui] Add xxx_content_slot on input components to define specific vue's slots (xxx = input, date, or time) Check usage of content for input tags in edit mode. Search for </vu:. If you passed content to inputs component put this content into a <vu:slot name="xxx_content_slot"> Use edit_content_slot for : autocomplete-edit, autocomplete-multiple-edit, checkbox-edit, checkbox-multiple-edit, chips-autocomplete-edit, datetime-edit, knob-edit, radio-edit, select-edit, select-multiple-edit, slider-edit, text-area-edit, text-editor-edit, text-field-edit
    Use date_content_slot for : date-edit

from 3.4.0 to 3.5.0

WIP

  • [Audit] Refactoring api
  • [vega] CSP : Rename parameter externalUrl to cspFrameAncestor
  • [Ui] Add support to link activation of SpringMvcConfig to Vertigo Modules : now you could active Spring controller with the same rules as your vertigo modules : check your module's feature with Spring controllers extends DefaultUiModuleFeatures.

from 3.3.0 to 3.4.0

  • [Core] ParamManager return Optional param values
  • [database] Switch postgre to GENERATED_COLUMNS () Previously we used generated_keys, but this don't work with PostGresql if PK isn't the first column. But with GENERATED_COLUMNS postgre's jdbc driver add a the column case-sensitive, this break vertigo insert queries. We need to add a parameter in the jdbc url : quoteReturningIdentifiers=false. You may update the jdbc driver version.
  • [Ui] @RequestMapping are now mandatory, add them if missing on controllers
  • [vega] Rename package auth -> authentication

The other changes are added features or fixes that can be updated seamlessly.

from 3.2.0 to 3.3.0

  • [Datafactory] Change FacetedQueryDefinition linked to DtIndex instead KeyConcept (support multiple indices)

  • [Studio] Generated SearchClient are generated per DtIndex instead of KeyConcept.

  • [Datafactory] Upgraded loadList api to search into multiple indices

  • [Account] Rename api withCriteria to withSecurityKeys

  • [Ui] Add ViewContext update security : only allow data with a writeable input in UI : Vertigo Ui inputs components are updated, but you may check if you use direclty vu:include-data, add modifiable attribute if you send this data to server.

  • [Ui] Param name of selectedFacets is now defined by @ViewAttribut("paramName") (was 'selectedFacets' by default) Check if you specify a `paramName, ensure it's the same name in the html page.

  • [DataFactory] Rename innerWriteTo of customAggregation to _innerWriteTo

  • [All] Remove log4j2 conf by default in vertigo jar : Check you have provided one

from 3.1.1 to 3.2.0

This version contains mostly fixes and have very few effects on project code

from 3.1.0 to 3.1.1

This version contains mostly fixes and have few effects on project code :

  • [Ui] Refactor UploadFile component; you may update your FileUploadControler (check mars FileUploadController
  • [Ui] Changed how components are override. If you had some, declare their path in your WebConfig
@Override
protected String getCustomComponentsPathPrefix() {
  return "io/mars/ui/";
}
  • [Ui] Added Server side rendering, which can be use to comply with a strict CSP.
  • [Ui] Added a thymeleaf vu:text for render escaped text

from 3.0.0 to 3.1.0

We encourage to upgrade to 3.1.1 version it contains some important fix

from 2.1.0 to 3.0.0

Renaming tool (beta)

  • [Dynamo] Split Dynamo to multiple module : DataStore, DataModel, DataBase, DataFactory
  • [Core] Update to Java 11
  • [Core] Lots of renames (you should use renaming tools)
    • io.vertigo.app to io.vertigo.core.node
    • io.vertigo.app.Home to io.vertigo.core.node.Node
    • io.vertigo.app.AutoCloseableApp to io.vertigo.core.node.AutoCloseableNode
    • io.vertigo.core.component to io.vertigo.core.node.component
    • io.vertigo.lang to io.vertigo.core.lang
    • io.vertigo.util to io.vertigo.core.util
  • [Core] Added support of connectors (plugin could use a connector to obtain a singleton client); connectors open the raw API to project fore more specific usage
  • [Search] Rename search envIndex param to envIndexPrefix (change your myapp.yaml)
  • [Model] Change field required property to cardinality (1, * or ?) : change your ksp or Java DtObject @Field annotation
  • [Dynamo] With the split of dynamo your yaml should change, standard DynamoFeatures may look like this
  io.vertigo.datamodel.DataModelFeatures:
  io.vertigo.datastore.DataStoreFeatures:
  features:
    - store:
    - kvStore:
  featuresConfig:
    - store.data.sql:
    - store.data.sql:
      dataSpace: orchestra
    - store.file.db:
      storeDtName: DtMediaFileInfo
    - kvStore.berkeley:
      collections: VViewContext;TTL=43200
      dbFilePath: ${java.io.tmpdir}/vertigo-ui/MarsVViewContext
  io.vertigo.datafactory.DataFactoryFeatures:
  features:
    - search:
  featuresConfig:
    - collections.luceneIndex:
    - search.elasticsearch.restHL:
      envIndexPrefix: mars
      rowsPerQuery: 50
      config.file: search/elasticsearch.yml
  • [Datastore] Remove FileManager. It used to be use to create Files, you should use StreamFile.of(... or FSFile.of(... instead

  • [All] Lots of renames (you should use renaming tools)

    • io.vertigo.dynamo.domain.model.FileInfoURI to io.vertigo.dynamo.file.model.FileInfoURI
    • io.vertigo.dynamo.domain.model.EnumVAccessor to io.vertigo.dynamo.impl.store.datastore.EnumStoreVAccessor
    • io.vertigo.dynamo.domain.model.VAccessor to io.vertigo.dynamo.impl.store.datastore.StoreVAccessor
    • io.vertigo.dynamo.collections to io.vertigo.datafactory.collections
    • io.vertigo.dynamo.search to io.vertigo.datafactory.search
    • io.vertigo.dataxxx.yyy.metamodel to io.vertigo.dataxxx.yyy.definitions
    • io.vertigo.database.timeseries.TimeSeriesDataBaseManager to io.vertigo.database.timeseries.TimeSeriesManager;
    • io.vertigo.dynamox.search.AbstractSqlSearchLoader to io.vertigo.datafactory.impl.search.loader.AbstractSqlSearchLoader
    • io.vertigo.dynamox.domain.constraint to io.vertigo.datamodel.impl.smarttype.constraint
    • io.vertigo.dynamox.domain.formatter to io.vertigo.datamodel.impl.smarttype.formatter
    • io.vertigo.social.services.* to io.vertigo.social.*
    • io.vertigo.social.services.notification.NotificationServices to io.vertigo.social.notification.NotificationManager
    • io.vertigo.social.services.comment.CommentServices to io.vertigo.social.comment.CommentManager
    • io.vertigo.social.services.handle.HandleServices to io.vertigo.social.handle.HandleManager
    • io.vertigo.geo.services.* to io.vertigo.geo.*
    • io.vertigo.geo.services.geosearch.GeoSearchServices to io.vertigo.geo.geosearch.GeoSearchManager
    • io.vertigo.datamodel.smarttype.ModelDefinitionProvider to io.vertigo.datamodel.impl.smarttype.ModelDefinitionProvider
    • ModelManager to SmartTypeManager
    • io.vertigo.dynamo.plugins.environment.StudioDefinitionProvider to io.vertigo.studio.plugins.metamodel.vertigo.StudioDefinitionProvider
    • *.smarttype.constraint.Constraint to io.vertigo.basics.constraint.Constraint
    • *.smarttype.formatter.Formatter to io.vertigo.basics.formatter.Formatter
    • io.vertigo.dynamox.task.TaskEngineSelect to io.vertigo.basics.task.TaskEngineSelect
    • io.vertigo.dynamox.search.AbstractSqlSearchLoader to io.vertigo.datafactory.impl.search.loader.AbstractSqlSearchLoader
    • StoreManager is split in two Managers : storeManager.getDataStore() to EntityStoreManager, and storeManager.getFileStore() to FileStoreManager
  • [Studio] Change how resource are registered (there are MetamodelResource and not DefinitionProvider). Check sample on mars/mda Studio use a specific studio-config.yaml like this :

resources: 
  - { type: kpr, path: src/main/resources/io/mars/application.kpr}
  - { type: security, path: src/main/resources/io/mars/basemanagement/base-auth-config.json}
  - { type: security, path: src/main/resources/io/mars/hr/hr-auth-config.json}
mdaConfig:
  projectPackageName: io.mars
  targetGenDir : src/main/
  properties: 
  vertigo.domain.java: true
  vertigo.domain.java.generateDtResources: false
  vertigo.domain.sql: true
  vertigo.domain.sql.targetSubDir: javagen/sqlgen
  vertigo.domain.sql.baseCible: H2
  vertigo.domain.sql.generateDrop: true
  vertigo.domain.sql.generateMasterData: true
  vertigo.task: true
  vertigo.search: true
  vertigo.authorization: true
  mermaid: true
  • [Studio] StaticMasterData support values writed in declaration, example :
create DtDefinition DtTicketStatus {
  stereotype: "StaticMasterData"
  id ticketStatusId {domain: DoCode label:"Id"}
  field label {domain: DoLabel label:"Status Label" }
  values : `{
  "open": { "ticketStatusId":"OPEN", "label":"Open"},
  "assigned": { "ticketStatusId":"ASSIGNED", "label":"Assigned"},
  "closed": { "ticketStatusId" : "CLOSED", "label":"Closed"}}`
}
  • [Studio] Domains aren't defined in ksp anymore. There are renamed by SmartTypes and are declared in a java enum

Before :

create Domain DoId {
  dataType : Long
  formatter : FmtId
  storeType : "NUMERIC"
}

create Domain DoInstant {
  dataType : Instant
  formatter : FmtDateHeure
  storeType : "TIMESTAMP"
}

create Domain DoLocaldate {
  dataType : LocalDate
  formatter : FmtDate
  storeType : "DATE"
}

create Domain DoCurrency {
  dataType : BigDecimal
  formatter : FmtCurrency
  unit : "$"
  storeType: "NUMERIC(12,2)"
}

create Domain DoHealth {
  dataType: Integer
  formatter : FmtDefault
  constraint : [CkMinHealthValue0, CkMaxHealthValue100]
  storeType : "NUMERIC"
}

create Domain DoLabel {
  dataType : String
  formatter : FmtDefault
  constraint : [CkMaxLength100]
  storeType : "VARCHAR(100)"
  indexType : "text_fr:sortable"
}

create Domain DoEmail {
  dataType : String
  formatter : FmtDefault
  constraint : [CkEmail, CkMaxLength150]
  storeType : "VARCHAR(150)"
}

After:

public enum MarsSmartTypes {

  @SmartTypeDefinition(Long.class)
  @Formatter(clazz = FormatterId.class, arg = "")
  Id,

  @SmartTypeDefinition(Instant.class)
  @Formatter(clazz = FormatterDate.class, arg = "dd/MM/yyyy ' ' HH'h'mm")
  Instant,

  @SmartTypeDefinition(LocalDate.class)
  @Formatter(clazz = FormatterDate.class, arg = "dd/MM/yyyy")
  Localdate,

  @SmartTypeDefinition(BigDecimal.class)
  @Formatter(clazz = FormatterDefault.class)
  Currency,

  @SmartTypeDefinition(Integer.class)
  @Formatter(clazz = FormatterDefault.class)
  @Constraint(clazz = ConstraintNumberMinimum.class, arg = "0", msg = "")
  @Constraint(clazz = ConstraintNumberMaximum.class, arg = "100", msg = "")
  Health,

  @SmartTypeDefinition(String.class)
  @Formatter(clazz = FormatterDefault.class)
  @Constraint(clazz = ConstraintStringLength.class, arg = "100", msg = "")
  @SmartTypeProperty(property = "indexType", value = "text_fr:sortable")
  Label,

  @SmartTypeDefinition(String.class)
  @Formatter(clazz = FormatterDefault.class)
  @Constraint(clazz = ConstraintRegex.class, arg = "^[_a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*(\\.[a-zA-Z0-9-]{2,3})+$", msg = "L'email n'est pas valide")
  @Constraint(clazz = ConstraintStringLength.class, arg = "150", msg = "")
  Email,
}

In KSP, keep dataType and storeType only (used by generations).

create Domain DoId {
  dataType : Long
  storeType : "NUMERIC"
}

create Domain DoInstant {
  dataType : Instant
  storeType : "TIMESTAMP"
}

create Domain DoLocaldate {
  dataType : LocalDate
  storeType : "DATE"
}

create Domain DoCurrency {
  dataType : BigDecimal
  storeType: "NUMERIC(12,2)"
}

create Domain DoHealth {
  dataType: Integer
  storeType : "NUMERIC"
}

create Domain DoLabel {
  dataType : String
  storeType : "VARCHAR(100)"
}

create Domain DoEmail {
  dataType : String
  storeType : "VARCHAR(150)"
}

You could use this regexp to start your ProjectSmartTypes.java file (you must finished manually) : create Domain Do(.*)\s*\{(\r?\n)\s*dataType\s*:\s*(\w+)\r?\n([^}]*\r?\n)*\s*\} replaced by @SmartTypeDefinition(\3.class)\2@Formatter(clazz = FormatterDefault.class)\2\1,

  • [Commons] Move Cache from module commons to module DataStore (change in yourConfig.yaml from CmmonsFeatures to DataStoreFeatures)
  • [Commons] Assertion refactor API checkXXX->check().xxx isEmpty -> IsBlank; argNotEmpty -> isNotBlank; isNotNull, isTrue;
  • [Commons] Rename StringUtil.isEmpty to StringUtil.isBlank
  • [Vega] Switch from sparkjava to javalin In yaml conf :
io.vertigo.connectors.javalin.JavalinFeatures:
  features:
    - standalone:
io.vertigo.vega.VegaFeatures:
  features:
    - webservices:
  featuresConfig:
    - webservices.javalin:
        apiPrefix: /api

in web.xml :

  <filter>
    <filter-name>VegaFilter</filter-name>
    <filter-class>io.vertigo.vega.plugins.webservice.webserver.javalin.VegaJavalinFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>VegaFilter</filter-name>
    <url-pattern>/api/*</url-pattern>
  </filter-mapping>
  • [Vega] Removed AutoSortAndPagination, but it's easier to do it. You cou use DtListState into collectionsManager or storeManager
  • [Ui] Url mandatory on fileUpload component
  • [Ui] Move VUi.methods.httpPostAjax to VUiPage.httpPostAjax
  • [Ui] componentStates are no in VUiPage.$data.componentStates

from 2.0.0 to 2.1.0

  • [extensions/ui] Upgrade to quasar 0.17 to 1.4.1 for migration also follow Quasar's upgrade guide available here : https://quasar.dev/start/upgrade-guide#Upgrading-from-0.x-to-v1
  • [core] add support of flag negation in yaml config
  • [commons] commands WIP
  • [commons] analytics better logger name
  • [database] Close DataStream when set as statement params
  • [dynamo] BugFix on concurrency saving first file of the day
  • [dynamo] UpperCamelCase feature when import domain definition from XMI
  • [dynamo] Merge pull request #137
  • [dynamo] fix EA and OOM Loaders with UpperCamelCase
  • [dynamo] fixed associations conventions in EA and OOM
  • [dynamo] move formatterId in dynamox
  • [dynamo] handles WIP
  • [vega] Merge pull request #138
  • [vega] Fix #141 Added serializeNulls params to GoogleJsonEngine. Default false
  • [vega] Fixed #142 Swagger parameterized type support only class or parameterizedType
  • [vega] Remaned AppServletStarter2 to AppServletStarterXml
  • [vega] Fixed #147 : can't close app if start fail
  • [vega] Fixed #148 when routes contains digits at end
  • [vega] Updated swagger ui site to v3.24.0
  • [studio] fix generated javadoc for xAO
  • [all] Updated libs versions
    • junit-jupiter 5.4.2 -> 5.5.2
    • freemarker 2.3.28 -> 2.3.29
    • spark 2.8.0 -> 2.9.1
    • rest-assured 3.3.0 -> 4.1.2
    • log4j-core 2.11.2 -> 2.12.1
    • slf4j 1.7.25 -> 1.7.28
    • cglib 3.2.10 -> 3.3.0
    • gson 2.8.5 -> 2.8.6
    • snakeyaml 1.23 -> 1.25
    • servlet-api 3.1.0 -> 4.0.1
    • h2 1.4.199 -> 1.4.200
    • postgresql 42.2.5 -> 42.2.8
    • c3p0 0.9.5.3 -> 0.9.5.4
    • janino 3.0.8 -> 3.1.0
    • ehcache 2.10.6 -> 3.8.1
    • jedis 2.9.0 -> 3.1.0
    • lucene 8.0.0 -> 8.2.0
    • elasticsearch 7.1.0 -> 7.4.1

from 1.1.3 to 2.0.0

Renaming tool (beta)
This tools is a set of ant's tasks. In case of this 2.0, it comes with two usefull targets :

  • CONST Java Entity to CamelCase java : Replace old java definitions to CamelCase definition new in vertigo 2.0
  • CONST KSP to CamelCase ksp : Replace old ksp definitions to CamelCase definition new in vertigo 2.0

Replacements are generated in folders : generated-java and generated-ksp

  • [all] tests in junit 5 (use AbstractTestCaseJU5)
  • [all] Migrate from CONST_CASE to UpperCamelCase everywhere except in SQL databases a tool is provided to help migration
  • [core] all definitions are UpperCamelCase
  • [core] discovery : Added conditions to filter abstract classes
  • [core] Removed deprecated Date DataType + remove all use of java.util.Date
  • [core] Removed MessageTextBuilder (.of + simple)
  • [core] Removed Tuple3, Tuples.Tuple2 renamed to Tuple
  • [core] syntaxic sugar : use InjectorUtil instead of DIInjector
  • [core] replaced @Named by @ParamValue
  • [core] Removed unused concept of named components
  • [core] add yaml configuration with flippable features, xml configuration is now discouraged and will be removed in next version (even 2.x)
  • [core] refactored AppConfig -> Renamed in NodeConfig
  • [commons] Fixed aggregate health status : 1 or more Red drive to Red
  • [commons] Added ability to track non single thread processes
  • [database] Added timeseries in database module
  • [database,dynamo,studio] remove hibernate support
  • [dynamo] Added check on association fix #129
  • [dynamo] notNull is replaced by required in all ksp (task and entities)
  • [dynamo] key is replaced by id in ksp
  • [dynamo] URI is replaced by UID
  • [dynamo] Made FacetedQueryResult serializable
  • [dynamo] Modified date pattern for ES query (breaking change)
  • [dynamo] localdate support in query
  • [dynamo] ES: added optional param for embeded
  • [dynamo] ES: Fix urn type, no normalizer
  • [dynamo] ES: Fixed reindexall task when removed old elements
  • [dynamo] From io.File to nio.Path
  • [dynamo] DtListState.of
  • [dynamo] Changed default charset ok Ksp loader from iso-8859-1 to utf-8
  • [dynamo] Add FileInfoURI convert key for DataStore
  • [dynamo] Upgraded ES version from 5.6.8 to 7.0.0, and Lucene from 6.6.0 to 8.0.0
  • [dynamo] Fixed Search user DSL to escape bad syntax instead of VUser
  • [dynamo] Added ElasticSearch plugin for v5.6
  • [dynamo] Added clustering to CollectionsManager
  • [dynamo] Fixed empty facets from Json with Vega
  • [dynamo] KSP Definition in CamelCase
  • [dynamo] remove brokerbatch and moved brokerNN in DataStore
  • [dynamo] Fixed search by prefix with accents
  • [dynamo] Simplified syntax to declare an association in ksp
  • [dynamo] Fix domain metrics
  • [dynamo] Replaced DAO access with DtListState instead of RowMax only
  • [dynamo] Fix masterdatas to comply with with boot order : no more MasterDataInitializer -> replaced by a DefinitionProvider. Devs can use AbstractMasterDataDefinitionProvider
  • [es2.4] Remove ElasticSearch 2.4 plugin
  • [account] Allow comments in textauthentication plugin
  • [account] Fixed account store plugin and null value
  • [account] Support Id conversion from Account to Entity source
  • [account] Removed deprecated personna
  • [account] Removed definition prefix from authorization aspect
  • [vega] fix Bug Content-Type sous JBoss
  • [vega] Added support of '.' in exclude and include fieldname
  • [vega] App version for swagger is a string
  • [vega] Added Instant and LocalDate support to SwaggerApi
  • [vega] UID Json encoding now send only key part, and use generics in order to resolved entity class
  • [vega] Set attribute 'SessionExpired' true in case of session expiration
  • [vega] Fixed iterator of uiListModifiable : remove change the expected count
  • [vega] Inactive CacheControlFilter when Cache-Control header is already set
  • [vega] Removed securityCheck of URL : may use @secured on WS
  • [vega] Removed deprecated UiListState
  • [studio] multiple files for sql init of staticmasterdatas
  • [studio] MasterDataManager is now mandatory
  • [studio] dt objects can be splitted by feature
  • [studio] fix dao import when dt_index = keyconcept
  • [studio] created a SearchClient component dedicated to search access
  • [studio] Drop if exists
  • [studio] Removed sequences for non numeric PK
  • [Social] Move MailManager from vertigo-mail to Vertigo-Social
  • [all] update dependencies log4j2 2.11.0 -> 2.11.2 ; cglib-nodep 3.2.6 -> 3.2.10 ; gson 2.8.2 -> 2.8.5 ; c3p0 0.9.5.2 -> 0.9.5.3 ; janino 3.0.8 -> 3.0.12 ; ehcache 2.10.4 -> 2.10.6 ; berkleydb sleepycat je 7.5.11 -> 18.3.12 ; rest-assured 3.0.7 -> 3.3.0 ; freemarker 2.3.23 -> 2.3.28 ; javax-mail 1.6.0 -> 1.6.2 ; h2 1.4.196 -> 1.4.199 ; struts2 2.5.16 -> 2.5.20 ; fr.opensagres.xdocreport.converter.odt.odfdom 2.0.1 -> 2.0.2 ; fr.opensagres.xdocreport.converter.docx.xwpf 2.0.1 -> 2.0.2 ; org.apache.poi 3.16 -> 4.0.1

from 1.1.2 to 1.1.3

This is a minor release with several fixes. We encourage you to update to this version. Use this version for use in a java9+ project.

from 1.1.1 to 1.1.2

This is a minor release with several fixes. We encourage you to update to this version. Use this version for use in a java9+ project.

from 1.1.0 to 1.1.1

This is a minor release with several fixes. We encourage you to update to this version.

from 1.0.0 to 1.1.0

A new Renaming tool (beta)
The file to use to migrate from 1.0.0 to 1.1.0 here See previous migration to see usage : Usage (this one isn't the ant file)

Detail

  • [Dynamo] VFile use Instant instead of Date, you should replaced new Date() by Instant.now()
  • [Dynamo] Removed deprecated getListByDtField, use getListByDtFieldName instead
  • [Dynamo] Refactor Domain, moved DtField.getDomain().getFormatter().valueToString to DtField.getDomain().valueToString
  • [Dynamo] Type of field has been changed. Now DtObject and DtList aren't a DataType anymore. You could determined them from domain by using !getScope().isPrimitive() and domain.isMultiple().
  • [Dynamo] Refactored createSearchQueryBuilderContact from DAO to support multi selected facets. Now use a SelectedFacetValues object instead of a List. Common usage with new ArrayList() could be replaced by SelectedFacetValues.empty().build() SelectedFacetValues could be use from WebServices params to DAO. If necessary UiSelectedFacet api have a toSelectedFacetValues method.
  • [Dynamo] changed syntax of parameters in TaskEngineProcBatch : the fake '.0' must be removed

before :

create Task TK_INSERT_COUNTRIES_BATCH {
  className : "io.vertigo.dynamox.task.TaskEngineProcBatch"
    request : "
      INSERT INTO MY_COUNTRY (COU_ID, NAME) values (#COUNTRY_LIST.0.COU_ID#, #COUNTRY_LIST.0.NAME#) 
      "
  attribute COUNTRY_LIST     {domain : DO_DT_COUNTRY_DTC    notNull:"true"   inOut :"in"}
}

after :

create Task TK_INSERT_COUNTRIES_BATCH {
  className : "io.vertigo.dynamox.task.TaskEngineProcBatch"
    request : "
      INSERT INTO MY_COUNTRY (COU_ID, NAME) values (#COUNTRY_LIST.COU_ID#, #COUNTRY_LIST.NAME#) 
      "
  attribute COUNTRY_LIST     {domain : DO_DT_COUNTRY_DTC    notNull:"true"   inOut :"in"}
}
  • [Commons] We changed HealthChecked parameters : feature for the global feature checked (like DB, Mail, etc...) and name for detailled check done. With renaming tool, we set feature to "APP", but you should

  • [Commons] HealthCheck constructor have new parameters : module and feature

  • [Dynamo] Update ElasticSearch to 5.6, and Lucene to 6.6.0 This update need some reworks in your project due to a lots of api breaking changes in ElasticSearch.

  • keyword fields aren't tokenized by definition : now you can't use an analyzer for them anymore : you must use a normalizer instead.

before :

index :
    analysis :
        analyzer :
            code :
                tokenizer : keyword
                filter : [standard]
            multiple_code :
                tokenizer : piped_keywords
                filter : [standard]
            sortable :
                tokenizer : keyword
                filter : [lowercase, asciifolding]
            text_fr :
                tokenizer : standard
                filter : [standard, lowercase, snowball, elision]
        tokenizer :
            keyword :
                type : keyword
            piped_keywords :
                type : pattern
                pattern : '([|])'
        filter :
            snowball:
                type : snowball
                language: French
            elision:
                type : elision
                articles: [l, m, t, qu, n, s, j, d]

after :

index :
    analysis :
        normalizer :
            code :
                type : custom
            sortable :
                type : custom
                filter : ["lowercase", "asciifolding"]  
        analyzer :
            multiple_code :
                tokenizer : piped_keywords
                filter : [standard]
            text_fr :
                tokenizer : standard
                filter : [standard, lowercase, snowball, elision]
        tokenizer :
            keyword :
                type : keyword
            piped_keywords :
                type : pattern
                pattern : '([|])'
        filter :
            snowball:
                type : snowball
                language: French
            elision:
                type : elision
                articles: [l, m, t, qu, n, s, j, d]
  • fields are managed in a new way in ES and can't be use for facet if not configured to (not a FieldData by default in ES). We extends indexType params in domain's definitions to support a facetable parameter, it must be use for fields in facets. (fieldType look like : indexType: "string:facetable")

  • We added a sortable parameter in indexType. This add a duplication of the value with a keyword normalizer. This new field is named from the source field and the .keyword suffix. Vertigo switch automatically to this keyword field when necessary for sort or facet. This replace the previous usage of copy field for sort field (like *_not_analyzed fields). Copy fields could be use for aggregate many fields in one.

  • [Studio] Moved Tasks with only one input of data-object from xxModuleNamexxPAO to xxObjectxxDAO.
  • [Vega] Some renames link to Search's rework. In WebServices API, UiListState should be replace by DtListState. And UiSelectedFacets should be replace by SelectedFacetValues.

from 0.9.4 to 1.0.0

A new renaming tool, more powerfull but still in beta is now available. Renaming tool (beta)
The file to use to migrate from 0.9.4 to 1.0.0 here

usage

  1. open a commandline at the root of your project
  2. put replace-1.0.0.jar and replace-0.9.4-1.0.0.json (see above for download) at the root of your project
  3. run the following command : java -jar replace-1.0.0.jar replace-0.9.4-1.0.0.json
  4. finish your migration by hand for the things that cannot be scripted (see below for more detail)

more detail

  • [vertigo] Builder Refactoring (General use is now : ObjectToBuild.builder() )
  • [core] silent => verbose (silently mode by default)
  • [core] replace new Param with Params.of
  • [core] removed withApi(boolean) on moduleConfigBuilder
  • [core] refactoring MessageText and VUserException (use the added shortcut) Before
throw new VUserException(new MessageText(messageKey,params))

After

throw new VUserException(messageKey, params)
  • [core] removed describable replaced by HealthCheck and HealthManager
  • [core] components are now definition providers to register definitions from a component
  • [core] move components related classes from io.vertigo.lang to io.vertigo.core.component
  • [core] move locale related classes from io.vertigo.lang to io.vertigo.core.locale
  • [core] changed life cycle : Typical changes implied with SearchLoader Before
public class RobotSearchLoader extends AbstractSqlSearchLoader<Long, Robot, RobotIndex> {

  private final SearchIndexDefinition indexDefinition;
  @Inject
  private RobotPAO robotPAO;

  /**
   * Construct an instance of RobotSearchLoader.
   *
   * @param searchManager
   * @param taskManager
   * @param transactionManager
   */
  @Inject
  public RobotSearchLoader(final SearchManager searchManager, final TaskManager taskManager,
      final VTransactionManager transactionManager) {
    super(taskManager, transactionManager);
    indexDefinition = searchManager.findIndexDefinitionByKeyConcept(Robot.class);
  }

  /** {@inheritDoc} */
  @Override
  public List<SearchIndex<Robot, RobotIndex>> loadData(final SearchChunk<Robot> searchChunk) {
        [...]
  }

After

public class RobotSearchLoader extends AbstractSqlSearchLoader<Long, Robot, RobotIndex> implements Activeable {
  private SearchIndexDefinition indexDefinition;
  @Inject
  private RobotPAO robotPAO;
  
  private SearchManager searchManager;

  

  /**
   * Construct an instance of RobotSearchLoader.
   *
   * @param searchManager
   * @param taskManager
   * @param transactionManager
   */
  @Inject
  public RobotSearchLoader(final SearchManager searchManager, final TaskManager taskManager,
      final VTransactionManager transactionManager) {
    super(taskManager, transactionManager);
    this.searchManager = searchManager;
  }

  /** {@inheritDoc} */
  @Override
  public List<SearchIndex<Robot, RobotIndex>> loadData(final SearchChunk<Robot> searchChunk) {
    ...
  }

  @Override
  public void start() {
    indexDefinition = searchManager.findIndexDefinitionByKeyConcept(Robot.class);
  }

  @Override
  public void stop() {
    // NOP
  }
  • [account] To keep using the old persona user session replace inheritance of your userSession from UserSession to PersonaUserSession
  • [commons] you must use the @EventBusSubscribed on a component's method to subscribes to an event type
  • [commons] you must use the @DaemonScheduled on a component's method to register a daemon For example
@DaemonScheduled(name = "DMN_DAEMON_NAME", periodInSeconds = 60 )
public void aMethodName() {
 //method body
}

@EventBusSubscribed
public void aMethodName(final TypeOfEvent event) {
   //method body
}
  • [dynamo] removed dynamic behaviour on DtDefinition
  • [dynamo] replacewith by add in FacetedQueryResultBuilder
  • [dynamo] Renamed FacetedQueryResultBuilder to FacetedQueryResultMerger
  • [dynamo] moved criteria from dynamo/store to dynamo/criteria
  • [dynamo] Removed elasticSearch1_7 plugin (you must switch to 2.4.5)
  • [dynamo] replaced CollectionsManager by Criterions for ranges and value filtering
  • [dynamo] remove SqlCallableStatement and out parameters in sql Use SqlPreparedStatement instead
  • [dynamo] move database in new module : add it to your pom
  • [Vega] DtObject Json serialization now use the field's getter. It won't work if it send a exception. Previous usage of search copy_to fields sent exception and must be rewrite.
  • [tempo] remove module (use vertigo-mail and vertigo-orchestra extensions). Two use vertigo-orchestra use the provided readme
  • [tempo] Rename io.vertigo.tempo.mail to io.vertigo.mail

For simpler refactoring from Tempo to Orchestra you may use the memory plugins: MemoryProcessExecutorPlugin, MemoryProcessSchedulerPlugin, MemoryProcessDefinitionStorePlugin

  1. transform your old Runnable Job class into a RunnableActivityEngine before
public final class MyJob implements Runnable {
   ...
}

after

public final class MyJob extends RunnableActivityEngine {
   ...
}
  1. use the legacy builder of processDefinition
final ProcessDefinition processDefinition = ProcessDefinition.legacyBuilder("PRO_MY_OLD_TEMPO_JOB_NAME", MYJob.class)
        .build();

Cleaning

For projects that need to transition from version 1.7 to version 2.4, the indexType becomes mandatory for String and BigDecimal types:

  • In the domain definitions (.ksp), the index_type for all domains of type String becomes mandatory => for a VARCHAR field of type code use indexType: “code”, for a “CLOB” or “VARCHAR” field of free entry type use “text_fr”
  • In the domain definitions (.ksp), the index_type for all domains of type BigDecimal becomes mandatory => use an indexType “double”.
  • In the domain definitions (.ksp) for all domains of type Long, the index_type SHOULD NOT be specified.

from 0.9.3 to 0.9.4

WARN : There is a blocker issue in vertigo-studio use vertigo-studio v0.9.4a

Renaming tool (beta)

  • Simpler boot declaration in managers.xml (not in renaming tool).
    • Remove all loaderPlugins
    • Remove all RegistryPlugin
    • Declare Definition providers

Your boot should look like this:

  <boot locales="fr_FR">
   <plugin class="io.vertigo.core.plugins.resource.classpath.ClassPathResourceResolverPlugin" />
   <plugin class="io.vertigo.core.plugins.resource.url.URLResourceResolverPlugin" />
  </boot>
...
<module name="definitions">
<definitions>
  <provider class="io.vertigo.dynamo.plugins.environment.DynamoDefinitionProvider" >
   <param name="encoding" value="utf-8" />
   <resource type ="xmi" path="/project/model/project.xml"/>
   <resource type="classes" path="my.project.DtDefinitions" />
   <resource type ="kpr" path="/project/mda/generation.kpr"/>
  </provider>
  <provider class="io.vertigo.persona.plugins.security.loaders.SecurityDefinitionProvider" >
   <resource type="security" path="boot/components/project-auth-config.xml" /> 
  </provider>
 </definitions>
</module>
  • Rename io.vertigo.lang.Describable to io.vertigo.core.component.Describable

  • Rename io.vertigo.core.spaces.component.ComponentInfo to io.vertigo.core.component.ComponentInfo

  • Rename io.vertigo.core.component.di.injector.Injector to io.vertigo.core.component.di.injector.DIInjector

  • [Dynamo] A DtList can't be optional (especially in Tasks) Be sure to make notNull task's attributes of type DtList

  • [Persona] Replaced Security DTD by XSD

    • Remove the DTD declaration from your security config file
    • tag <authorisation-config> is now replaced with <authorisationConfig>
  • Rename io.vertigo.core.spaces.component.ComponentInitializer in io.vertigo.core.component.ComponentInitializer

  • Rename loadList and getList to findAll

  • Replace FilterCriteriaBuilder with Criterions

For example this code

final FilterCriteriaBuilder<MyEntity> fcb = new FilterCriteriaBuilder<>();
  fcb.withFilter(MyEntityFields.DCU_ID, dcuId);

is replaced by

final Criteria<MyEntity> criteria = Criterions.isEqualTo(MyEntityFields.DCU_ID, dcuId);

You can now chain Criterions with "and" and "or" operators ans operations are extended (see Criterions API)

  • [All] Always use WrappedException (wrap & unwrap), and params order changed Replace throw new WrappedException(e); with throw WrappedException.wrap(e); Replace throw WrappedException.wrapIfNeeded(e); with throw WrappedException.wrap(e);

  • [Dynamo] Refactored Data access (database dialect moved from StoreManager to DataBaseManager)

    • Use SqlDataStorePlugin instead of OracleDataStorePlugin, PostgresqlDataStorePlugin, etc
    • Component SqlDataBaseManager must now be declared is the same module as StoreManager

Your managers.xml should look like this:

<component api="SqlDataBaseManager" class="io.vertigo.dynamo.impl.database.SqlDataBaseManagerImpl">
 <plugin class="io.vertigo.dynamo.plugins.database.connection.datasource.DataSourceConnectionProviderPlugin">
   <param name="source" value="java:/comp/env/jdbc/DataSource" />
   <param name="classname" value="io.vertigo.dynamo.impl.database.vendor.postgresql.PostgreSqlDataBase" />
  </plugin>
</component>
<component api="StoreManager" class="io.vertigo.dynamo.impl.store.StoreManagerImpl" >
  <plugin class="io.vertigo.dynamo.plugins.store.datastore.sql.SqlDataStorePlugin">
   <param name="sequencePrefix" value="SEQ_" />
  </plugin>
</component>
  • Rename io.vertigo.x.impl.extension to io.vertigo.x.extension.impl for notification, account, comment, rules

  • DefinitionSpace.put(Definition) is now hidden, to add Definitions you should add a DefinitionProvider to your managers.xml. It's get() method may returned your definitions

from 0.9.2 to 0.9.3

Renaming tool (beta)

  • [All] Updated to JDK 8 : Change your JRE in your pom.xml, project IDE config, compile, ant execution, etc...
  • [All] Renamed vertigo Option to jdk Optional
  • [Dynamo] Split DtObject as Entity (persistent) and simple DtObject (non persistent) :
  • Now persistent property on DtObject aren't usefull. Persistent object had a key, other have none.
  • Key are mandatory on Entity and forbidden on DtObject
  • persistent property on DtObject should be removed. Add a key field if persistent:"true", remove key field if persistent:"false"
  • URI are URI of Entity : Replace URI<D extends DtObject> by URI<E extends Entity> This change have some impact, keep it in mind if you have some exceptions
  • [Dynamo] AbstractSqlSearchLoader constructor take VTransactionManager, should be added in specific SearchLoaders
  • [Dynamo] SearchLoader should implements loadData(final SearchChunk<Person> searchChunk) instead of loadData(final List<URI<Utilisateur>> uris)
  • [dynamo] SearchLoader should use KeyConcept's URI instead of IndexDtDefinition ones. You may replace indexDefinition.getIndexDtDefinition() to indexDefinition.getKeyConceptDtDefinition()
  • [Dynamo] Reindexer job don't start transaction anymore, you should create it in your SearchLoader::loaData Like
  /** {@inheritDoc} */
  @Override
  public List<SearchIndex<Car, Car>> loadData(final SearchChunk<Car> searchChunk) {
  try (final VTransactionWritable tx = getTransactionManager().createCurrentTransaction()) {
    final List<SearchIndex<Car, Car>> result = new ArrayList<>();
    final DtDefinition dtDefinition = DtObjectUtil.findDtDefinition(Car.class);
    for (final Car car : loadCarList(searchChunk)) {
    final URI<Car> uri = new URI<>(dtDefinition, car.getId());
    result.add(SearchIndex.createIndex(indexDefinition, uri, car));
    }
    return result;
  }
  }
  • [Dynamo] DtListProcessor is now typed, should create a DtListProcessor with type like collectionsManager.<MyObj>createDtListProcessor()
  • [Dynamo] Moved ExportManagerImpl to quarto
  • [Dynamo] Updated ElasticSearch to 2.3.5 : to continue to use ElasticSearch 1.7, you must changes your pom.xml
<dependency>
  <groupId>io.vertigo</groupId>
  <artifactId>vertigo-dynamo-plugin-elasticsearch_1_7</artifactId>
  <version>${vertigo.version}</version>
</dependency>

and reference the ElasticSearch 1.7 plugins in your managers.xml : (just change the package name)

<plugin class="io.vertigo.dynamo.plugins.search.elasticsearch_1_7.transport.ESTransportSearchServicesPlugin">
  <param name="servers.names" value="${boot.es.server.names}" />
  <param name="envIndex" value="${boot.es.env.index}" />
  <param name="rowsPerQuery" value="50" />
  <param name="config.file" value="search/elasticsearch.yml" />
  <param name="cluster.name" value="${boot.es.cluster.name}" />
</plugin>

You may need to clear your index directory

  • [Dynamo] ElasticSearch 2.3.5 there is no more standard analyzer by default, for primitive types you should declared an empty analyzer name like indexType:":integer"
  • [Dynamo] Attributes DTC notNull:"false" aren't accepted anymore : A list is never optional

from 0.9.1 to 0.9.2

Renaming tool (beta)

  • [Core] Aligned vertigo Option api to JDK api. You could use the rename tool, in order to rename previous Option api to the new one rename (isPresent, ofNullable, orElse, of, none). Note that isEmpty is deprecated and hasn't equivalent in jdk api, replace it by !otp.isPresent()
  • [Core] Splitted App and autoCloseable. You should use try(new AutoCloseableApp() { } in unit tests
  • [Dynamo] Renamed DAOBroker to DAO
  • [Dynamo] Renamed CRUD methods. You should replace some method name get => read and getList => findAll
  • [Dynamo] Search FacetedQueryResult json v3 (#59). You could select your api version by the parameter searchApiVersion param on GoogleJsonEngine component in your managers.xml. Added Highlight for search results in FacetedQueryResult json v4
  • [Dynamo] Renamed methods : toUrn to urn
  • [Dynamo] Create URI public on DtObjectUtil

from 0.9.0 to 0.9.1

Renaming tool (beta)

Important : Use v0.9.1a for vertigo quarto. (0.9.1 have a buggy pom.xml)

  • Added boolean serializeElements to DataStoreConfig, you could set it to true by default (false on big/unmodifiable list). And removed noSerialization from CachePlugin implementations.

  • Removed SortState. It's simpler : juste a fieldName and an order desc/asc. Its always case insensitive and null first.

  • Renamed get(uri) to read(uri) on FileStore

  • Removed TextFile. You should create one on your project if need it (but think about it, it's pretty useless) TextFile.java

  • Removed initClass=ManagerInitializer into managers.xml files. Now you should add them into a <init> tag at the end of tag. Like this :

<init>
  <initializer class="lollipop.boot.DataBaseInitializer"/>
  <initializer class="lollipop.boot.MasterDataInitializer"/>
  <initializer class="lollipop.boot.I18nRessourcesInitializer"/>    
</init>
  • Removed inheritance into managers.xml files
  • Renamed EventManager to EventBusManager
  • Removed WorkManager. (in fact moved into another vertigo module, not released yet)
  • Renamed io.vertigo.vega.plugins.webservice.instrospector.annotations.AnnotationsWebServiceIntrospectorPlugin to io.vertigo.vega.plugins.webservice.scanner.annotations.AnnotationsWebServiceScannerPlugin
  • Removed MockConnectionProviderPlugin use io.vertigo.dynamo.plugins.database.connection.c3p0.C3p0ConnectionProviderPlugin instead. Need c3p0 dependency in pom.xml:
<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.2</version>
  <scope>test</scope>
</dependency>
  • [Dynamo] FileManager add a daemon in order to purge TempFiles. DaemonManager is mandatory when FileManager was used.
  • SearchLoader change chunk api, and now return a Iterable<Option<SearchChunk<K>>> it's a really simple change to do, just to say that hasNext isn't reliable before next was called.
  • [Vega] Refactored JsonSerializer for FacetedQueryResultJson v2
    Watch out the new search API :

Before:

{
  "groups": {
    "composer": [ {...composers}, ... ],
    "actor": [ {...actors}, ... ],
    "producer": [ {...producers}, ... ]
  },
  "facets": {
    "FCT_PEOPLE_TITLE": {
      "f":200,
      "m": 275
    },
    "FCT_PEOPLE_PROFESSION": {
      "composer": 46,
      "actor": 355,
      "producer": 74
    }
  },
  "totalCount": 475
}

After:

{
  "groups": [
    { "composer" :[ {...composers}, ... ] },
    { "actor" :[ {...actors}, ... ] }
    { "producer" :[ {...producers}, ... ] }
  ],
  "facets": [
      { "FCT_PEOPLE_TITLE":[ 
        { "f":200 },
        { "m":275 }] 
      },
      { "FCT_PEOPLE_PROFESSION":[ 
        { "composer":46 },
        { "actor":355 },
        { "producer":74 }] 
      }
  ],
  "totalCount": 475
}
  • Renamed storeName of TaskDefinition to dataSpace

from 0.8.3 to 0.9.0

Renaming tool (beta)
Renaming tool doesn't do all renames, you should do them manually !

  • Added params storeDtName to DbFileStorePlugin.
  • Major changes in managers.xml. Mandatory Managers are set bey default : LocalManager, RessourceManager, ParamManager and EnvironmentManager. You just need to declared plugins and locales (, separated). If you declared other Manager in your boot section you should moved them in another module. If you use Initializer in your boot section you should moved them to another module, they are no more dedicated to a Component.

Now your boot should looks like :

<boot locales="fr_FR">
  <plugin class="io.vertigo.core.plugins.resource.classpath.ClassPathResourceResolverPlugin" />
  <plugin class="io.vertigo.core.plugins.resource.url.URLResourceResolverPlugin" />
  <plugin class="io.vertigo.dynamo.plugins.environment.loaders.kpr.KprLoaderPlugin" />
  <plugin class="io.vertigo.dynamo.plugins.environment.registries.domain.DomainDynamicRegistryPlugin" />
  <plugin class="io.vertigo.dynamo.plugins.environment.registries.task.TaskDynamicRegistryPlugin" />
  <plugin class="io.vertigo.dynamo.plugins.environment.registries.file.FileDynamicRegistryPlugin" />
</boot>
  • Multistore support need some changes for FileInfo (no changes needed for DtDefinition) In KSP FileInfo definitions reference a storeName. This storeName should be declared in managers.xml on usefull plugin. If not set plugin's name default to 'main'. Exemple :
create FileInfo FI_FILE_INFO_STD {
  storeName : "main"
}

create FileInfo FI_FILE_INFO_TEMP {
  storeName : "temp"
}
  • Multistore for DtDefinition need to be altered into ksp like this :
alter DtDefintion DT_DATA_TO_IMPORT {
  storeName : "distantStore"
}
<plugin class="io.vertigo.dynamo.plugins.store.filestore.fs.FsFullFileStorePlugin">
  <param name="name" value="temp"/>
  <param name="path" value="java.io.tmpdir/testVertigo/"/>
  <!-- <param name="purgeDelayMinutes" value="1440" />  --> <!--  24h -->
</plugin>
<plugin class="io.vertigo.dynamo.plugins.store.filestore.db.DbFileStorePlugin">
  <!-- implicit name : main  -->
  <param name="storeDtName" value="DT_VX_FILE_INFO"/> <!-- Dt use in DataBase -->
</plugin>
  • Renamed io.vertigo.commons.plugins.resource.java.ClassPathResourceResolverPlugin to io.vertigo.core.plugins.resource.classpath.ClassPathResourceResolverPlugin
  • Renamed io.vertigo.commons.plugins.resource.url.URLResourceResolverPlugin to io.vertigo.core.plugins.resource.url.URLResourceResolverPlugin
  • Renamed Home.getComponentSpace() to Home.getApp().getComponentSpace()
  • Renamed Home.getDefinitionSpace() to Home.getApp().getDefinitionSpace()
  • Moved some class from io.vertigo.core to io.vertigo.app : Home, App, AppListener, Boot, Logo
  • Renamed package io.vertigo.core.config to io.vertigo.app.config
  • Renamed ConfigManager to ParamManager
  • Renamed ConfigPlugin to ParamPlugin
  • Changed API of ParamManager : merge path and name in one name Exemple :
/* replace  */
configManager.getStringValue("mail", "from");
/* to */
paramManager.getStringValue("mail.from");
  • Changed XML Config syntax : (no more trees)

Before :

<application-config>
  <config name="file.store">
    <property name="path" value="/var/tmp/" />
  </config>
</application-config>

After :

<config>
  <path name="file.store">
  <param name="path" value="/var/tmp/" />
   </path>
</config>
  • In managers.xml, for external params replaced {xxx} to ${xxx} and if your project use ParamContainerManager (it's native yet) replaced 'conf:xxx' by '${xxx}'

  • Splitted KVStore and DataStore : if you use KVStorePlugin you must add the KVStoreManager component.

  • Renamed io.vertigo.dynamo.plugins.kvdatastore.delayedmemory.DelayedMemoryKVDataStorePlugin to io.vertigo.dynamo.plugins.kvstore.delayedmemory.DelayedMemoryKVStorePlugin

  • Renamed dataStoreName of KVStore to collection in KVStorePlugin and in TokenManagerImpl

  • Refactored initializers : they are no more specialized for one component. Remove generics and use injection if necessary.

  • Refactored ElasticSearch indexes : now they are use as environments, documents are splitted by type. This mean you could use the same ElasticSearch instance for multiple environment. Previously created indexes are deprecated and must be recreated.

  • Refactored ElasticSearch plugins : cores params is deprecated, and should be replaced by envIndex whith the name of this environment (like : myApp-prod)

from 0.8.2 to 0.8.3

Renaming tool (beta)

  • In your index definitions ksp, use DslListFilterBuilder instead of RegExpListFilterBuilder (before named DefaultListFilterBuilder)

from 0.8.1 to 0.8.2

Renaming tool (beta)

  • Renamed io.vertigo.vega.rest.* to io.vertigo.vega.webservice.* (like io.vertigo.vega.rest.model.UiListState to io.vertigo.vega.webservice.model.UiListState)
  • Renamed io.vertigo.vega.plugins.rest.* to io.vertigo.vega.plugins.webservice.*
  • Renamed session attribute vertigo.rest.Session to vertigo.webservice.Session
  • Renamed XxxxRestHandlerPlugin to XxxxWebServiceHandlerPlugin (may be done in your managers.xml config)
  • Renamed parent class DefaultSearchLoader to AbstractSqlSearchLoader
  • Renamed io.vertigo.vega.rest.RestfulService to io.vertigo.vega.webservice.WebServices
  • Renamed io.vertigo.vega.impl.rest.servlet.ApplicationServletContextListener to io.vertigo.vega.impl.webservice.servlet.AppServletContextListener (in web.xml)
  • Replaced io.vertigo.vega.plugins.rest.routesregister.sparkjava.VegaSparkApplication by a new VegaSparkFilter.
    In web.xml you should replace SparkFilter like this :
<filter>
  <filter-name>SparkFilter</filter-name>
  <filter-class>io.vertigo.vega.plugins.webservice.webserver.sparkjava.VegaSparkFilter</filter-class>  
</filter>
  • [Core] Refactor java.lang.Timer to DeamonManager. The new DaemonManager is almost mandatory.
    Add this component into your config :
<component api="DaemonManager" class="io.vertigo.commons.impl.daemon.DaemonManagerImpl"/>
  • [Vega] Extract ServerState behaviour in a new optional plugin. Now ServerState behaviour is optional.
    Now your Vega module should be like this :
<module name="vertigo-vega" api="false" inheritance="java.lang.Object">
  <component api="WebServiceManager" class="io.vertigo.vega.impl.webservice.WebServiceManagerImpl">
    <plugin class="io.vertigo.vega.plugins.webservice.instrospector.annotations.AnnotationsEndPointIntrospectorPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.webserver.sparkjava.SparkJavaServletFilterWebServerPlugin" />
    <!-- Handlers -->
    <plugin class="io.vertigo.vega.plugins.webservice.handler.ExceptionWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.CorsAllowerWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.SessionInvalidateWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.SessionWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.RateLimitingWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.SecurityWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.AccessTokenWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.JsonConverterWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.ServerSideStateWebServiceHandlerPlugin" /> <!-- optional -->
    <plugin class="io.vertigo.vega.plugins.webservice.handler.AccessTokenWebServiceHandlerPlugin" /> <!-- optional -->
    <plugin class="io.vertigo.vega.plugins.webservice.handler.PaginatorAndSortWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.RateLimitingWebServiceHandlerPlugin" /> <!-- optional -->
    <plugin class="io.vertigo.vega.plugins.webservice.handler.ValidatorWebServiceHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.webservice.handler.RestfulServiceWebServiceHandlerPlugin" />
  </component>
  <component api="JsonEngine" class="io.vertigo.vega.engines.webservice.json.GoogleJsonEngine"/>
  <component api="TokenManager" class="io.vertigo.vega.impl.token.TokenManagerImpl">
    <param name="dataStoreName" value="demo-tokens" />
  </component>
</module>

from 0.8.0 to 0.8.1

  • Renamed io.vertigo.core.Home.App to io.vertigo.core.App
  • Renamed io.vertigo.core.boot to io.vertigo.core.config
  • Renamed io.vertigo.core.di to io.vertigo.core.component.di
  • Refactor XMLAppConfigBuilder : replace
new XMLAppConfigBuilder()
.withBootConfig(new BootConfigBuilder().[...].build())
.withModules([...])
.build();

to

new XMLAppConfigBuilder()
.withModules([...])
.beginBoot().[...].endBoot()
.build();
  • Refactor modules's definitions in managers.xml. Loading order are more predictible now :
  1. boot module
  2. definitions
  3. other components module per module (as before)

For that, previously module core may be renamed boot and resource tags must be put into a definitions tag. Should declared resource tags into a definitions tag.

Now your managers.xml may looks like:

<?xml version =  '1.0' encoding = 'UTF-8'?>
<config>
  <boot>
  <component api="LocaleManager" class="io.vertigo.core.impl.locale.LocaleManagerImpl" >
    <param name="locales" value="fr_FR" />
  </component>
  <component api="ResourceManager" class="io.vertigo.core.impl.resource.ResourceManagerImpl">
    <plugin class="io.vertigo.commons.plugins.resource.java.ClassPathResourceResolverPlugin" />
    <plugin class="io.vertigo.commons.plugins.resource.url.URLResourceResolverPlugin" />
  </component>
  <component api="EnvironmentManager" class="io.vertigo.core.impl.environment.EnvironmentManagerImpl">
      <plugin class="io.vertigo.dynamo.plugins.environment.loaders.poweramc.OOMLoaderPlugin" />
      <plugin class="io.vertigo.dynamo.plugins.environment.loaders.kpr.KprLoaderPlugin" >
        <param name="encoding" value="UTF-8" />
      </plugin>
      <plugin class="io.vertigo.dynamo.plugins.environment.registries.domain.DomainDynamicRegistryPlugin" />
      <plugin class="io.vertigo.dynamo.plugins.environment.registries.task.TaskDynamicRegistryPlugin" />
      <plugin class="io.vertigo.dynamo.plugins.environment.registries.search.SearchDynamicRegistryPlugin" />
      <plugin class="io.vertigo.dynamo.plugins.environment.registries.file.FileDynamicRegistryPlugin" />
    </component>
  </boot>
  
  <module name="model">
  <definitions>
    <resource type ="oom" path="file:./src/main/database/model/yourmodel.oom"/>
    <resource type ="kpr" path="file:./src/main/resources/mda/generation.kpr"/>     
  </definitions>
  </module> 

  <module name="vertigo-dynamo">
    <!-- dynamo components declarations -->
  </module>

  <module name="<!-- other modules -->">
  <!-- components declarations -->
  </module> 
</config>
  • Moved LocalManager and ResourceManager from commons to core Should renamed :
  • io.vertigo.commons.locale to io.vertigo.core.locale
  • io.vertigo.commons.impl.locale to io.vertigo.core.impl.locale
  • io.vertigo.commons.resource to io.vertigo.core.resource
  • io.vertigo.commons.impl.resource to io.vertigo.core.impl.resource

Note that plugins has been moved too but not renamed yet.

  • Moved EnvironmentManager from dynamo to core Should renamed :

  • io.vertigo.dynamo.environment to io.vertigo.core.environment

  • io.vertigo.dynamo.impl.environment to io.vertigo.core.impl.environment

  • Update search query analyzer with wildcard

  • Fixed search securityFilter, it could be set in FacetedSearchQueryBuilder

  • Add default value to DefaultListFilterBuilder. Syntax usage is : #myNullableField#!(myDefaultValue). Note that parenthesis are mandatory

  • SearchManager return Future on reindexAll to allow join on reindex and get indexed document count

  • CSVExporter should kept empty value as empty. No more replaced "" to " "

  • Renamed ESSearchServicePlugin to ESNodeSearchServicePlugin

  • Fixed store object without index

from 0.7.5 to 0.8.0

  • Renamed io.vertigo.tempo.plugins.job.* to io.vertigo.tempo.plugins.scheduler.*
  • Renamed io.vertigo.dynamo.persistance.* to io.vertigo.dynamo.store.*
  • Renamed PersistenceManager to StoreManager.
  • Renamed Broker to DataStore.
  • Removed KVDataStoreManager and KVDataStorePlugin is now a StoreManager's plugin
  • Added EventManager it's mandatory with StoreManager. Should add this manager in managers.xml :
<component api="EventManager" class="io.vertigo.commons.impl.event.EventManagerImpl" />
  • Moved SecurityResourceLoaderPlugin from VSecurityManager to EnvironmentManager in managers.xml
  • JobManager is now slipt into :
  • JobManager for JobDefinitions and execution
  • SchedulerManager for scheduling Your managers.xml, should now defined these both managers :
<component api="JobManager" class="io.vertigo.tempo.impl.job.JobManagerImpl" />
<component api="SchedulerManager" class="io.vertigo.tempo.impl.scheduler.SchedulerManagerImpl">
  <plugin class="io.vertigo.tempo.plugins.scheduler.basic.BasicSchedulerPlugin" />
</component>
  • Renamed withField to addField in quarto ExportSheetBuilder

from 0.7.4 to 0.7.5

  • Rename KTransaction to VTransaction
  • Rename KSecurityManager to VSecurityManager
  • Rename KFile to VFile
  • Rename KxFileInfo to VxFileInfo
  • Service SearchManager.loadList take a new parameter for sorting and/or paging (it's nullable)

Notes complémentaires

  • Ajout du paramètre targetSubDir dans les différents *GeneratorPlugin :
    <component api="MdaManager" class="io.vertigo.studio.impl.mda.MdaManagerImpl">
      <param name ="targetGenDir" value="src/main/javagen/"/>
      <param name ="encoding" value="UTF-8"/>
      <param name ="projectPackageName" value="fr.dgac.stitch"/>
    
      <plugin class="io.vertigo.studio.plugins.mda.domain.DomainGeneratorPlugin">
        <param name="targetSubDir" value="."/>
        <param name="generateDtResources" value="false" /><!-- FALSE -->
        <param name="generateDtDefinitions" value="true" />
        <param name="generateDtObject" value="true" />
        <param name="generateJpaAnnotations" value="false" /><!-- FALSE -->
      </plugin>
       
      <plugin class="io.vertigo.studio.plugins.mda.domain.SqlGeneratorPlugin">
        <param name="targetSubDir" value="sqlgen"/>
        <param name="baseCible" value="PostgreSql" />
        <param name="generateDrop" value="false" />
      </plugin>
      <plugin class="io.vertigo.studio.plugins.mda.domain.JSGeneratorPlugin">
        <param name="targetSubDir" value="."/>
        <param name="generateDtResourcesJS" value="true" />
        <param name="generateJsDtDefinitions" value="true" />
      </plugin>
      <plugin class="io.vertigo.studio.plugins.mda.task.TaskGeneratorPlugin">
        <param name="targetSubDir" value="."/>
      </plugin>
      <!-- plugin class="io.vertigo.studio.plugins.mda.search.SearchGeneratorPlugin"/  -->
      <plugin class="io.vertigo.studio.plugins.mda.file.FileInfoGeneratorPlugin">
        <param name="targetSubDir" value="."/>
      </plugin>
      <plugin class="io.vertigo.studio.plugins.mda.security.SecurityGeneratorPlugin">      
        <param name="targetSubDir" value="."/>
      </plugin>
    </component> 
  • io.vertigo.dynamo.impl.persistence.util.DAOBroker : suppression du "getOption(P).get()", on fait directement un get(P).
  • Suppression du RouteHandler et du SessionHandler. En cas de surcharge du SessionHandler, il faut créer à la place un SessionRestHandlerPlugin à passer au RestManagerImpl
  • DefinitionSpace.containsValue renommé containsDefinition
  • AbstractFormatterImpl qui était extend lorsque l'on définit un formatter a disparu. Il faut désormais implémenter l'interface Formatter (s'inspirer de FormatterDate par exemple).
  • PersistenceManager : getBrokerConfiguration, getMasterDataConfiguration, ... renommage des "Configuration" en "Config".
  • StringUtil.constToCamelCase avec un booleén, remplacé par StringUtil.constToLowerCamelCase et StringUtil.constToUpperCamelCase
  • Renommage des DtListURIForAssociation en DtListURIForNNAssociation
  • Suppression de la méthode save dans io.vertigo.dynamo.impl.persistence.datastore.BrokerImpl (à remplacer par un appel à create ou à update selon le cas).
  • XMLModulesBuilder remplacé par XMLAppConfigBuilder : Exemple :
protected AppConfig buildAppConfig() {
    final Properties prop = new Properties();
    prop.putAll(properties);
    final String[] managersXml;
    if (prop.containsKey("boot.applicationConfiguration")) {
      managersXml = prop.getProperty("boot.applicationConfiguration").split(";");
      prop.remove("boot.applicationConfiguration");
    } else {
      managersXml = getManagersXmlFileName();
    }
    return new XMLAppConfigBuilder().withSilence(true).withModules(getClass(), prop, managersXml).build();
  }
  • Modifications sur ElasticSearchHandler : entre autre, la recherche prend désormais un DtListState pour prendre en compte la pagination et le tri dans la requête envoyée à ES.

from 0.7.3 to 0.7.4

  • Significative updated dependencies (if you use them) : struts2 2.3.20, elasticsearch 1.4.4, lucene 4.10.3
  • Check early removed deprecated : PersistenceManager.getBrokerConfiguration, PersistenceManager.getMasterDataConfiguration, UiMessageStack.hasErrorOnField, UiRequestUtil.getHttpServletRequest, UiRequestUtil.getHttpSession
  • managers.xml : (Vega only) Add restHandlerPlugins. Vega module looks like :
<module name="vertigo-vega" api="false" inheritance="java.lang.Object">
  <component api="RestManager" class="io.vertigo.vega.impl.rest.RestManagerImpl">
    <plugin class="io.vertigo.vega.plugins.rest.instrospector.annotations.AnnotationsEndPointIntrospectorPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.routesregister.sparkjava.SparkJavaRoutesRegisterPlugin" />
    <!-- Handlers -->
    <plugin class="io.vertigo.vega.plugins.rest.handler.ExceptionRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.CorsAllowerRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.SessionInvalidateRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.SessionRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.RateLimitingRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.SecurityRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.AccessTokenRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.JsonConverterRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.PaginatorAndSortRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.ValidatorRestHandlerPlugin" />
    <plugin class="io.vertigo.vega.plugins.rest.handler.RestfulServiceRestHandlerPlugin" />
  </component>
  <component api="JsonEngine" class="io.vertigo.vega.rest.engine.GoogleJsonEngine"/>
  <component api="TokenManager" class="io.vertigo.vega.impl.token.TokenManagerImpl">
    <param name="dataStoreName" value="lollipop-tokens" />
  </component>
</module>
  • managers.xml : Rename vertigoimpl.commons to vertigo.commons.impl
  • managers.xml : Add SecurityResourceLoaderPlugin to KSecurityManager :
<plugin class="io.vertigo.persona.plugins.security.loaders.SecurityResourceLoaderPlugin" />
  • managers.xml : When using ElasticSearch as SearchPlugin you could use your embedded config file (yml)
  • model (om/ksp) : This version added Stereotype support on DtObject, you could define stereotype in oom or ksp. Will be use more significantly in future releases.
  • Struts2 : Multiple Radio buttons don't include $lt;br> anymore, so then could be horizontal or vertical. You could use CSS instead.
  • web.xml : (Vega only) Rename SparkApplication to VegaSparkApplication. Filter looks like :
<filter>
  <filter-name>SparkFilter</filter-name>
  <filter-class>spark.servlet.SparkFilter</filter-class>
  <init-param>
    <param-name>applicationClass</param-name>
    <param-value>io.vertigo.vega.plugins.rest.routesregister.sparkjava.VegaSparkApplication</param-value>
  </init-param>
</filter>

from 0.7.2 to 0.7.3

  • NameSpace2Java : build-mda.properties file must be in classPath. (Ex: file:build-mda.properties -> /META-INF/build-mda.properties)
  • NameSpace2Java : Some generation params move from .properties to managers.xml. projectPackageName, targetGenDir, encoding.
  • managers-mda.xml : MdaManager refactored, exemple :
<component api="MdaManager" class="io.vertigo.studio.impl.mda.MdaManagerImpl">
  <param name="projectPackageName" value="io.vertigo.dynamock" />
  <param name="targetGenDir" value="target/javagen/" />
  <param name="encoding" value="utf8" />
  <plugin class="io.vertigo.studio.plugins.mda.domain.DomainGeneratorPlugin">
    <param name="generateDtResources" value="true" />
    <param name="generateJpaAnnotations" value="true" />
    <param name="generateDtDefinitions" value="true" />
    <param name="generateDtObject" value="true" />
  </plugin>  
  <plugin class="io.vertigo.studio.plugins.mda.domain.SqlGeneratorPlugin">
    <param name="baseCible" value="PostgreSql" />
    <param name="generateDrop" value="true" />
  </plugin>  
  <plugin class="io.vertigo.studio.plugins.mda.domain.JSGeneratorPlugin">
    <param name="generateDtResourcesJS" value="true" />
    <param name="generateJsDtDefinitions" value="true" />
  </plugin>
  <plugin class="io.vertigo.studio.plugins.mda.task.TaskGeneratorPlugin" />
  <!-- plugin class="io.vertigo.studio.plugins.mda.search.SearchGeneratorPlugin"/ -->
  <plugin class="io.vertigo.studio.plugins.mda.file.FileInfoGeneratorPlugin"/>
</component>
  • managers.xml : params in web.xml must be prefixed by boot.
    Exemple : db.source -> boot.db.source

  • persistence.xml : To fix hibernate sequence your must remove the parameter hibernate.id.new_generator_mappings

  • FileInfo ksp : remove storeName attribute in fileInfo definition :

create FileInfo FI_FILE_INFO_STD {
   root : "DT_KX_FILE_INFO"
}
  • managers.xml : Moved all DataStorePlugin from io.vertigo.dynamo.plugins.persistence to io.vertigo.dynamo.plugins.persistence.datastore
  • managers.xml : Renamed io.vertigo.commons.plugins.cache.map.MapCachePlugin to io.vertigo.commons.plugins.cache.memory.MemoryCachePlugin
  • app-services.xml : <module> renamed to <config>
  • app-services.xml : Moved DaoBroker, this could change your inheritance attribute.
    Exemple:
<module name="dao" api="false" inheritance="io.vertigo.dynamo.impl.persistence.util.DAOBroker">  

from 0.7.0 to 0.7.1

  • managers.xml : Split DomainGeneratorPlugin into more specific plugin.
    Exemple:
<plugin class="io.vertigo.studio.plugins.mda.domain.DomainGeneratorPlugin">
  <param name="generateDtResources" value="true" />
  <param name="generateJpaAnnotations" value="true" />
  <param name="generateDtDefinitions" value="true" />
  <param name="generateDtObject" value="true" />
</plugin>  
<plugin class="io.vertigo.studio.plugins.mda.domain.SqlGeneratorPlugin">
  <param name="baseCible" value="PostgreSql" />
  <param name="generateDrop" value="true" />
</plugin>  
<plugin class="io.vertigo.studio.plugins.mda.domain.JSGeneratorPlugin">
  <param name="generateDtResourcesJS" value="true" />
  <param name="generateJsDtDefinitions" value="true" />
</plugin>
  • services.xml : Changed aspect declaration, more simple. Must be declared before Services.
    Exemple:
<module name="aspects" inheritance="java.lang.Object" >
  <aspect class="io.vertigo.dynamo.impl.transaction.KTransactionAspect"/>
  <aspect class="io.vertifo.demo.util.ComponentLoggerAspect"/>
</module>

from 0.6.x to 0.7.0

  • struts.xml : in order to use vertigo ftl tags, add
<constant name="struts.freemarker.manager.classname" value="io.vertigo.struts2.impl.views.freemarker.VFreemarkerManager" />
  • web.xml : If you override some ftl tags, you should set a context param to your template's path.
    Exemple :
<context-param>
  <param-name>TemplatePath</param-name>
  <param-value>webapp://WEB-INF/classes/</param-value>
</context-param>
  • managers.xml : Syntaxe change, rename <modules> to <config>
  • global : Renamed package io.vertigo.core.util to io.vertigo.util
  • global : Renamed package io.vertigo.core.lang to io.vertigo.lang
  • global : Moved VUserException to io.vertigo.lang.VUserException
  • global : class ComponentSpaceConfigBuilderreplaced by AppConfigBuilder
  • global : interface UiSecurityTokenManager renamed to TokenManager, and class io.vertigo.vega.impl.security.UiSecurityTokenManagerImpl replaced by io.vertigo.vega.impl.token.TokenManagerImpl
  • SearchManager : Moved public api from SearchServicePlugin to SearchManager
  • ExportManager: Replace exportManager.createExportListParameters by exportBuilder fluent usage.
    Exemple :
final DtList<D> dtList = resultsRef.readDtList();
final Export export = new ExportBuilder(ExportFormat.CSV, "ExportDossier")
    .beginSheet(dtList, "dossiers")
    .withField(DossierFields.CODE)
    .withField(DossierFields.TITLE)
    .withField(DossierFields.MANAGER)
    .withField(DossierFields.STATE)
    .withField(DossierFields.CREATION_DATE)
    .endSheet()
    .build();
return exportManager.createExportFile(export);