b33b4c44030969bdb6217e0e085cf77689a00637..494d349fb67be74da49caae2794fda702f595fb4
7 days ago Kenmegne
rename packages
494d34 diff | tree
165 files added
9526 ■■■■■ changed files
fdx_generator/dependency-reduced-pom.xml 177 ●●●●● patch | view | raw | blame | history
fdx_generator/documentation_generateur.rar patch | view | raw | blame | history
fdx_generator/generateur.log patch | view | raw | blame | history
fdx_generator/guide_d'installation_fdx_generator.docx patch | view | raw | blame | history
fdx_generator/hibernate.cfg.xml 23 ●●●●● patch | view | raw | blame | history
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide installation Fdx-Convert v.1.0.2.docx patch | view | raw | blame | history
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide installation Fdx-Generator v.1.0.2.docx patch | view | raw | blame | history
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide utilisation Fdx-Convert v.1.0.2.docx patch | view | raw | blame | history
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide utilisation Fdx-Generator v.1.0.2.docx patch | view | raw | blame | history
fdx_generator/nb-configuration.xml 18 ●●●●● patch | view | raw | blame | history
fdx_generator/pom.xml 196 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/App.java 108 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/AppUpdate.java 178 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/BriefLogFormatter.java 62 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/ConfigConstraint.java 27 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/ConfigValidator.java 28 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FileNameConstraint.java 27 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FileNameValidator.java 24 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FormatDateConstraint.java 27 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FormatDateValidator.java 31 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/KeyToDecryptConstraint.java 27 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/KeyToDecryptValidator.java 25 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/TailleFormatDateConstraint.java 27 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/TailleFormatDateValidator.java 30 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ConfigEditDialogController.java 52 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/FichierValidationEditDialogController.java 439 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ImportTypeFichierEditDialogController.java 75 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/MainController.java 288 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/StructureLigneEditDialogController.java 204 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/StructureLigneListDialogController.java 93 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/TypeFichierEditDialogController.java 74 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/TypeFichierListDialogController.java 102 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ValidateurFichierEditDialogController.java 258 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ValidateurFichierListDialogController.java 94 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/StructureLigneAdvancedSearchFormController.java 13 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/StructureLigneSearchFormController.java 13 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/TypeFichierAdvancedSearchFormController.java 38 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/TypeFichierSearchFormController.java 31 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/ValidateurFichierAdvancedSearchFormController.java 32 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/ValidateurFichierSearchFormController.java 87 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/table/StructureLigneTable.java 44 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/table/TypeFichierTable.java 39 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/table/ValidateurFichierTable.java 32 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/enums/DataType.java 38 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/enums/TypeDonnee.java 46 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/exceptions/ConfigException.java 24 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/ConfigEditFormController.java 51 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/FichierValidationEditFormController.java 216 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/ImportTypeFichierEditFormController.java 74 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/StructureLigneEditFormController.java 162 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/TypeFichierEditFormController.java 35 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/ValidateurFichierEditFormController.java 230 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/Configuration.java 28 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/FichierValidation.java 49 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/ImportFile.java 37 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/StructureLigne.java 94 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/TypeFichier.java 54 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/ValidateurFichier.java 88 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/AbstractDAO.java 281 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/HibernateUtil.java 48 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/StructureLigneDAO.java 31 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/TypeFichierDAO.java 45 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/ValidateurFichierDAO.java 84 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/pojo/Delimiteur.java 26 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/ConfigurationService.java 63 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/ImportFileService.java 90 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/StructureLigneService.java 93 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/TypeFichierService.java 103 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/ValidateurFichierService.java 100 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/AttributeFormatException.java 23 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/DataToImport.java 36 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/ImportData.java 178 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/PaginationElts.java 49 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/abstracts/AbstractEditDialog.fxml 102 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/abstracts/AbstractEditValidateDialog.fxml 107 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/abstracts/AbstractMainDialog.fxml 284 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/main.fxml 107 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/main2.fxml 103 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/main_1.fxml 45 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/TypeFichierAdvancedSearchForm.fxml 35 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/TypeFichierSearchForm.fxml 22 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/ValidateurFichierAdvancedSearchForm.fxml 22 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/ValidateurFichierSearchForm.fxml 26 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/ConfigEditForm.fxml 46 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/FichierValidationEditForm.fxml 155 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/ImportTypeFichierEditForm.fxml 71 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/StructureLigneEditForm.fxml 88 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/TypeFichierEditForm.fxml 60 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/ValidateurFichierEditForm.fxml 88 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/images/143-01.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/143-02.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/143-03.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/143-04.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/143-05.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/Accuueil_Generator.jpg patch | view | raw | blame | history
fdx_generator/src/main/resources/images/Fichier.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/Motif.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/Recherche.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/Reset.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/add.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/close-icon.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/edit.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/generate.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/icone_ins.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/max-icon.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/min-icon.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/next.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/oeil.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/previous.png patch | view | raw | blame | history
fdx_generator/src/main/resources/images/trash.png patch | view | raw | blame | history
fdx_generator/src/main/resources/log4j.properties 12 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/styles/main-style.css 251 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/styles/main_screen.css 246 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/styles/style.css 18 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/styles/title-bar.css 44 ●●●●● patch | view | raw | blame | history
fdx_generator/src/main/resources/update-description.txt 3 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/.netbeans_automatic_build patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/abstracts/AbstractEditDialog.fxml 102 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/abstracts/AbstractEditValidateDialog.fxml 107 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/abstracts/AbstractMainDialog.fxml 284 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/main.fxml 107 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/main2.fxml 103 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/main_1.fxml 45 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/TypeFichierAdvancedSearchForm.fxml 35 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/TypeFichierSearchForm.fxml 22 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/ValidateurFichierAdvancedSearchForm.fxml 22 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/ValidateurFichierSearchForm.fxml 26 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/ConfigEditForm.fxml 46 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/FichierValidationEditForm.fxml 155 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/ImportTypeFichierEditForm.fxml 71 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/StructureLigneEditForm.fxml 88 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/TypeFichierEditForm.fxml 60 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/ValidateurFichierEditForm.fxml 88 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/images/143-01.png patch | view | raw | blame | history
fdx_generator/target/classes/images/143-02.png patch | view | raw | blame | history
fdx_generator/target/classes/images/143-03.png patch | view | raw | blame | history
fdx_generator/target/classes/images/143-04.png patch | view | raw | blame | history
fdx_generator/target/classes/images/143-05.png patch | view | raw | blame | history
fdx_generator/target/classes/images/Accuueil_Generator.jpg patch | view | raw | blame | history
fdx_generator/target/classes/images/Fichier.png patch | view | raw | blame | history
fdx_generator/target/classes/images/Motif.png patch | view | raw | blame | history
fdx_generator/target/classes/images/Recherche.png patch | view | raw | blame | history
fdx_generator/target/classes/images/Reset.png patch | view | raw | blame | history
fdx_generator/target/classes/images/add.png patch | view | raw | blame | history
fdx_generator/target/classes/images/close-icon.png patch | view | raw | blame | history
fdx_generator/target/classes/images/edit.png patch | view | raw | blame | history
fdx_generator/target/classes/images/generate.png patch | view | raw | blame | history
fdx_generator/target/classes/images/icone_ins.png patch | view | raw | blame | history
fdx_generator/target/classes/images/max-icon.png patch | view | raw | blame | history
fdx_generator/target/classes/images/min-icon.png patch | view | raw | blame | history
fdx_generator/target/classes/images/next.png patch | view | raw | blame | history
fdx_generator/target/classes/images/oeil.png patch | view | raw | blame | history
fdx_generator/target/classes/images/previous.png patch | view | raw | blame | history
fdx_generator/target/classes/images/trash.png patch | view | raw | blame | history
fdx_generator/target/classes/log4j.properties 12 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/styles/main-style.css 251 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/styles/main_screen.css 246 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/styles/style.css 18 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/styles/title-bar.css 44 ●●●●● patch | view | raw | blame | history
fdx_generator/target/classes/update-description.txt 3 ●●●●● patch | view | raw | blame | history
fdx_generator/target/maven-archiver/pom.properties 5 ●●●●● patch | view | raw | blame | history
fdx_generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst 70 ●●●●● patch | view | raw | blame | history
fdx_generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst 62 ●●●●● patch | view | raw | blame | history
fdx_generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst patch | view | raw | blame | history
fdx_generator/target/test-classes/.netbeans_automatic_build patch | view | raw | blame | history
fdx_generator/dependency-reduced-pom.xml
New file
@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.7.2</version>
    <relativePath>pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.megatim.generation.validateur.typefichier</groupId>
  <artifactId>generation-validateur-typefichier</artifactId>
  <version>1.0</version>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <showDeprecation>false</showDeprecation>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <minimizeJar>true</minimizeJar>
              <filters>
                <filter>
                  <artifact>*:*</artifact>
                  <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                  </excludes>
                </filter>
              </filters>
              <transformers>
                <transformer>
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer>
                  <resource>META-INF/spring.factories</resource>
                </transformer>
                <transformer>
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.7.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>2.1.214</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.20</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.3.0.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>2.0.0.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.13.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.el</artifactId>
      <version>3.0.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.megatimfx.common</groupId>
      <artifactId>megatimfx-common</artifactId>
      <version>1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.megatimfx.security</groupId>
      <artifactId>megatimfx-security</artifactId>
      <version>1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.11.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>it.sauronsoftware</groupId>
      <artifactId>junique</artifactId>
      <version>1.04</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.megatim</groupId>
      <artifactId>module-compression</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.megatim</groupId>
      <artifactId>module.encryption</artifactId>
      <version>1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.vinumeris</groupId>
      <artifactId>updatefx</artifactId>
      <version>1.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.7.10</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <properties>
    <exec.mainClass>generation.validateur.typefichier.App</exec.mainClass>
    <maven.compiler.source>1.8</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
</project>
fdx_generator/documentation_generateur.rar
Binary files differ
fdx_generator/generateur.log
fdx_generator/guide_d'installation_fdx_generator.docx
Binary files differ
fdx_generator/hibernate.cfg.xml
New file
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
Click nbfs://nbhost/SystemFileSystem/Templates/XML/XMLDocument.xml to edit this template
-->
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">org.h2.Driver</property>
    <property name="hibernate.connection.url">jdbc:h2:file:C:/h2/generateur/generateur</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password"></property>
    <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">update</property>
    <mapping class="com.megatim.fdxgenerator.model.TypeFichier"></mapping>
    <mapping class="com.megatim.fdxgenerator.model.ValidateurFichier"></mapping>
    <mapping class="com.megatim.fdxgenerator.model.StructureLigne"></mapping>
    <mapping class="com.megatim.fdxgenerator.model.Configuration"></mapping>
  </session-factory>
</hibernate-configuration>
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide installation Fdx-Convert v.1.0.2.docx
Binary files differ
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide installation Fdx-Generator v.1.0.2.docx
Binary files differ
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide utilisation Fdx-Convert v.1.0.2.docx
Binary files differ
fdx_generator/manuels_installation_&_utilisation_fdxconvert_&_fdxgenerator/MGTCM-MINFI-Projet Fdx - FO - Guide utilisation Fdx-Generator v.1.0.2.docx
Binary files differ
fdx_generator/nb-configuration.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-shared-configuration>
    <!--
This file contains additional configuration written by modules in the NetBeans IDE.
The configuration is intended to be shared among all the users of project and
therefore it is assumed to be part of version control checkout.
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
-->
    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
        <!--
Properties that influence various parts of the IDE, especially code formatting and the like.
You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
That way multiple projects can share the same settings (useful for formatting rules for example).
Any value defined here will override the pom.xml file value but is only applicable to the current project.
-->
        <netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
    </properties>
</project-shared-configuration>
fdx_generator/pom.xml
New file
@@ -0,0 +1,196 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.megatim.com.megatim.fdxgenerator</groupId>
    <artifactId>fdx-generator</artifactId>
    <version>1.0</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <exec.mainClass>com.megatim.fdxgenerator.App</exec.mainClass>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showDeprecation>false</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.megatim.fdxgenerator.App</mainClass>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib/</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.megatim.fdxgenerator.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--<plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                                <mainClass>com.megatim.fdxgenerator.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    </configuration>
                <executions>
                    <execution>
                        <id>make-my-jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            !-->
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
            <version>2.1.214</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.3.0.Final</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.13.Final</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.el</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.megatimfx.common</groupId>
            <artifactId>megatimfx-common</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>com.megatimfx.security</groupId>
            <artifactId>megatimfx-security</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--        <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.19.0</version>
</dependency>
<dependency>
    <groupId>it.sauronsoftware</groupId>
    <artifactId>junique</artifactId>
    <version>1.04</version>
</dependency>
        -->
        <dependency>
            <groupId>com.megatim</groupId>
            <artifactId>module-compression</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.megatim</groupId>
            <artifactId>module.encryption</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
fdx_generator/src/main/java/com/megatim/fdxgenerator/App.java
New file
@@ -0,0 +1,108 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator;
import com.megatimfx.common.abstracts.context.AbstractViewContext;
import com.megatim.fdxgenerator.controller.MainController;
import com.megatim.fdxgenerator.model.dao.HibernateUtil;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
/**
 *
 * @author STEPHANIE
 */
public class App extends Application {
    public static final Map<String, Delimiteur> SEPARATEURS_DATE = new HashMap<>();
    public static final Map<String, Delimiteur> SEPARATEURS_DECIMAUX = new HashMap<>();
    public static final List<String> FORMATS_DATE = new ArrayList<>();
    public static final Map<String, Delimiteur> DELIMITEURS_COLONNE = new HashMap<>();
    public static final Map<String, Delimiteur> DELIMITEURS_LIGNE = new HashMap<>();
    static {
        SEPARATEURS_DATE.put("", new Delimiteur("", "Aucun"));
        SEPARATEURS_DATE.put("-", new Delimiteur("-", "Tiret ( - )"));
        SEPARATEURS_DATE.put("/", new Delimiteur("/", "Slash ( / )"));
        // SEPARATEURS_DATE.put("\\", new Delimiteur("\\", "Anti-Slash ( \\ )"));
        SEPARATEURS_DECIMAUX.put(".", new Delimiteur(".", "Point ( . )"));
        SEPARATEURS_DECIMAUX.put(",", new Delimiteur(",", "Virgule ( , )"));
        DELIMITEURS_COLONNE.put("", new Delimiteur("", "Aucun"));
        DELIMITEURS_COLONNE.put(";", new Delimiteur(";", "Point-virgule ( ; )"));
        DELIMITEURS_COLONNE.put("|", new Delimiteur("|", "Barre verticale ( | )"));
        DELIMITEURS_COLONNE.put("\\t", new Delimiteur("\\t", "Tabulation ( \\t )"));
        DELIMITEURS_LIGNE.put("\\n", new Delimiteur("\\n", "Retour Charriot ( \\n )"));
        FORMATS_DATE.add("ddMMyyyy");
        FORMATS_DATE.add("yyyyMMdd");
        FORMATS_DATE.add("yyyyddMM");
        FORMATS_DATE.add("MMyyyydd");
        FORMATS_DATE.add("MMddyyy");
        FORMATS_DATE.add("yyyy");
        FORMATS_DATE.add("MMyyyy");
        FORMATS_DATE.add("yyyyMMddHHmmss");
        FORMATS_DATE.add("yyyyMMdd HH:mm:ss");
        FORMATS_DATE.add("yyyyddMMHHmmss");
        FORMATS_DATE.add("ddMMyyyyHHmmss");
//        FORMATS_DATE.add("MMddyyyHHmmss");
    }
    @Override
    public void start(Stage primaryStage) throws FileNotFoundException, MalformedURLException, IOException {
        AbstractViewContext.getInstance().setAbstractEditDialogControllerURL(App.class.getResource("/com/megatim/fdxgenerator/abstracts/AbstractEditDialog.fxml"));
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainController.class.getResource("main.fxml"));
        Parent root = loader.load();
        Scene scene = new Scene(root, 1100, 600);
        primaryStage.setTitle("Générateur de fichiers de validation v1.0.2");
        primaryStage.getIcons().add(new Image("images/icone_ins.png"));
        primaryStage.setScene(scene);
        primaryStage.setOnCloseRequest(e -> {
            HibernateUtil.shutdown();
            System.exit(0);
        });
        primaryStage.show();
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String appId = "com.megatim.fdxgenerator.App";
        boolean alreadyRunning;
        /*try {
            JUnique.acquireLock(appId);
            alreadyRunning = false;
        } catch (AlreadyLockedException e) {
            alreadyRunning = true;
        }
        if (!alreadyRunning) {
            launch(args);
        } else {
            System.exit(1);
        }*/
        launch(args);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/AppUpdate.java
New file
@@ -0,0 +1,178 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator;
/**
 * https://github.com/vinumeris/updatefx
 * @author STEPHANIE
 */
public class AppUpdate {
//
//    private static java.util.logging.Logger logger;
//    private static final Logger log = LoggerFactory.getLogger(App.class);
//    public static int VERSION = 1;
//    private static final String APP_NAME = "generateur";
//
//    @Override
//    public void start(Stage primaryStage) throws FileNotFoundException, MalformedURLException, IOException {
//         // For some reason the JavaFX launch process results in us losing the thread context class loader: reset it.
//        Thread.currentThread().setContextClassLoader(App.class.getClassLoader());
//        // Must be done twice for the times when we come here via realMain.
//        AppDirectory.initAppDir(APP_NAME);
//
//        log.info("Hello World! This is version " + VERSION);
//
//       // ProgressIndicator indicator = showGiantProgressWheel(primaryStage);
//
//        List<ECPoint> pubkeys = Crypto.decode();
//
//        Updater updater = new Updater(URI.create("http://localhost:8080/generateur-updates/index"), "generation-typefichier-" + VERSION,
//                AppDirectory.dir(), UpdateFX.findCodePath(App.class), pubkeys, 0) {
//            @Override
//            protected void updateProgress(long workDone, long max) {
//                super.updateProgress(workDone, max);
//                // Give UI a chance to show.
//                Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);
//            }
//        };
//
//        FXMLLoader loader = new FXMLLoader();
//        loader.setLocation(MainController.class.getResource("main.fxml"));
//        Parent root = loader.load();
//        MainController controller = loader.getController();
//
//       ProgressIndicator indicator = controller.getIndicator();
//        indicator.progressProperty().bind(updater.progressProperty());
//        Label label = controller.getLabelVersion();
//
//
//        log.info("Checking for updates!");
//        updater.setOnRunning(event -> {
//            label.setText("Mise Ã  jour en cours");
//        });
//        updater.setOnSucceeded(event -> {
//            try {
//                UpdateSummary summary = updater.get();
//               Updates updates = summary.updates;
//               int count = updates.getUpdatesCount();
//
//                if (!summary.descriptions.isEmpty()) {
//                    log.info("One liner: {}", summary.descriptions.get(0).getOneLiner());
//                    log.info("{}", summary.descriptions.get(0).getDescription());
//                }
//                if (summary.highestVersion > VERSION) {
//                    int nb = summary.highestVersion - VERSION;
//                    log.info("Restarting to get version " + summary.highestVersion);
//                    label.setText("Nombre de mise Ã  jour trouvé : " + nb);
//                    if (UpdateFX.getVersionPin(AppDirectory.dir()) == 0) {
//                        log.info("before restartApp()");
//                        UpdateFX.restartApp();
//                    }
//                } else {
//                    label.setVisible(false);
//                    indicator.setVisible(false);
//                }
//            } catch (Throwable e) {
//                log.error("oops", e);
//            }
//        });
//        updater.setOnFailed(event -> {
//            label.setVisible(false);
//            indicator.setVisible(false);
//
//            log.error("Update error: {}", updater.getException());
//            updater.getException().getMessage();
//            updater.getException().printStackTrace();
//        });
//
//        indicator.setOnMouseClicked(ev -> UpdateFX.restartApp());
//
//        new Thread(updater, "UpdateFX Thread").start();
//
//        AbstractViewContext.getInstance().setAbstractEditDialogControllerURL(App.class.getResource("/generation/validateur/typefichier/abstracts/AbstractEditDialog.fxml"));
//
//
//
//        Scene scene = new Scene(root, 1100, 600);
//
//        primaryStage.setTitle("Générateur de fichiers de validation");
//        primaryStage.getIcons().add(new Image("images/icone_ins.png"));
//        primaryStage.setScene(scene);
//        primaryStage.setOnCloseRequest(e -> {
//            HibernateUtil.shutdown();
//           System.exit(0);
//        });
//        primaryStage.show();
//    }
//
//    /**
//     * @param args the command line arguments
//     */
//     public static void main(String[] args) throws IOException {
//        // We want to store updates in our app dir so must init that here.
//        AppDirectory.initAppDir(APP_NAME);
//        setupLogging();
//        // re-enter at realMain, but possibly running a newer version of the software i.e. after this point the
//        // rest of this code may be ignored.
//        UpdateFX.bootstrap(App.class, AppDirectory.dir(), args);
//
//        String appId = "generation.validateur.typefichier.App";
//        boolean alreadyRunning;
//        try {
//            JUnique.acquireLock(appId);
//            alreadyRunning = false;
//        } catch (AlreadyLockedException e) {
//            alreadyRunning = true;
//        }
//        if (!alreadyRunning) {
//            launch(args);
//        } else {
//            System.exit(1);
//        }
//    }
//
//    public static void realMain(String[] args) {
//        launch(args);
//    }
//
//    private static void setupLogging() throws IOException {
//        logger = java.util.logging.Logger.getLogger("");
//        logger.getHandlers()[0].setFormatter(new BriefLogFormatter());
//        FileHandler handler = new FileHandler(AppDirectory.dir().resolve("log.txt").toString(), true);
//        handler.setFormatter(new BriefLogFormatter());
//        logger.addHandler(handler);
//    }
//
//    private ProgressIndicator showGiantProgressWheel(Stage stage) {
//        ProgressIndicator indicator = new ProgressIndicator();
//        BorderPane borderPane = new BorderPane(indicator);
//        borderPane.setMinWidth(640);
//        borderPane.setMinHeight(480);
//        Button pinButton = new Button();
//        pinButton.setText("Pin to version "+VERSION);
//        pinButton.setOnAction(event -> {
//            UpdateFX.pinToVersion(AppDirectory.dir(), VERSION);
//            UpdateFX.restartApp();
//        });
//        HBox box = new HBox(new Label("Version " + VERSION), pinButton);
//        box.setSpacing(10);
//        box.setAlignment(Pos.CENTER_LEFT);
//        box.setPadding(new Insets(10));
//        borderPane.setTop(box);
//        Scene scene = new Scene(borderPane);
//        stage.setScene(scene);
//
//        return indicator;
//    }
//
//    private ProgressIndicator showGiantProgressWheel(MainController controller) {
//        ProgressIndicator indicator = controller.getIndicator();
//
//        Label label = controller.getLabelVersion();
//        label.setText("Version "+VERSION);
//
//        return indicator;
//    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/BriefLogFormatter.java
New file
@@ -0,0 +1,62 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.text.MessageFormat;
import java.util.Date;
import java.util.logging.*;
/**
 *
 * @author STEPHANIE
 * A Java logging formatter that writes more compact output than the default.
 */
public class BriefLogFormatter extends Formatter {
     private static final MessageFormat messageFormat = new MessageFormat("{3,date,hh:mm:ss} {0} {1}.{2}: {4}\n{5}");
    // OpenJDK made a questionable, backwards incompatible change to the Logger implementation. It internally uses
    // weak references now which means simply fetching the logger and changing its configuration won't work. We must
    // keep a reference to our custom logger around.
    private static Logger logger;
    /** Configures JDK logging to use this class for everything. */
    public static void init() {
        logger = Logger.getLogger("");
        final Handler[] handlers = logger.getHandlers();
        // In regular Java there is always a handler. Avian doesn't install one however.
        if (handlers.length > 0)
            handlers[0].setFormatter(new BriefLogFormatter());
    }
    public static void initVerbose() {
        init();
        logger.setLevel(Level.ALL);
        logger.log(Level.FINE, "test");
    }
    @Override
    public String format(LogRecord logRecord) {
        Object[] arguments = new Object[6];
        arguments[0] = logRecord.getThreadID();
        String fullClassName = logRecord.getSourceClassName();
        int lastDot = fullClassName.lastIndexOf('.');
        String className = fullClassName.substring(lastDot + 1);
        arguments[1] = className;
        arguments[2] = logRecord.getSourceMethodName();
        arguments[3] = new Date(logRecord.getMillis());
        arguments[4] = logRecord.getMessage();
        if (logRecord.getThrown() != null) {
            Writer result = new StringWriter();
            logRecord.getThrown().printStackTrace(new PrintWriter(result));
            arguments[5] = result.toString();
        } else {
            arguments[5] = "";
        }
        return messageFormat.format(arguments);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/ConfigConstraint.java
New file
@@ -0,0 +1,27 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/AnnotationType.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
 *
 * @author STEPHANIE
 */
@Documented
@Constraint(validatedBy = ConfigValidator.class)
@Target( { ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ConfigConstraint {
    String message() default "Configurer d'abord le repertoire de dépôt des fichiers de validation avant de procéder Ã  la génération";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/ConfigValidator.java
New file
@@ -0,0 +1,28 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import com.megatim.fdxgenerator.model.Configuration;
import com.megatim.fdxgenerator.model.FichierValidation;
import com.megatim.fdxgenerator.service.ConfigurationService;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
 *
 * @author STEPHANIE
 */
public class ConfigValidator implements  ConstraintValidator<ConfigConstraint, FichierValidation> {
    @Override
    public void initialize(ConfigConstraint cons) {
    }
    @Override
    public boolean isValid(FichierValidation fichVal, ConstraintValidatorContext cxt) {
        Configuration config = ConfigurationService.getInstance().getCurrentConfig();
        return config != null;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FileNameConstraint.java
New file
@@ -0,0 +1,27 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
 *
 * @author STEPHANIE
 */
@Documented
@Constraint(validatedBy = FileNameValidator.class)
@Target( { ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface FileNameConstraint {
    String message() default "Le format de la date est obligatoire";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FileNameValidator.java
New file
@@ -0,0 +1,24 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import com.megatim.fdxgenerator.model.FichierValidation;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
 *
 * @author STEPHANIE
 */
public class FileNameValidator implements  ConstraintValidator<FileNameConstraint, FichierValidation> {
    @Override
    public boolean isValid(FichierValidation t, ConstraintValidatorContext cvc) {
        if(t.isValidateFileName())
            return t.getFormatDate() != null ;
        else return true;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FormatDateConstraint.java
New file
@@ -0,0 +1,27 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/AnnotationType.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
 *
 * @author STEPHANIE
 */
@Documented
@Constraint(validatedBy = FormatDateValidator.class)
@Target( { ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface FormatDateConstraint {
    String message() default "Format Date yyyy : Année, MM : Mois, dd : Jour , HH : Heure, mm: Minute, ss : Seconde";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/FormatDateValidator.java
New file
@@ -0,0 +1,31 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import com.megatim.fdxgenerator.enums.TypeDonnee;
import com.megatim.fdxgenerator.model.StructureLigne;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
 *
 * @author STEPHANIE
 */
public class FormatDateValidator implements  ConstraintValidator<FormatDateConstraint, StructureLigne> {
    @Override
    public void initialize(FormatDateConstraint cons) {
    }
    @Override
    public boolean isValid(StructureLigne structLigne, ConstraintValidatorContext cxt) {
         if(structLigne.getTypeDonnee().getValue().equals(TypeDonnee.DATE.getValue())){
             return structLigne.getFormatDate().matches(
                     "y{4}((M{2}){0,1})((d{2}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})|"
            + "y{4}((d{2}){0,1})((M{2}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})|"
            + "M{2}((y{4}){0,1})((d{2}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})|"
            + "M{2}((d{2}){0,1})((y{4}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})");
         } else return true;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/KeyToDecryptConstraint.java
New file
@@ -0,0 +1,27 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/AnnotationType.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
 *
 * @author STEPHANIE
 */
@Documented
@Constraint(validatedBy = KeyToDecryptValidator.class)
@Target( { ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface KeyToDecryptConstraint {
    String message() default "La clé est sa confirmation sont obligatoires et  doivent avoir la même valeur";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/KeyToDecryptValidator.java
New file
@@ -0,0 +1,25 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import com.megatim.fdxgenerator.model.FichierValidation;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
 *
 * @author STEPHANIE
 */
public class KeyToDecryptValidator implements  ConstraintValidator<KeyToDecryptConstraint, FichierValidation>{
    @Override
    public boolean isValid(FichierValidation t, ConstraintValidatorContext cvc) {
        if(t.isProtege())
            return t.getKeyToEncrypt() != null && !t.getKeyToEncrypt().isEmpty() &&
                    t.getKeyToEncrypt().equals(t.getKeyConfirmation());
        else return true;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/TailleFormatDateConstraint.java
New file
@@ -0,0 +1,27 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/AnnotationType.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
 *
 * @author STEPHANIE
 */
@Documented
@Constraint(validatedBy = TailleFormatDateValidator.class)
@Target( { ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface TailleFormatDateConstraint {
    String message() default "Le format est obligatoire et sa taille doit Ãªtre Ã©gale Ã  la taille du champ";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/annotations/TailleFormatDateValidator.java
New file
@@ -0,0 +1,30 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.annotations;
import com.megatim.fdxgenerator.enums.TypeDonnee;
import com.megatim.fdxgenerator.model.StructureLigne;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
 *
 * @author STEPHANIE
 */
public class TailleFormatDateValidator implements  ConstraintValidator<TailleFormatDateConstraint, StructureLigne> {
    @Override
    public void initialize(TailleFormatDateConstraint cons) {
    }
    @Override
    public boolean isValid(StructureLigne structLigne, ConstraintValidatorContext cxt) {
         if(structLigne.getTypeDonnee() != null && structLigne.getTypeDonnee().getValue().equals(TypeDonnee.DATE.getValue())) {
             System.out.println("formatDate = "+structLigne.getFormatDate());
             return  structLigne.getFormatDate() != null &&
              structLigne.getTaille() == structLigne.getFormatDate().length();
         } else return true;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ConfigEditDialogController.java
New file
@@ -0,0 +1,52 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.enums.TypeOperation;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatim.fdxgenerator.forms.ConfigEditFormController;
import com.megatim.fdxgenerator.model.Configuration;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.scene.layout.Pane;
/**
 *
 * @author mela
 */
public class ConfigEditDialogController extends AbstractEditDialogController<Configuration> {
    private ConfigEditFormController configEditFormController;
    @Override
    public String getTitle() {
        getEditButton().setText("Configurer");
        return "Configuration des repertoires";
    }
    @Override
    public Pane getContentFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(configEditFormController.getClass().getResource("ConfigEditForm.fxml"), configEditFormController);
    }
     @Override
    public Object getContentFormController() {
        return configEditFormController;
    }
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        configEditFormController = new ConfigEditFormController();
        super.initialize(url, rb);
    }
    @Override
    protected void beforeBindFormFieldWithCurrentObject(Configuration bindObject, Object formController, TypeOperation typeOperation) {
        super.beforeBindFormFieldWithCurrentObject(bindObject, formController, typeOperation);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/FichierValidationEditDialogController.java
New file
@@ -0,0 +1,439 @@
package com.megatim.fdxgenerator.controller;
import com.megatim.module.compression.impl.JavaZipZip4Impl;
import com.megatim.module.encryption.ifaces.EncryptionFace;
import com.megatim.module.encryption.impl.AESImpl;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatimfx.components.customdialogs.AlertMessageUtil;
import com.megatimfx.components.customdialogs.LoadinIndicatorDialogUtil;
import com.megatimfx.components.dialogs.NotificationDialog;
import com.megatimfx.components.dialogs.NotificationType;
import com.megatim.fdxgenerator.enums.DataType;
import com.megatim.fdxgenerator.enums.TypeDonnee;
import com.megatim.fdxgenerator.exceptions.ConfigException;
import com.megatim.fdxgenerator.forms.FichierValidationEditFormController;
import com.megatim.fdxgenerator.model.Configuration;
import com.megatim.fdxgenerator.model.FichierValidation;
import com.megatim.fdxgenerator.model.StructureLigne;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import com.megatim.fdxgenerator.model.dao.StructureLigneDAO;
import com.megatim.fdxgenerator.model.dao.ValidateurFichierDAO;
import com.megatim.fdxgenerator.service.ConfigurationService;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.ResourceBundle;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.scene.Node;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javax.activation.UnsupportedDataTypeException;
import org.apache.commons.io.FileUtils;
/**
 *
 * @author STEPHANIE
 */
public class FichierValidationEditDialogController extends AbstractEditDialogController<FichierValidation> {
    private FichierValidationEditFormController fichierValidationEditFormController;
    private int index;
    Boolean result = true;
    private final String ENCRYPT_DIR = "ENCRYPT_DIR";
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        fichierValidationEditFormController = new FichierValidationEditFormController();
        super.initialize(url, rb);
    }
    @Override
    public String getTitle() {
        getEditButton().setText("Générer");
        return "Génération du fichier de validation d'un type fichier";
    }
    @Override
    public Pane getContentFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(fichierValidationEditFormController.getClass().getResource("FichierValidationEditForm.fxml"), fichierValidationEditFormController);
    }
    @Override
    public Object getContentFormController() {
        return fichierValidationEditFormController;
    }
    @Override
    public boolean beforeSave(ActionEvent event) {
        boolean bool = super.beforeSave(event);
        if (fichierValidationEditFormController.getIsProtegeCheckBox().isSelected()) {
            return bool && fichierValidationEditFormController.getKeyConfirmationField() != null && fichierValidationEditFormController.getKeyToEncryptField() != null;
        } else {
            return bool;
        }
    }
    private Boolean generateFichierValidation(FichierValidation f, Configuration config) throws Exception {
        final String charset = "UTF-8";
        String fileExtension = ".xml";
        String fileNamePrefix = "Fdx-Validator";
        index = 0;
        result = true;
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss");
        if (config == null) {
            throw new ConfigException("Génération impossible, le répertoire de dépôt des fichiers de validation n'est pas configuré");
        }
        try {
            Optional<ValidateurFichier> validateurFichier = ValidateurFichierDAO.findByTypeFichier(f.getTypeFichier().getCode());
            File file = new File(config.getOutputDir(), fileNamePrefix + f.getTypeFichier().getCode() + "-" + dateTimeFormatter.format(LocalDateTime.now()) + fileExtension);
            if (validateurFichier.isPresent()) {
                ValidateurFichier vf = validateurFichier.get();
                openTags(file, charset);
                FileUtils.writeStringToFile(file, "\t\t<entity name=\"com.megatim.typefichier.validator.model.GenericTypeFichier\" error-report-field=\"codeErreur\" activate=\"true\"> \n\n", charset, true);
                fileNameValidation(f, file, charset);
                //vérifie si le fichier est vide
                emptyFileValidation(file, charset);
                FileUtils.writeStringToFile(file, "\t\t</entity>\n\n", charset, true);
                //validation des lignes de données
                String csvClass = "ExcelFileLine";
                String txtClass = "FileLine";
                String entityTagPart1 = "\t\t<entity name=\"com.megatim.typefichier.validator.model.";
                String entityTagPart2 = " error-report-field=\"codeErreur\" activate=\"true\"";
                String newLine = ">  \n \n";
                String extension = "\" extension=\"" + vf.getDataType().name().toLowerCase() + "\" ";
                String headerPresent = " header-present=\"" + vf.isHeaderPresent() + "\"";
                switch (vf.getDataType()) {
                    case CSV:
                        String lineDelimiter = " line-delimiter=\"" + vf.getCodeDelimiteurLigne() + "\"";
                        String columnDelimiter = " column-delimiter=\"" + vf.getCodeDelimiteurColonne() + "\"";
                        FileUtils.writeStringToFile(file, entityTagPart1 + csvClass + extension + entityTagPart2 + headerPresent + lineDelimiter + columnDelimiter + newLine, charset, true);
                        break;
                    case XLS:
                    case XLSX:
                        FileUtils.writeStringToFile(file, entityTagPart1 + csvClass + extension + entityTagPart2 + headerPresent + newLine, charset, true);
                        break;
                    case TXT:
                        FileUtils.writeStringToFile(file, entityTagPart1 + txtClass + extension + entityTagPart2 + newLine, charset, true);
                        break;
                    default:
                        throw new UnsupportedDataTypeException("'" + vf.getDataType() + "' : format inconnu");
                }
                columnsValidation(vf, file, charset);
                if (vf.getDataType().equals(DataType.TXT)) {
                    lineLengthValidation(f, file, charset);
                }
                closeTags(file, charset);
            } else {
                FileUtils.writeStringToFile(file, "Le type fichier " + f.getTypeFichier().getCode() + " n'a pas de validateur enregistré ", "UTF-8", false);
            }
            if (fichierValidationEditFormController.getIsProtegeCheckBox().isSelected()) {
                result = encryptAndZipFile(file, config, f.getKeyToEncrypt());
            }
        } catch (Exception ex) {
            result = false;
        }
        return result;
    }
    private void openTags(File file, final String charset) throws IOException {
        FileUtils.writeStringToFile(file, "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n", charset, false);
        FileUtils.writeStringToFile(file, "<predicate-config xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n", charset, true);
        FileUtils.writeStringToFile(file, "xsi:schemaLocation=\"http://www.leadware.net/predicatelogic-config ../xsd/predicatelogic-config.xsd\" \n", charset, true);
        FileUtils.writeStringToFile(file, "xmlns=\"http://www.leadware.net/predicatelogic-config\"> \n \n", charset, true);
        FileUtils.writeStringToFile(file, "\t<entities> \n", charset, true);
    }
    private void fileNameValidation(FichierValidation f, File file, final String charset) throws IOException {
        int fileNameIndex = 0;
        if (f.isValidateFileName()) {
            //validation du code participant dans le nom du fichier
            FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"CodeParticipant\" activate=\"true\">\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"ifCodeAgentOrCodeParticipant\" error-code=\"CodeParticipant\" activate=\"true\">\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"code\" value=\"" + f.getTypeFichier().getCodeParticipant() + "\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"fileName\" field=\"fileName\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"index\" value=\"" + fileNameIndex + "\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"taille\" value=\"" + f.getTypeFichier().getCodeParticipant().length() + "\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t</assertion>\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t</validation>\n\n", charset, true);
            fileNameIndex += f.getTypeFichier().getCode().length();
            //validation de la date dans le nom du fichier
            FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"Date\" activate=\"true\">\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"ifDate\" error-code=\"Date\" activate=\"true\">\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"format\" value=\"" + f.getFormatDate() + "\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"fileName\" field=\"fileName\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"index\" value=\"" + fileNameIndex + "\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t</assertion>\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t</validation>\n\n", charset, true);
            fileNameIndex += f.getFormatDate().length();
            //validation des tierces
            if (f.getMaxValueTierce() > 0) {
                FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"Tierce\" activate=\"true\">\n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"ifTierce\" error-code=\"Tierce\" activate=\"true\">\n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"minValue\" value=\"0\" />\n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"maxValue\" value=\"" + f.getMaxValueTierce() + "\" />\n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"index\" value=\"" + fileNameIndex + "\" />\n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"fileName\" field=\"fileName\" />\n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t</assertion>\n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t</validation>\n\n", charset, true);
            }
            //validation de l'extension du fichier
            FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"Extension\" activate=\"true\">\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"equal\" error-code=\"Extension\" activate=\"true\">\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"equalValue\" value=\"" + f.getExtension() + "\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"equalParam\" field=\"extension\" />\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t</assertion>\n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t</validation>\n\n", charset, true);
        }
    }
    private void emptyFileValidation(File file, final String charset) throws IOException {
        FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"FichierVide\" activate=\"true\">\n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t\t<assertion assert-name=\"notEqual\" error-code=\"FichierVide\" activate=\"true\">\n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"notEqualValue\" value=\"0\" />\n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"notEqualParam\" field=\"nbOfLines\" />\n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t</assertion>\n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t</validation>\n\n", charset, true);
    }
    private void lineLengthValidation(FichierValidation f, File file, final String charset) throws IOException {
        FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"validation" + f.getTypeFichier().getCode() + "Taille\" activate=\"true\"> \n \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"equal\" error-code=\"" + f.getTypeFichier().getCode() + "Taille\" activate=\"true\"> \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"equalValue\" value=\"" + index + "\" /> \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"equalParam\" field=\"taille\" /> \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t</assertion> \n \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t</validation> \n", charset, true);
    }
    private void closeTags(File file, final String charset) throws IOException {
        FileUtils.writeStringToFile(file, "\t\t</entity> \n\n", charset, true);
        FileUtils.writeStringToFile(file, "\t</entities> \n", charset, true);
        FileUtils.writeStringToFile(file, "</predicate-config>", charset, true);
    }
    private void columnsValidation(ValidateurFichier vf, File file, final String charset) throws IOException {
        List<StructureLigne> structureLignes = StructureLigneDAO.findByValidateurFichierId(vf.getId());
        Collections.sort(structureLignes, (StructureLigne s1, StructureLigne s2) -> new Integer(s1.getPosition()).compareTo(s2.getPosition()));
        switch (vf.getDataType()) {
            case TXT:
                txtColumns(structureLignes, file, charset);
                break;
            case CSV:
            case XLS:
            case XLSX:
                csvColumns(structureLignes, file, charset);
                break;
            default:
                throw new UnsupportedDataTypeException("Format de données inconnu");
        }
    }
    private void txtColumns(List<StructureLigne> structureLignes, File file, final String charset) throws IOException {
        for (StructureLigne s : structureLignes) {
            FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"" + s.getCode() + "\" activate=\"true\"> \n \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"ifTypeFichier\" error-code=\"" + s.getCode() + "\" activate=\"true\"> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"position\" value=\"" + s.getPosition() + "\" /> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"index\" value=\"" + index + "\" /> \n", charset, true);
            if (s.getTypeDonnee().getValue().equals(TypeDonnee.DATE.getValue()) && s.getSeparateurDate() != null && !s.getSeparateurDate().isEmpty()) {
                structureLigneNewLength(s);
            }
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"taille\" value=\"" + s.getTaille() + "\" /> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"typeDonnee\" value=\"" + s.getTypeDonnee() + "\" /> \n", charset, true);
            if (s.getTypeDonnee().getValue().equals(TypeDonnee.DATE.getValue())) {
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"formatDate\" value=\"" + s.getFormatDate() + "\" /> \n", charset, true);
                if (s.getSeparateurDate() != null && !s.getSeparateurDate().isEmpty()) {
                    FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"separateurDate\" value=\"" + s.getSeparateurDate() + "\" /> \n", charset, true);
                }
            }
            if (s.getTypeDonnee().equals(TypeDonnee.DECIMAL)) {
                index += s.getTaillePartieDecimal() + s.getSeparateurDecimal().length();
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"taillePartieDecimale\" value=\"" + s.getTaillePartieDecimal() + "\" /> \n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"separateurDecimal\" value=\"" + s.getSeparateurDecimal() + "\" /> \n", charset, true);
            }
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"ligne\" field=\"ligne\" /> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t</assertion> \n \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t</validation> \n \n", charset, true);
            index += s.getTaille();
        }
    }
    //SI on suppose que les dates sont au format yyyy-MM-dd où le tiret (-) est le séparateur dans cet exemple
    //on aura donc 2 séparateurs par date et dans dans ce cas, on ajoute 2, Ã  l'index de fin de la date
    private void structureLigneNewLength(StructureLigne s) {
        //Si la date contient le mois, ajouter 1 Ã  la taille pour le séparateur(-)
        if (s.getFormatDate().contains("MM")) {
            s.setTaille(s.getTaille() + 1);
        }
        //Si la date contient le jour, ajouter 1 Ã  la taille pour le séparateur(-)
        if (s.getFormatDate().contains("dd")) {
            s.setTaille(s.getTaille() + 1);
        }
        //Si la date contient l'heure, ajouter 1 Ã  la taille pour le séparateur (L'espace ou T)
        if (s.getFormatDate().contains("HH")) {
            s.setTaille(s.getTaille() + 1);
        }
        //Si la date contient la minute, ajouter 1 Ã  la taille pour le séparateur (:)
        if (s.getFormatDate().contains("mm")) {
            s.setTaille(s.getTaille() + 1);
        }
        //Si la date contient la seconde, ajouter 1 Ã  la taille pour le séparateur (:)
        if (s.getFormatDate().contains("ss")) {
            s.setTaille(s.getTaille() + 1);
        }
    }
    private void csvColumns(List<StructureLigne> structureLignes, File file, final String charset) throws IOException {
        for (StructureLigne s : structureLignes) {
            FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"" + s.getCode() + "\" activate=\"true\"> \n \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"ifTypeFichierCsv\" error-code=\"" + s.getCode() + "\" activate=\"true\"> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"position\" value=\"" + s.getPosition() + "\" /> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"typeDonnee\" value=\"" + s.getTypeDonnee() + "\" /> \n", charset, true);
            if (s.getTypeDonnee().getValue().equals(TypeDonnee.DATE.getValue())) {
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"formatDate\" value=\"" + s.getFormatDate() + "\" /> \n", charset, true);
                if (s.getSeparateurDate() != null && !s.getSeparateurDate().isEmpty()) {
                    structureLigneNewLength(s);
                    FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"separateurDate\" value=\"" + s.getSeparateurDate() + "\" /> \n", charset, true);
                }
            } else if (s.getTypeDonnee().equals(TypeDonnee.DECIMAL)) {
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"taillePartieDecimale\" value=\"" + s.getTaillePartieDecimal() + "\" /> \n", charset, true);
                FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"separateurDecimal\" value=\"" + s.getSeparateurDecimal() + "\" /> \n", charset, true);
            }
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"taille\" value=\"" + s.getTaille() + "\" /> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"ligne\" field=\"columns\" /> \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t\t</assertion> \n \n", charset, true);
            FileUtils.writeStringToFile(file, "\t\t\t</validation> \n \n", charset, true);
        }
        FileUtils.writeStringToFile(file, "\t\t\t<validation field-name=\"NBRE_COLONNES\" activate=\"true\"> \n \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t<assertion assert-name=\"equal\" error-code=\"NBRE_COLONNES\" activate=\"true\"> \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"equalValue\" value=\"" + structureLignes.size() + "\" /> \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t\t<param-value name=\"equalParam\" field=\"nbreColonnes\" /> \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t\t</assertion> \n \n", charset, true);
        FileUtils.writeStringToFile(file, "\t\t\t</validation> \n \n", charset, true);
    }
    private Boolean encryptAndZipFile(File file, Configuration config, String keyToEncrypt) throws Exception {
        Boolean res = false;
        Boolean bool = encryptFile(file, config, keyToEncrypt);
        if (bool) {
            JavaZipZip4Impl zip4Impl = new JavaZipZip4Impl();
            String destinationPath = config.getOutputDir();
            File encryptDir = new File(config.getOutputDir(), ENCRYPT_DIR);
            File encryptFile = new File(encryptDir.getAbsolutePath(), file.getName());
            zip4Impl.zipFile(encryptFile, new File(destinationPath));
            res = true;
            file.delete();
            encryptFile.delete();
        }
        return res;
    }
    private Boolean encryptFile(File file, Configuration config, String keyToEncrypt) throws Exception {
        File encryptDir = new File(config.getOutputDir(), ENCRYPT_DIR);
        if (!encryptDir.exists()) {
            encryptDir.mkdir();
        }
        EncryptionFace aes = new AESImpl();
        aes.encryptFile(keyToEncrypt, 128, file.getAbsolutePath(), new File(encryptDir.getAbsolutePath(), file.getName()).getAbsolutePath());
        return true;
    }
    @Override
    public void afterSave(ActionEvent event) {
        Configuration config = ConfigurationService.getInstance().getCurrentConfig();
        Task<Boolean> task = new Task<Boolean>() {
            @Override
            protected Boolean call() throws Exception {
                FichierValidation f = getCurrentObject();
                return generateFichierValidation(f, config);
            }
        };
        Node source = (Node) event.getSource();
        Stage parentStage = (Stage) source.getScene().getWindow();
        task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show());
        task.setOnFailed(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            Throwable th = task.getException();
            if (th instanceof ConfigException) {
                NotificationDialog notificationDialog = new NotificationDialog(
                        th.getMessage(), NotificationType.WARNING, parentStage);
                notificationDialog.showNotification();
            } else {
                AlertMessageUtil.showAlertException(th, "Une exception s'est produite pendant la génération du fichier de validation", "Erreur");
            }
        });
        task.setOnSucceeded(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            Boolean taskResult = task.getValue();
            if (taskResult) {
                NotificationDialog notificationDialog = new NotificationDialog(
                        "Génération du fichier de validation réussie",
                        NotificationType.SUCCESS,
                        parentStage
                );
                notificationDialog.showNotification();
            } else {
                NotificationDialog notificationDialog = new NotificationDialog(
                        "Echec Génération du fichier de validation. Une erreur est survenue lors du traitement",
                        NotificationType.ERROR,
                        parentStage
                );
                notificationDialog.showNotification();
            }
        });
        new Thread(task).start();
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ImportTypeFichierEditDialogController.java
New file
@@ -0,0 +1,75 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.enums.TypeOperation;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatim.fdxgenerator.forms.ImportTypeFichierEditFormController;
import com.megatim.fdxgenerator.model.ImportFile;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.scene.layout.Pane;
/**
 *
 * @author STEPHANIE
 */
public class ImportTypeFichierEditDialogController extends AbstractEditDialogController<ImportFile> {
    private ImportTypeFichierEditFormController importFileEditFormController;
    @Override
    public String getTitle() {
        getEditButton().setText("Importer");
        return "Importation des type fichiers";
    }
   @Override
    public Pane getContentFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(importFileEditFormController.getClass().getResource("ImportTypeFichierEditForm.fxml"), importFileEditFormController);
    }
     @Override
    public Object getContentFormController() {
        return importFileEditFormController;
    }
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        importFileEditFormController = new ImportTypeFichierEditFormController();
        super.initialize(url, rb);
    }
    @Override
    public boolean beforeSave(ActionEvent event) {
        getCurrentObject();
        return super.beforeSave(event);
    }
    @Override
    protected void afterBindCurrentObjectWithFormField(ImportFile bindObject, Object formController, TypeOperation typeOperation) {
        super.afterBindCurrentObjectWithFormField(bindObject, formController, typeOperation);
    }
    @Override
    protected void beforeBindCurrentObjectWithFormField(ImportFile bindObject, Object formController, TypeOperation typeOperation) {
        super.beforeBindCurrentObjectWithFormField(bindObject, formController, typeOperation);
    }
    @Override
    protected void afterBindFormFieldWithCurrentObject(ImportFile bindObject, Object formController, TypeOperation typeOperation) {
        super.afterBindFormFieldWithCurrentObject(bindObject, formController, typeOperation);
    }
    @Override
    protected void beforeBindFormFieldWithCurrentObject(ImportFile bindObject, Object formController, TypeOperation typeOperation) {
        super.beforeBindFormFieldWithCurrentObject(bindObject, formController, typeOperation);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/MainController.java
New file
@@ -0,0 +1,288 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMLController.java to edit this template
 */
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.abstracts.AbstractMainDialogController;
import com.megatimfx.common.abstracts.context.AbstractViewContext;
import com.megatimfx.common.enums.TypeOperation;
import com.megatim.fdxgenerator.model.Configuration;
import com.megatim.fdxgenerator.model.FichierValidation;
import com.megatim.fdxgenerator.model.ImportFile;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.model.dao.HibernateUtil;
import com.megatim.fdxgenerator.service.ConfigurationService;
import com.megatim.fdxgenerator.service.ImportFileService;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
/**
 * FXML Controller class
 *
 * @author mela
 */
public class MainController implements Initializable {
    @FXML
    private VBox mainContainer;
    @FXML
    public MenuItem configMenuItem;
    private Stage parent;
    @FXML
    ProgressIndicator indicator;
    @FXML
    Label labelVersion;
    @FXML
    Button pinButton;
    ConfigEditDialogController configEditDialogController;
    @FXML
    private Button btnGenValidateur;
    /**
     * Initializes the controller class.
     *
     * @param url
     * @param rb
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
    }
    private void setStage(Parent root) {
        Scene scene = new Scene(root);
        Stage stage = new Stage();
        stage.setScene(scene);
        stage.initStyle(StageStyle.UNDECORATED);
        stage.initModality(Modality.APPLICATION_MODAL);
        //On ajoute les tooltips aux boutons
        addToolTipBoutons();
        stage.show();
    }
    @FXML
    public void openTypeFichierDialog(ActionEvent event) {
        try {
            FXMLLoader loader = new FXMLLoader(
                    (AbstractViewContext.getInstance().getAbstractMainDialogControllerURL() == null)
                    ? AbstractMainDialogController.class.getResource("AbstractMainDialog.fxml")
                    : AbstractViewContext.getInstance().getAbstractMainDialogControllerURL()
            );
            loader.setControllerFactory(param -> new TypeFichierListDialogController());
            Parent root = loader.load();
            setStage(root);
        } catch (IOException ex) {
            Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        }
    }
    @FXML
    public void openValidateurFichierDialog(ActionEvent event) {
        try {
            FXMLLoader loader = new FXMLLoader(
                    (AbstractViewContext.getInstance().getAbstractMainDialogControllerURL() == null)
                    ? AbstractMainDialogController.class.getResource("AbstractMainDialog.fxml")
                    : AbstractViewContext.getInstance().getAbstractMainDialogControllerURL()
            );
            loader.setControllerFactory(param -> new ValidateurFichierListDialogController());
            Parent root = loader.load();
            setStage(root);
        } catch (IOException ex) {
            Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        }
    }
    @FXML
    public void openStructureLigneDialog(ActionEvent event) {
        try {
            FXMLLoader loader = new FXMLLoader(
                    (AbstractViewContext.getInstance().getAbstractMainDialogControllerURL() == null)
                    ? AbstractMainDialogController.class.getResource("AbstractMainDialog.fxml")
                    : AbstractViewContext.getInstance().getAbstractMainDialogControllerURL()
            );
            loader.setControllerFactory(param -> new StructureLigneListDialogController());
            Parent root = loader.load();
            setStage(root);
        } catch (IOException ex) {
            Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        }
    }
    @FXML
    public void openFichierValidationDialog(ActionEvent event) {
        try {
            FXMLLoader loader = new FXMLLoader(
                    (AbstractViewContext.getInstance().getAbstractEditDialogControllerURL() == null)
                    ? AbstractEditDialogController.class.getResource("AbstractEditDialog.fxml")
                    : AbstractViewContext.getInstance().getAbstractEditDialogControllerURL()
            );
            FichierValidationEditDialogController controller = new FichierValidationEditDialogController();
            loader.setControllerFactory(param -> controller);
            Parent root = loader.load();
            Stage stage = (Stage) mainContainer.getScene().getWindow();
            controller.initData(stage, TypeOperation.ADD, new FichierValidation(), null, null, true);
            setStage(root);
        } catch (IOException ex) {
            Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        }
    }
    @FXML
    public void openImportTypeFichierDialog(ActionEvent event) {
        try {
            FXMLLoader loader = new FXMLLoader(
                    (AbstractViewContext.getInstance().getAbstractEditDialogControllerURL() == null)
                    ? AbstractEditDialogController.class.getResource("AbstractEditDialog.fxml")
                    : AbstractViewContext.getInstance().getAbstractEditDialogControllerURL()
            );
            ImportTypeFichierEditDialogController controller = new ImportTypeFichierEditDialogController();
            loader.setControllerFactory(param -> controller);
            Parent root = loader.load();
            Stage stage = (Stage) mainContainer.getScene().getWindow();
            ImportFile imp = new ImportFile();
            imp.setType(TypeFichier.class);
            controller.initData(stage, TypeOperation.ADD, imp, ImportFileService.getInstance(), null, false);
            setStage(root);
        } catch (IOException ex) {
            Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        }
    }
    @FXML
    public void openConfigDialog(ActionEvent event) {
        Task<Configuration> task = new Task() {
            @Override
            protected Object call() throws Exception {
                return ConfigurationService.getInstance().getCurrentConfig();
            }
        };
        Thread th = new Thread(task);
        th.setDaemon(true);
        th.start();
        task.setOnSucceeded(e -> {
            try {
                FXMLLoader loader = new FXMLLoader(
                        (AbstractViewContext.getInstance().getAbstractEditDialogControllerURL() == null)
                        ? AbstractEditDialogController.class.getResource("AbstractEditDialog.fxml")
                        : AbstractViewContext.getInstance().getAbstractEditDialogControllerURL()
                );
                configEditDialogController = new ConfigEditDialogController();
                loader.setControllerFactory(param -> configEditDialogController);
                Parent root = loader.load();
                parent = (Stage) mainContainer.getScene().getWindow();
                Configuration config = task.getValue();
                if (config == null) {
                    configEditDialogController.initData(parent, TypeOperation.ADD, new Configuration(), ConfigurationService.getInstance(), null, false);
                } else {
                    configEditDialogController.initData(parent, TypeOperation.UPDATE, config, ConfigurationService.getInstance(), null, false);
                }
                configMenuItem.setDisable(false);
                setStage(root);
            } catch (IOException ex) {
                Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex);
            }
        });
        task.setOnRunning(e -> configMenuItem.setDisable(true));
    }
    @FXML
    public void quit(ActionEvent event) {
        HibernateUtil.shutdown();
        System.exit(0);
    }
    public ProgressIndicator getIndicator() {
        return indicator;
    }
    public void setIndicator(ProgressIndicator indicator) {
        this.indicator = indicator;
    }
    public Label getLabelVersion() {
        return labelVersion;
    }
    public void setLabelVersion(Label labelVersion) {
        this.labelVersion = labelVersion;
    }
    public Button getPinButton() {
        return pinButton;
    }
    public void setPinButton(Button pinButton) {
        this.pinButton = pinButton;
    }
    private void addToolTipBoutons() {
        //Variables
        Tooltip tooltipGenValidateur = new Tooltip("Importation des formats de validation");
        //On set le styles
        tooltipGenValidateur.setStyle("-fx-background-color: rgba(216, 215, 208, 1); -fx-text-fill: black;");
        //On set les toolTips
        btnGenValidateur.setTooltip(tooltipGenValidateur);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/StructureLigneEditDialogController.java
New file
@@ -0,0 +1,204 @@
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.customdialogs.LoadinIndicatorDialogUtil;
import com.megatimfx.common.dialogs.NotificationDialog;
import com.megatimfx.common.dialogs.NotificationType;
import com.megatimfx.common.enums.TypeOperation;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatim.fdxgenerator.App;
import com.megatim.fdxgenerator.enums.TypeDonnee;
import com.megatim.fdxgenerator.forms.StructureLigneEditFormController;
import com.megatim.fdxgenerator.model.StructureLigne;
import com.megatim.fdxgenerator.model.TypeFichier;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.scene.Node;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class StructureLigneEditDialogController extends AbstractEditDialogController<StructureLigne> {
    private StructureLigneEditFormController structureLigneEditFormController;
    private ObservableList<StructureLigne> selectedStructureLignes = FXCollections.observableArrayList();
    private TypeFichier typeFichier;
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        super.initialize(url, rb);
    }
    @Override
    public String getTitle() {
        return "Editer une structure de ligne";
    }
    @Override
    public Pane getContentFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(
                structureLigneEditFormController.getClass().getResource("StructureLigneEditForm.fxml"),
                structureLigneEditFormController
        );
    }
    @Override
    public Object getContentFormController() {
        return structureLigneEditFormController;
    }
    @Override
    protected void beforeBindFormFieldWithCurrentObject(StructureLigne bindObject, Object formController, TypeOperation typeOperation) {
        if (formController instanceof StructureLigneEditFormController) {
            if (typeOperation.equals(TypeOperation.UPDATE) || typeOperation.equals(TypeOperation.VIEW)) {
                if (bindObject.getTypeDonnee().equals(TypeDonnee.DATE) && App.SEPARATEURS_DATE.containsKey(bindObject.getSeparateurDate())) {
                    bindObject.setDelimiteurDate(App.SEPARATEURS_DATE.get(bindObject.getSeparateurDate()));
                }
                if (bindObject.getTypeDonnee().equals(TypeDonnee.DECIMAL) && App.SEPARATEURS_DECIMAUX.containsKey(bindObject.getSeparateurDecimal())) {
                    bindObject.setDelimiteurDecimal(App.SEPARATEURS_DECIMAUX.get(bindObject.getSeparateurDecimal()));
                }
            }
        }
    }
    @Override
    public boolean beforeSave(ActionEvent event) {
        Boolean proceed = super.beforeSave(event);
        StringBuilder message = new StringBuilder(0);
        if (proceed) {
            if (getCurrentObject().getTypeDonnee().equals(TypeDonnee.DATE)) {
                boolean proceed1 = getCurrentObject().getFormatDate() != null
                        && getCurrentObject().getTaille() == getCurrentObject().getFormatDate().length();
                proceed = proceed && proceed1;
                if (!proceed1) {
                    message.append("Le format de la date est obligatoire et sa taille doit Ãªtre Ã©gale Ã  la taille du champ\n");
                }
                boolean proceedSeparateurDate = getCurrentObject().getDelimiteurDate() != null;
                proceed = proceed && proceedSeparateurDate;
                if (proceedSeparateurDate) {
                    getCurrentObject().setSeparateurDate(getCurrentObject().getDelimiteurDate().getCode());
                } else {
                    message.append("Le séparateur de date est obligatoire\n");
                }
            }
            if (getCurrentObject().getTypeDonnee().equals(TypeDonnee.DECIMAL)) {
                boolean proceedSeparateurDecimal = getCurrentObject().getDelimiteurDecimal() != null;
                proceed = proceed && proceedSeparateurDecimal;
                if (proceedSeparateurDecimal) {
                    getCurrentObject().setSeparateurDecimal(getCurrentObject().getDelimiteurDecimal().getCode());
                } else {
                    message.append("Le séparateur de décimal est obligatoire\n");
                }
                boolean proceedTailleDecimal = getCurrentObject().getTaillePartieDecimal() > 1;
                proceed = proceed && proceedTailleDecimal;
                if (!proceedTailleDecimal) {
                    message.append("La taille de la partie entière doit Ãªtre supérieure Ã  0");
                }
            }
        }
        if (!proceed && !message.toString().isEmpty()) {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            Node source = (Node) event.getSource();
            Stage parentStage = (Stage) source.getScene().getWindow();
            NotificationDialog notificationDialog = new NotificationDialog(
                    message.toString(),
                    NotificationType.ERROR,
                    parentStage
            );
            notificationDialog.showNotification();
        }
        return proceed;
    }
    @Override
    protected void afterBindCurrentObjectWithFormField(StructureLigne bindObject, Object formController, TypeOperation typeOperation) {
        if (formController instanceof StructureLigneEditFormController) {
            if (typeFichier != null) {
                bindObject.setId(typeFichier + "" + bindObject.getPosition());
            }
        }
    }
    public StructureLigneEditFormController getStructureLigneEditFormController() {
        return structureLigneEditFormController;
    }
    public void setStructureLigneEditFormController(StructureLigneEditFormController structureLigneEditFormController) {
        this.structureLigneEditFormController = structureLigneEditFormController;
    }
    public void setTypeFichier(TypeFichier typeFichier) {
        this.typeFichier = typeFichier;
    }
    public void setSelectedStructureLignes(ObservableList<StructureLigne> selectedStructureLignes) {
        this.selectedStructureLignes = selectedStructureLignes;
    }
    @Override
    public void afterSave(ActionEvent event, Object formController, TypeOperation typeOperation) {
        StructureLigneEditFormController controller = (StructureLigneEditFormController) formController;
        if (getTypeOperation().equals(TypeOperation.UPDATE)) {
            boolean exists = false;
            ObservableList<Integer> liste = controller.getList();
            for (Integer i : liste) {
                if (i.equals(controller.getInitialUpdateSelection())) {
                    exists = true;
                    break;
                }
            }
            if (!exists) {
                liste.add(controller.getInitialUpdateSelection());
            }
        }
    }
    @Override
    protected void afterBindFormFieldWithCurrentObject(StructureLigne bindObject, Object formController, TypeOperation typeOperation) {
        StructureLigneEditFormController controller = (StructureLigneEditFormController) formController;
        if (typeOperation.equals(TypeOperation.UPDATE)) {
            controller.setInitialUpateSelection();
        }
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/StructureLigneListDialogController.java
New file
@@ -0,0 +1,93 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.abstracts.AbstractMainDialogController;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatimfx.common.service.GenericCrudService;
import com.megatim.fdxgenerator.controller.table.StructureLigneTable;
import com.megatim.fdxgenerator.model.StructureLigne;
import com.megatim.fdxgenerator.service.StructureLigneService;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import javafx.scene.control.TableColumn;
/**
 *
 * @author STEPHANIE
 */
public class StructureLigneListDialogController extends AbstractMainDialogController<StructureLigne,StructureLigne>  {
//    private StructureLigneSearchFormController structureLigneSearchFormController;
//    private StructureLigneAdvancedSearchFormController structureLigneAdvancedSearchFormController;
    @Override
    public GenericCrudService<StructureLigne> getGenericCrudService() {
        return StructureLigneService.getInstance();
    }
    @Override
    public String getTitle() {
        return "Liste des structures lignes";
    }
    @Override
    public Class<StructureLigne> getElementClazz() {
        return StructureLigne.class;
    }
    @Override
    public List<TableColumn> getElementTableColumns() {
        return Arrays.asList(StructureLigneTable.codeColumn(),StructureLigneTable.positionColumn(),StructureLigneTable.tailleColumn(),StructureLigneTable.typeDonneeColumn());
    }
    @Override
    public AbstractEditDialogController<StructureLigne> getAbstractEditDialogController() {
        return new StructureLigneEditDialogController();
    }
    @Override
    public List<SearchCriteria> getPermanentSearchCriterias() {
        List<SearchCriteria> liste = new ArrayList<>();
        return liste;
    }
//    @Override
//    public Object getSearchFormController() {
//        return structureLigneSearchFormController;
//    }
//
//    @Override
//    public Pane getSearchFormPane() throws IOException {
//        return ViewLoaderUtil.getPaneFromFxmlFile(structureLigneSearchFormController.getClass().getResource("structureLigneSearchForm.fxml"), structureLigneSearchFormController);
//    }
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        setAddButtonDisable(true);
        setDeleteButtonDisable(true);
        setEditButtonDisable(true);
        setPrintButtonDisable(true);
//        structureLigneSearchFormController = new StructureLigneSearchFormController();
//        structureLigneAdvancedSearchFormController = new StructureLigneAdvancedSearchFormController();
        super.initialize(location, resources);
    }
//    @Override
//    public Object getAdvancedSearchFormController() {
//        return structureLigneAdvancedSearchFormController;
//    }
//
//    @Override
//    public Pane getAdvancedSearchFormPane() throws IOException {
//        return ViewLoaderUtil.getPaneFromFxmlFile(structureLigneAdvancedSearchFormController.getClass().getResource("StructureLigneAdvancedSearchForm.fxml"), structureLigneAdvancedSearchFormController);
//    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/TypeFichierEditDialogController.java
New file
@@ -0,0 +1,74 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.enums.TypeOperation;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatim.fdxgenerator.forms.TypeFichierEditFormController;
import com.megatim.fdxgenerator.model.TypeFichier;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.scene.layout.Pane;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierEditDialogController extends AbstractEditDialogController<TypeFichier>{
    private TypeFichierEditFormController typeFichierEditFormController;
    @Override
    public String getTitle() {
        return "Edition d'un type fichier";
    }
    @Override
    public Pane getContentFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(typeFichierEditFormController.getClass().getResource("TypeFichierEditForm.fxml"), typeFichierEditFormController);
    }
     @Override
    public Object getContentFormController() {
        return typeFichierEditFormController;
    }
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        typeFichierEditFormController = new TypeFichierEditFormController();
        super.initialize(url, rb);
    }
    @Override
    public boolean beforeSave(ActionEvent event) {
        getCurrentObject();
        return super.beforeSave(event);
    }
    @Override
    protected void afterBindCurrentObjectWithFormField(TypeFichier bindObject, Object formController, TypeOperation typeOperation) {
        super.afterBindCurrentObjectWithFormField(bindObject, formController, typeOperation);
    }
    @Override
    protected void beforeBindCurrentObjectWithFormField(TypeFichier bindObject, Object formController, TypeOperation typeOperation) {
        super.beforeBindCurrentObjectWithFormField(bindObject, formController, typeOperation);
    }
    @Override
    protected void afterBindFormFieldWithCurrentObject(TypeFichier bindObject, Object formController, TypeOperation typeOperation) {
        super.afterBindFormFieldWithCurrentObject(bindObject, formController, typeOperation);
    }
    @Override
    protected void beforeBindFormFieldWithCurrentObject(TypeFichier bindObject, Object formController, TypeOperation typeOperation) {
        super.beforeBindFormFieldWithCurrentObject(bindObject, formController, typeOperation);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/TypeFichierListDialogController.java
New file
@@ -0,0 +1,102 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.abstracts.AbstractMainDialogController;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatimfx.common.service.GenericCrudService;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatim.fdxgenerator.controller.search.TypeFichierAdvancedSearchFormController;
import com.megatim.fdxgenerator.controller.search.TypeFichierSearchFormController;
import com.megatim.fdxgenerator.controller.table.TypeFichierTable;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.service.TypeFichierService;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import javafx.scene.control.TableColumn;
import javafx.scene.layout.Pane;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierListDialogController extends AbstractMainDialogController<TypeFichier, TypeFichier> {
    private TypeFichierSearchFormController typeFichierSearchFormController;
    private TypeFichierAdvancedSearchFormController typeFichierAdvancedSearchFormController;
    @Override
    public GenericCrudService<TypeFichier> getGenericCrudService() {
        return TypeFichierService.getInstance();
    }
    @Override
    public String getTitle() {
        return "Liste des type de fichiers";
    }
    @Override
    public Class<TypeFichier> getElementClazz() {
        return TypeFichier.class;
    }
    @Override
    public List<TableColumn> getElementTableColumns() {
        return Arrays.asList(TypeFichierTable.codeColumn(), TypeFichierTable.libelleColumn(), TypeFichierTable.participantColumn());
    }
    @Override
    public AbstractEditDialogController<TypeFichier> getAbstractEditDialogController() {
        return new TypeFichierEditDialogController();
    }
    @Override
    public List<SearchCriteria> getPermanentSearchCriterias() {
        List<SearchCriteria> liste = new ArrayList<>();
        return liste;
    }
    @Override
    public Object getSearchFormController() {
        return typeFichierSearchFormController;
    }
    @Override
    public Pane getSearchFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(typeFichierSearchFormController.getClass().getResource("TypeFichierSearchForm.fxml"), typeFichierSearchFormController);
    }
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        typeFichierSearchFormController = new TypeFichierSearchFormController();
        typeFichierAdvancedSearchFormController = new TypeFichierAdvancedSearchFormController();
        //setDeleteButtonDisable(true);
        setEditButtonDisable(true);
        setPrintButtonDisable(true);
        setDeleteButtonDisable(true);
        setPrintButtonDisable(true);
        super.initialize(location, resources);
    }
    @Override
    public Object getAdvancedSearchFormController() {
        return typeFichierAdvancedSearchFormController;
    }
    @Override
    public Pane getAdvancedSearchFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(typeFichierAdvancedSearchFormController.getClass().getResource("TypeFichierAdvancedSearchForm.fxml"), typeFichierAdvancedSearchFormController);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ValidateurFichierEditDialogController.java
New file
@@ -0,0 +1,258 @@
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.customdialogs.LoadinIndicatorDialogUtil;
import com.megatimfx.common.dialogs.NotificationDialog;
import com.megatimfx.common.dialogs.NotificationType;
import com.megatimfx.common.enums.TypeOperation;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatim.fdxgenerator.App;
import com.megatim.fdxgenerator.enums.DataType;
import com.megatim.fdxgenerator.forms.StructureLigneEditFormController;
import com.megatim.fdxgenerator.forms.ValidateurFichierEditFormController;
import com.megatim.fdxgenerator.model.StructureLigne;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import com.megatim.fdxgenerator.service.ValidateurFichierService;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.ListChangeListener;
import javafx.event.ActionEvent;
import javafx.scene.Node;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class ValidateurFichierEditDialogController extends AbstractEditDialogController<ValidateurFichier> {
    private ValidateurFichierEditFormController validateurFichierEditFormController;
    private StructureLigneEditDialogController structureLigneEditDialogController;
    private ValidateurFichierService validateurFichierService = ValidateurFichierService.getInstance();
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        validateurFichierEditFormController = new ValidateurFichierEditFormController();
        structureLigneEditDialogController = new StructureLigneEditDialogController();
        structureLigneEditDialogController.setStructureLigneEditFormController(new StructureLigneEditFormController());
        super.initialize(url, rb);
    }
    @Override
    public String getTitle() {
        return "Edition d'un validateur de fichier";
    }
    @Override
    public Pane getContentFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(
                validateurFichierEditFormController.getClass().getResource("ValidateurFichierEditForm.fxml"),
                validateurFichierEditFormController
        );
    }
    @Override
    public Object getContentFormController() {
        return validateurFichierEditFormController;
    }
    @Override
    protected void beforeBindFormFieldWithCurrentObject(ValidateurFichier bindObject, Object formController, TypeOperation typeOperation) {
        if (formController instanceof ValidateurFichierEditFormController) {
            ValidateurFichierEditFormController controller = (ValidateurFichierEditFormController) formController;
            if (typeOperation.equals(TypeOperation.VIEW) || typeOperation.equals(TypeOperation.UPDATE)) {
                if (bindObject.getCodeDelimiteurColonne() != null) {
                    bindObject.setDelimiteurColonne(App.DELIMITEURS_COLONNE.get(bindObject.getCodeDelimiteurColonne()));
                }
                if (bindObject.getCodeDelimiteurLigne() != null) {
                    bindObject.setDelimiteurLigne(App.DELIMITEURS_LIGNE.get(bindObject.getCodeDelimiteurLigne()));
                }
            }
            if (typeOperation.equals(TypeOperation.ADD) || typeOperation.equals(TypeOperation.UPDATE)) {
                controller.getDelimiteurColonne().disableProperty()
                        .bind(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNull()
                        .or(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNotEqualTo(DataType.CSV))
                );
                controller.getDelimiteurLigne().disableProperty()
                        .bind(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNull()
                        .or(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNotEqualTo(DataType.CSV))
                );
                controller.getHeaderPresentCheckbox().disableProperty().bind(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNull()
                        .or(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isEqualTo(DataType.TXT))
                );
            }
        }
    }
    @Override
    protected void afterBindFormFieldWithCurrentObject(ValidateurFichier bindObject, Object formController,
            TypeOperation typeOperation
    ) {
        if (formController instanceof ValidateurFichierEditFormController) {
            ValidateurFichierEditFormController controller = (ValidateurFichierEditFormController) formController;
            controller.getStructureLigneAbstractTable().setController(structureLigneEditDialogController);
            controller.getStructureLigneAbstractTable().getElementObservableList().sort((o1, o2) -> {
                return Integer.valueOf(o1.getPosition()).compareTo(o2.getPosition());
            });
            structureLigneEditDialogController.setSelectedStructureLignes(controller.getStructureLigneAbstractTable().getElementObservableList());
            switch (typeOperation) {
                case ADD:
                    controller.getSaisieStructureLigneChecBox().setOnAction(event -> {
                        if (controller.getSaisieStructureLigneChecBox().isSelected()) {
                            int numberOfPosition = Integer.parseInt(controller.getNombrePositionTextField().getText());
                            structureLigneEditDialogController.getStructureLigneEditFormController().populatePositionComboBox(numberOfPosition);
                        }
                    });
                    controller.getTypeFichierAbstractSelectItem().selectedElementProperty().addListener((observable, oldValue, newValue) -> {
                        if (newValue != null) {
                            structureLigneEditDialogController.setTypeFichier(newValue);
                        }
                    });
                    break;
                case UPDATE:
                    structureLigneEditDialogController.setTypeFichier(controller.getTypeFichierAbstractSelectItem().getSelectedElement());
                    controller.getSaisieStructureLigneChecBox().setSelected(true);
                    controller.getSaisieStructureLigneChecBox().setDisable(true);
                    break;
                default:
                    controller.getSaisieStructureLigneChecBox().setSelected(true);
                    controller.getSaisieStructureLigneChecBox().setDisable(true);
                    break;
            }
            controller.getStructureLigneAbstractTable().getElementObservableList().addListener((ListChangeListener.Change<? extends StructureLigne> c) -> {
                while (c.next()) {
                    if (c.wasAdded()) {
                        int start = c.getFrom();
                        int end = c.getTo();
                        for (int i = start; i < end; i++) {
                            StructureLigne structLigne = c.getList().get(i);
                            structLigne.setValidateurFichier(getCurrentObject());
                            structureLigneEditDialogController.getStructureLigneEditFormController().getList().remove(new Integer(structLigne.getPosition()));
                            structureLigneEditDialogController.getStructureLigneEditFormController().getList().sort((o1, o2) -> {
                                return o1.compareTo(o2);
                            });
                        }
                    } else if (c.wasRemoved()) {
                        for (StructureLigne structLigne : c.getRemoved()) {
                            structureLigneEditDialogController.getStructureLigneEditFormController().getList().add(structLigne.getPosition());
                            structureLigneEditDialogController.getStructureLigneEditFormController().getList().sort((o1, o2) -> {
                                return o1.compareTo(o2);
                            });
                        }
                    }
                }
            });
        }
    }
    @Override
    protected void afterBindCurrentObjectWithFormField(ValidateurFichier bindObject, Object formController,
            TypeOperation typeOperation
    ) {
        ValidateurFichierEditFormController controller = (ValidateurFichierEditFormController) formController;
        controller.getStructureLigneAbstractTable().setController(structureLigneEditDialogController);
        if (typeOperation.equals(TypeOperation.ADD)) {
            if (bindObject.getTypeFichier() != null) {
                bindObject.setId(bindObject.getTypeFichier().getCode());
            }
        }
    }
    @Override
    public boolean beforeSave(ActionEvent event) {
        Boolean proceed = super.beforeSave(event);
        Delimiteur delimiteurColonne = getCurrentObject().getDelimiteurColonne();
        Delimiteur delimiteurLigne = getCurrentObject().getDelimiteurLigne();
        if (delimiteurColonne != null) {
            getCurrentObject().setCodeDelimiteurColonne(delimiteurColonne.getCode());
        }
        if (delimiteurLigne != null) {
            getCurrentObject().setCodeDelimiteurLigne(delimiteurLigne.getCode());
        }
        if (proceed) {
            if (getTypeOperation().equals(TypeOperation.ADD) || getTypeOperation().equals(TypeOperation.UPDATE)) {
                LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show();
                proceed = getCurrentObject().getNombrePosition() == getCurrentObject().getStructureLignes().size();
                if (!proceed) {
                    LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
                    Node source = (Node) event.getSource();
                    Stage parentStage = (Stage) source.getScene().getWindow();
                    NotificationDialog notificationDialog = new NotificationDialog(
                            "Vous devez remplir la structure de toutes les positions",
                            NotificationType.ERROR,
                            parentStage
                    );
                    notificationDialog.showNotification();
                } else {
                    proceed = validateurFichierService.find(getCurrentObject()) != null;
                    if (!proceed) {
                        LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
                        Node source = (Node) event.getSource();
                        Stage parentStage = (Stage) source.getScene().getWindow();
                        NotificationDialog notificationDialog = new NotificationDialog(
                                "Il existe déjà un validateur de fichier associé Ã  ce type de fichier",
                                NotificationType.ERROR,
                                parentStage
                        );
                        notificationDialog.showNotification();
                    }
                }
                LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            }
        }
        return proceed;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/ValidateurFichierListDialogController.java
New file
@@ -0,0 +1,94 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller;
import com.megatimfx.common.abstracts.AbstractEditDialogController;
import com.megatimfx.common.abstracts.AbstractMainDialogController;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatimfx.common.service.GenericCrudService;
import com.megatimfx.common.utils.ViewLoaderUtil;
import com.megatim.fdxgenerator.controller.search.ValidateurFichierAdvancedSearchFormController;
import com.megatim.fdxgenerator.controller.search.ValidateurFichierSearchFormController;
import com.megatim.fdxgenerator.controller.table.ValidateurFichierTable;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import com.megatim.fdxgenerator.service.ValidateurFichierService;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import javafx.scene.control.TableColumn;
import javafx.scene.layout.Pane;
/**
 *
 * @author STEPHANIE
 */
public class ValidateurFichierListDialogController extends AbstractMainDialogController<ValidateurFichier,ValidateurFichier> {
    private ValidateurFichierSearchFormController validateurFichierSearchFormController;
    private ValidateurFichierAdvancedSearchFormController validateurFichierAdvancedSearchFormController;
    @Override
    public GenericCrudService<ValidateurFichier> getGenericCrudService() {
        return ValidateurFichierService.getInstance();
    }
    @Override
    public String getTitle() {
        return "Liste des validateurs fichiers";
    }
    @Override
    public Class<ValidateurFichier> getElementClazz() {
        return ValidateurFichier.class;
    }
    @Override
    public List<TableColumn> getElementTableColumns() {
        return Arrays.asList(ValidateurFichierTable.typeFichierColumn(),ValidateurFichierTable.nombrePositionColumn());
    }
    @Override
    public AbstractEditDialogController<ValidateurFichier> getAbstractEditDialogController() {
        return new ValidateurFichierEditDialogController();
    }
    @Override
    public List<SearchCriteria> getPermanentSearchCriterias() {
        List<SearchCriteria> liste = new ArrayList<>();
        return liste;
    }
    @Override
    public Object getSearchFormController() {
        return validateurFichierSearchFormController;
    }
    @Override
    public Pane getSearchFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(validateurFichierSearchFormController.getClass().getResource("ValidateurFichierSearchForm.fxml"), validateurFichierSearchFormController);
    }
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        validateurFichierSearchFormController = new ValidateurFichierSearchFormController();
        validateurFichierAdvancedSearchFormController = new ValidateurFichierAdvancedSearchFormController();
        super.initialize(location, resources);
    }
    @Override
    public Object getAdvancedSearchFormController() {
        return validateurFichierAdvancedSearchFormController;
    }
    @Override
    public Pane getAdvancedSearchFormPane() throws IOException {
        return ViewLoaderUtil.getPaneFromFxmlFile(validateurFichierAdvancedSearchFormController.getClass().getResource("ValidateurFichierAdvancedSearchForm.fxml"), validateurFichierAdvancedSearchFormController);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/StructureLigneAdvancedSearchFormController.java
New file
@@ -0,0 +1,13 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.search;
/**
 *
 * @author STEPHANIE
 */
public class StructureLigneAdvancedSearchFormController {
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/StructureLigneSearchFormController.java
New file
@@ -0,0 +1,13 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.search;
/**
 *
 * @author STEPHANIE
 */
public class StructureLigneSearchFormController {
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/TypeFichierAdvancedSearchFormController.java
New file
@@ -0,0 +1,38 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.search;
import com.megatimfx.common.annontations.Search;
import com.megatimfx.common.enums.Operateur;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierAdvancedSearchFormController  implements Initializable {
    @Search(fieldName = "libelle", operateur = Operateur.LIKE, editable = false)
    @FXML
    private TextField libelle;
    @Search(fieldName = "codeParticipant", operateur = Operateur.LIKE, editable = false)
    @FXML
    private TextField participant;
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/TypeFichierSearchFormController.java
New file
@@ -0,0 +1,31 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.search;
import com.megatimfx.common.annontations.Search;
import com.megatimfx.common.enums.Operateur;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierSearchFormController implements Initializable{
    @Search(fieldName = "code", operateur = Operateur.LIKE)
    @FXML
    private TextField code;
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/ValidateurFichierAdvancedSearchFormController.java
New file
@@ -0,0 +1,32 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.search;
import com.megatimfx.common.annontations.Search;
import com.megatimfx.common.enums.Operateur;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
/**
 *
 * @author STEPHANIE
 */
public class ValidateurFichierAdvancedSearchFormController implements Initializable {
    @Search(fieldName = "nombrePosition", operateur = Operateur.EQUALS)
    @FXML
    private TextField nombrePosition;
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/search/ValidateurFichierSearchFormController.java
New file
@@ -0,0 +1,87 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.search;
import com.megatimfx.common.annontations.Search;
import com.megatimfx.common.customcontrols.AbstractSelectionItem;
import com.megatimfx.common.enums.Operateur;
import com.megatimfx.components.customdialogs.AlertMessageUtil;
import com.megatimfx.components.customdialogs.LoadinIndicatorDialogUtil;
import com.megatim.fdxgenerator.controller.table.TypeFichierTable;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.service.TypeFichierService;
import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.ResourceBundle;
import java.util.Set;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.util.Pair;
/**
 *
 * @author STEPHANIE
 */
public class ValidateurFichierSearchFormController implements Initializable {
    @Search(fieldName = "typeFichier", operateur = Operateur.EQUALS)
    @FXML
    private AbstractSelectionItem typeFichierAbstractSelectItem;
    private TypeFichierService typeFichierService = TypeFichierService.getInstance();
       //ELEMENTS DE CHARGEMENT
    private final Set<TypeFichier> typeFichierSet = new HashSet<>();
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        typeFichierAbstractSelectItem.setTitle("Choix du type de fichier");
        typeFichierAbstractSelectItem.setColumns(Arrays.asList(
                TypeFichierTable.codeColumn(),
                TypeFichierTable.libelleColumn()
        ));
        typeFichierAbstractSelectItem.setSearchFieldPairs(Arrays.asList(
                new Pair<>("code", "Code"),
                new Pair<>("libelle", "Libellé")
        ));
        initElements();
    }
     private void initElements() {
        Task<Void> task = new Task() {
            @Override
            protected Object call() throws Exception {
                typeFichierSet.clear();
                typeFichierSet.addAll(typeFichierService.getAll());
                //typeFichierSet.addAll(typeFichierService.findAllByCategorieFichierAndTypeExtension(CategorieFichier.STRUCTURE, TypeExtension.TEXTE));
                return null;
            }
        };
        task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show());
        task.setOnSucceeded(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            typeFichierAbstractSelectItem.setElements(typeFichierSet);
        });
        task.setOnFailed(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            AlertMessageUtil.showAlertException(task.getException(),
                    "Une exception s'est produite pendant le traitement", "Erreur");
        });
        Thread thread = new Thread(task);
        thread.setDaemon(true);
        thread.start();
    }
     public AbstractSelectionItem<TypeFichier> getTypeFichierAbstractSelectItem() {
        return typeFichierAbstractSelectItem;
    }
    public void setTypeFichierAbstractSelectItem(AbstractSelectionItem<TypeFichier> typeFichierAbstractSelectItem) {
        this.typeFichierAbstractSelectItem = typeFichierAbstractSelectItem;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/table/StructureLigneTable.java
New file
@@ -0,0 +1,44 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.table;
import com.megatim.fdxgenerator.model.StructureLigne;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;
/**
 *
 * @author STEPHANIE
 */
public class StructureLigneTable {
    public StructureLigneTable() {
    }
    public static TableColumn<StructureLigne, String> positionColumn() {
        TableColumn<StructureLigne, String> column = new TableColumn("Position");
        column.setCellValueFactory(new PropertyValueFactory("position"));
        return column;
    }
     public static TableColumn<StructureLigne, String> codeColumn() {
        TableColumn<StructureLigne, String> column = new TableColumn("Code");
        column.setCellValueFactory(new PropertyValueFactory("code"));
        return column;
    }
      public static TableColumn<StructureLigne, String> typeDonneeColumn() {
        TableColumn<StructureLigne, String> column = new TableColumn("Type de données");
        column.setCellValueFactory(new PropertyValueFactory("typeDonnee"));
        return column;
    }
       public static TableColumn<StructureLigne, String> tailleColumn() {
        TableColumn<StructureLigne, String> column = new TableColumn("Taille");
        column.setCellValueFactory(new PropertyValueFactory("taille"));
        return column;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/table/TypeFichierTable.java
New file
@@ -0,0 +1,39 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.table;
import com.megatim.fdxgenerator.model.TypeFichier;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierTable {
     private TypeFichierTable() {
    }
    public static TableColumn<TypeFichier, String> codeColumn() {
        TableColumn<TypeFichier, String> column = new TableColumn("Code");
        column.setCellValueFactory(new PropertyValueFactory("code"));
        return column;
    }
    public static TableColumn<TypeFichier, String> libelleColumn() {
        TableColumn<TypeFichier, String> column = new TableColumn("Libellé");
        column.setCellValueFactory(new PropertyValueFactory("libelle"));
        return column;
    }
    public static TableColumn<TypeFichier, String> participantColumn() {
        TableColumn<TypeFichier, String> column = new TableColumn("Participant");
        column.setCellValueFactory(new PropertyValueFactory("codeParticipant"));
        return column;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/controller/table/ValidateurFichierTable.java
New file
@@ -0,0 +1,32 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.controller.table;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;
/**
 *
 * @author STEPHANIE
 */
public class ValidateurFichierTable {
    public ValidateurFichierTable() {
    }
     public static TableColumn<ValidateurFichier, String> typeFichierColumn() {
        TableColumn<ValidateurFichier, String> column = new TableColumn("TypeFichier");
        column.setCellValueFactory(new PropertyValueFactory("typeFichier"));
        return column;
    }
     public static TableColumn<ValidateurFichier, String> nombrePositionColumn() {
        TableColumn<ValidateurFichier, String> column = new TableColumn("Nombre Position");
        column.setCellValueFactory(new PropertyValueFactory("nombrePosition"));
        return column;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/enums/DataType.java
New file
@@ -0,0 +1,38 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
 */
package com.megatim.fdxgenerator.enums;
import java.util.stream.Stream;
/**
 *
 * @author STEPHANIE
 */
public enum DataType {
    CSV("CSV"), TXT("Texte(TXT)"), XLS("XLS"), XLSX("XLSX");
    private final String dataType;
    private DataType(String dataType) {
        this.dataType = dataType;
    }
    public static DataType of(String dataType) {
        return Stream.of(DataType.values())
                .filter(p -> p.getDataType().equals(dataType))
                .findFirst()
                .orElseThrow(IllegalArgumentException::new);
    }
    public String getDataType() {
        return dataType;
    }
    @Override
    public String toString() {
        return dataType;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/enums/TypeDonnee.java
New file
@@ -0,0 +1,46 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
 */
package com.megatim.fdxgenerator.enums;
/**
 *
 * @author STEPHANIE
 */
public enum TypeDonnee {
    ALPHANUMERIQUE("ALPHANUMERIQUE"),
    NUMERIQUE("NUMERIQUE"),
    DECIMAL("DECIMAL"),
    DATE("DATE");
    private final String value;
    private TypeDonnee(String value) {
        this.value = value;
    }
    public String getValue() {
        return value;
    }
    public static TypeDonnee fromValeur(String value) {
        switch (value) {
            case "ALPHANUMERIQUE":
                return TypeDonnee.ALPHANUMERIQUE;
            case "DATE":
                return TypeDonnee.DATE;
            case "NUMERIQUE":
                return TypeDonnee.NUMERIQUE;
            case "DECIMAL" :
                return TypeDonnee.DECIMAL;
            default:
                return null;
        }
    }
    @Override
    public String toString() {
        return value;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/exceptions/ConfigException.java
New file
@@ -0,0 +1,24 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.exceptions;
/**
 *
 * @author STEPHANIE
 */
public class ConfigException extends RuntimeException {
    public ConfigException(String message) {
        super(message);
    }
    public ConfigException(String message, Throwable cause) {
        super(message, cause);
    }
    public ConfigException(Throwable cause) {
        super(cause);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/ConfigEditFormController.java
New file
@@ -0,0 +1,51 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMLController.java to edit this template
 */
package com.megatim.fdxgenerator.forms;
import com.megatimfx.common.annontations.Champ;
import java.io.File;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
/**
 * FXML Controller class
 *
 * @author mela
 */
public class ConfigEditFormController implements Initializable {
    @Champ(mappedBy = "outputDir")
    @FXML
    private TextField outputDir;
    @FXML
    private  Button outButton;
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        outputDir.setEditable(Boolean.FALSE);
    }
    @FXML
     void outButtonOnClicked(MouseEvent evt){
        DirectoryChooser directoryChooser = new DirectoryChooser();
        Stage stage = (Stage)outButton.getScene().getWindow();
        File selectedDirectory = directoryChooser.showDialog(stage);
        outputDir.setText(selectedDirectory.getAbsolutePath());
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/FichierValidationEditFormController.java
New file
@@ -0,0 +1,216 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.forms;
import com.megatimfx.common.annontations.Champ;
import com.megatimfx.common.customcontrols.AbstractSelectionItem;
import com.megatimfx.components.customdialogs.AlertMessageUtil;
import com.megatimfx.components.customdialogs.LoadinIndicatorDialogUtil;
import com.megatim.fdxgenerator.controller.table.TypeFichierTable;
import com.megatim.fdxgenerator.enums.DataType;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.service.TypeFichierService;
import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.ResourceBundle;
import java.util.Set;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.util.Pair;
/**
 *
 * @author STEPHANIE
 */
public class FichierValidationEditFormController implements Initializable {
    @FXML
    @Champ(mappedBy = "typeFichier", type = TypeFichier.class, update = false)
    private AbstractSelectionItem<TypeFichier> typeFichierAbstractSelectItem;
    @FXML
    private TextField showKeyToEncrypt;
    @FXML
    @Champ(mappedBy = "formatDate")
    private ComboBox<String> formatDate;
//    @FXML
//    @Champ(mappedBy = "extension")
//    private ComboBox<DataType> extensionFichier;
    @FXML
    @Champ(mappedBy = "maxValueTierce", type = Integer.class)
    private TextField MaxValueTierceTextField;
    @FXML
    @Champ(mappedBy = "protege", type = Boolean.class)
    private CheckBox isProtegeCheckBox;
    @FXML
    @Champ(mappedBy = "validateFileName", type = Boolean.class)
    private CheckBox validateFileNameCheckBox;
    @FXML
    private TitledPane fileNameTitledPane;
    @FXML
    private ImageView imageView;
    @FXML
    @Champ(mappedBy = "keyToEncrypt")
    private PasswordField keyToEncryptField;
    @FXML
    @Champ(mappedBy = "keyConfirmation")
    private PasswordField keyConfirmationField;
    private final TypeFichierService typeFichierService = TypeFichierService.getInstance();
    //ELEMENTS DE CHARGEMENT
    private final Set<TypeFichier> typeFichierSet = new HashSet<>();
    private boolean passwordVisible;
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        keyToEncryptField.setDisable(true);
        keyConfirmationField.setDisable(true);
        showKeyToEncrypt.setDisable(true);
        fileNameTitledPane.setDisable(true);
        keyToDecryptWithEye();
        formatDate.setPromptText("Selectionnez un format");
        formatDate.setItems(FXCollections.observableArrayList(
                "yyyyMMddHHmmss", "yyyyMMdd",
                "yyyyddMMHHmmss", "yyyyddMM",
                "MMyyyyddHHmmss", "MMyyyydd",
                "MMddyyyHHmmss", "MMddyyy"
        ));
//        extensionFichier.setPromptText("Selectionnez un format");
//        extensionFichier.setItems(FXCollections.observableArrayList(
//                DataType.values()
//        ));
        typeFichierAbstractSelectItem.setTitle("Choix du type de fichier");
        typeFichierAbstractSelectItem.setColumns(Arrays.asList(
                TypeFichierTable.codeColumn(),
                TypeFichierTable.libelleColumn()
        ));
        typeFichierAbstractSelectItem.setSearchFieldPairs(Arrays.asList(
                new Pair<>("code", "Code"),
                new Pair<>("libelle", "Libellé")
        ));
        MaxValueTierceTextField.textProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
            if (!newValue.matches("\\d{1,9}")) {
                MaxValueTierceTextField.setText(newValue.replaceAll("[^\\d]", ""));
            }
        });
        isProtegeCheckBox.selectedProperty().addListener(l -> {
            if (isProtegeCheckBox.isSelected()) {
                keyToEncryptField.setDisable(false);
                keyConfirmationField.setDisable(false);
                showKeyToEncrypt.setDisable(false);
            }
            if (!isProtegeCheckBox.isSelected()) {
                keyToEncryptField.setDisable(true);
                keyConfirmationField.setDisable(true);
                showKeyToEncrypt.setDisable(true);
            }
        });
        validateFileNameCheckBox.selectedProperty().addListener(l -> {
            if (validateFileNameCheckBox.isSelected()) {
                fileNameTitledPane.setDisable(false);
            }
            if (!validateFileNameCheckBox.isSelected()) {
                fileNameTitledPane.setDisable(true);
            }
        });
        initElements();
    }
    private void initElements() {
        Task<Void> task = new Task() {
            @Override
            protected Object call() throws Exception {
                typeFichierSet.clear();
                typeFichierSet.addAll(typeFichierService.getAllTypeFichWithValidateur());
                return null;
            }
        };
        task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show());
        task.setOnSucceeded(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            typeFichierAbstractSelectItem.setElements(typeFichierSet);
        });
        task.setOnFailed(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            AlertMessageUtil.showAlertException(task.getException(),
                    "Une exception s'est produite pendant le traitement", "Erreur");
        });
        Thread thread = new Thread(task);
        thread.setDaemon(true);
        thread.start();
    }
    public AbstractSelectionItem<TypeFichier> getTypeFichierAbstractSelectItem() {
        return typeFichierAbstractSelectItem;
    }
    public void setTypeFichierAbstractSelectItem(AbstractSelectionItem<TypeFichier> typeFichierAbstractSelectItem) {
        this.typeFichierAbstractSelectItem = typeFichierAbstractSelectItem;
    }
    public CheckBox getIsProtegeCheckBox() {
        return isProtegeCheckBox;
    }
    public PasswordField getKeyToEncryptField() {
        return keyToEncryptField;
    }
    public PasswordField getKeyConfirmationField() {
        return keyConfirmationField;
    }
    @FXML
    void eyeOnMousePressed(MouseEvent event) {
        if (passwordVisible) {
            showKeyToEncrypt.setVisible(false);
            keyToEncryptField.setVisible(true);
            passwordVisible = false;
        } else {
            keyToEncryptField.setVisible(false);
            showKeyToEncrypt.setVisible(true);
            passwordVisible = true;
        }
    }
    private void keyToDecryptWithEye() {
        passwordVisible = false;
        keyToEncryptField.textProperty().bindBidirectional(showKeyToEncrypt.textProperty());
        showKeyToEncrypt.setVisible(false);
        keyToEncryptField.setVisible(true);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/ImportTypeFichierEditFormController.java
New file
@@ -0,0 +1,74 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.forms;
import com.megatimfx.common.annontations.Champ;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import java.io.File;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.stage.FileChooser;
import javafx.stage.Window;
/**
 *
 * @author STEPHANIE
 */
public class ImportTypeFichierEditFormController implements Initializable {
//    @FXML
//    @Champ(mappedBy = "formatFichier")
//    private ComboBox formatFichier;
    @FXML
    @Champ(mappedBy = "delimiteurLigne")
    private ComboBox<Delimiteur> delimiteurLigne;
    @FXML
    @Champ(mappedBy = "delimiteurColonne")
    private ComboBox<Delimiteur> delimiteurColonne;
    @FXML
    @Champ(mappedBy = "filePath")
    private TextField fileToImportTextField;
    @FXML
    private  Button importButton;
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        delimiteurColonne.setPromptText("Sélectionnez un Ã©lément dans la liste");
        delimiteurColonne.setItems(FXCollections.observableArrayList(
                new Delimiteur(";", "Point-virgule ( ; )"),
                new Delimiteur("|", "Barre verticale ( | )"),
                new Delimiteur("\\t", "Tabulation ( \\t )")
        ));
        delimiteurLigne.setPromptText("Sélectionnez un Ã©lément dans la liste");
        delimiteurLigne.setItems(FXCollections.observableArrayList(
                new Delimiteur("\\n", "Retour Charriot ( \\n )")
        ));
        fileToImportTextField.setEditable(Boolean.FALSE);
        fileToImportTextField.setPromptText("Selectionnez un fichier csv");
    }
      @FXML
     void importButtonOnClicked(MouseEvent evt){
         FileChooser fileChooser = new FileChooser();
        Window window = importButton.getScene().getWindow();
        File selectedFile = fileChooser.showOpenDialog(window);
        fileToImportTextField.setText(selectedFile.getAbsolutePath());
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/StructureLigneEditFormController.java
New file
@@ -0,0 +1,162 @@
package com.megatim.fdxgenerator.forms;
import com.megatimfx.common.annontations.Champ;
import com.megatim.fdxgenerator.App;
import static com.megatim.fdxgenerator.App.FORMATS_DATE;
import com.megatim.fdxgenerator.enums.TypeDonnee;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
public class StructureLigneEditFormController implements Initializable {
    private ObservableList<Integer> list = FXCollections.observableArrayList();
//    @FXML
//    private VBox formFieldContainer;
//
//    @FXML
//    private HBox dateFormatContainer;
    @FXML
    @Champ(mappedBy = "position", type = Integer.class)
    private ComboBox<Integer> positionComboBox;
    @FXML
    @Champ(mappedBy = "typeDonnee", type = TypeDonnee.class)
    private ComboBox<TypeDonnee> typeDonneeComboBox;
    @FXML
    @Champ(mappedBy = "code", type = String.class)
    private TextField codeTextField;
    @FXML
    @Champ(mappedBy = "designation", type = String.class)
    private TextField designationTextField;
    @FXML
    @Champ(mappedBy = "taille", type = Integer.class)
    private TextField tailleTextField;
    @FXML
    @Champ(mappedBy = "taillePartieDecimal", type = Integer.class)
    private TextField taillePartieDecimalTextField;
    @FXML
    @Champ(mappedBy = "formatDate", type = String.class)
    private ComboBox<String> formatDateComboBox;
    @FXML
    @Champ(mappedBy = "delimiteurDate",type = Delimiteur.class)
    private ComboBox<Delimiteur> delimiteurDateComboBox;
    @FXML
    @Champ(mappedBy = "delimiteurDecimal",type = Delimiteur.class)
    private ComboBox<Delimiteur> delimiteurDecimalComboBox;
    private Integer initialUpdateSelection;
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        formatDateComboBox.setDisable(true);
        formatDateComboBox.setPromptText("Sélectionnez un Ã©lément dans la liste");
        formatDateComboBox.setItems(FXCollections.observableArrayList(
                FORMATS_DATE
        ));
        delimiteurDateComboBox.setDisable(true);
        delimiteurDateComboBox.setPromptText("Sélectionnez un Ã©lément dans la liste");
        delimiteurDateComboBox.setItems(FXCollections.observableArrayList(
                App.SEPARATEURS_DATE.values()
        ));
        taillePartieDecimalTextField.setDisable(true);
        delimiteurDecimalComboBox.setDisable(true);
        delimiteurDecimalComboBox.setPromptText("Sélectionnez un Ã©lément dans la liste");
        delimiteurDecimalComboBox.setItems(FXCollections.observableArrayList(
                App.SEPARATEURS_DECIMAUX.values()
        ));
        positionComboBox.setItems(list);
        typeDonneeComboBox.setItems(FXCollections.observableArrayList(TypeDonnee.values()));
        typeDonneeComboBox.getSelectionModel().selectFirst();
        tailleTextField.textProperty().addListener((observable, oldValue, newValue) -> {
            if (!newValue.matches("\\d*")) {
                tailleTextField.setText(oldValue);
            }
        });
        typeDonneeComboBox.setOnAction(event -> {
            if (typeDonneeComboBox.getValue().equals(TypeDonnee.DATE)) {
                formatDateComboBox.setDisable(false);
                delimiteurDateComboBox.setDisable(false);
            } else {
                formatDateComboBox.setDisable(true);
                delimiteurDateComboBox.setDisable(true);
            }
             if (typeDonneeComboBox.getValue().equals(TypeDonnee.DECIMAL)) {
                 taillePartieDecimalTextField.setDisable(false);
                 delimiteurDecimalComboBox.setDisable(false);
             } else {
                  taillePartieDecimalTextField.setDisable(true);
                 delimiteurDecimalComboBox.setDisable(true);
             }
        });
    }
    public void populatePositionComboBox(int positionNumber) {
        list.clear();
        for (int i = 1; i <= positionNumber; i++) {
            list.add(i);
        }
    }
    public ComboBox getFormatDateComboBox() {
        return formatDateComboBox;
    }
    public ComboBox<TypeDonnee> getTypeDonneeComboBox() {
        return typeDonneeComboBox;
    }
    public ObservableList<Integer> getList() {
        return list;
    }
    public ComboBox<Integer> getPositionComboBox() {
        return positionComboBox;
    }
    public void setInitialUpateSelection() {
        initialUpdateSelection = positionComboBox.getSelectionModel().getSelectedItem();
    }
    public Integer getInitialUpdateSelection() {
        return initialUpdateSelection;
    }
    public ComboBox<Delimiteur> getDelimiteurDateComboBox() {
        return delimiteurDateComboBox;
    }
    public ComboBox<Delimiteur> getDelimiteurDecimalComboBox() {
        return delimiteurDecimalComboBox;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/TypeFichierEditFormController.java
New file
@@ -0,0 +1,35 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.forms;
import com.megatimfx.common.annontations.Champ;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierEditFormController  implements Initializable{
    @Champ(mappedBy = "code", type = String.class)
    @FXML
    private TextField codeTextField;
    @Champ(mappedBy = "libelle")
    @FXML
    private TextField libelleTextField;
    @Champ(mappedBy = "codeParticipant")
    @FXML
    private TextField codeParticipantTextField;
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/forms/ValidateurFichierEditFormController.java
New file
@@ -0,0 +1,230 @@
package com.megatim.fdxgenerator.forms;
import com.megatimfx.common.annontations.Champ;
import com.megatimfx.common.customcontrols.AbstractNestedEntityTable;
import com.megatimfx.common.customcontrols.AbstractSelectionItem;
import com.megatimfx.components.customdialogs.AlertMessageUtil;
import com.megatimfx.components.customdialogs.LoadinIndicatorDialogUtil;
import com.megatim.fdxgenerator.App;
import com.megatim.fdxgenerator.controller.table.StructureLigneTable;
import com.megatim.fdxgenerator.controller.table.TypeFichierTable;
import com.megatim.fdxgenerator.enums.DataType;
import com.megatim.fdxgenerator.model.StructureLigne;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import com.megatim.fdxgenerator.service.StructureLigneService;
import com.megatim.fdxgenerator.service.TypeFichierService;
import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.ResourceBundle;
import java.util.Set;
import javafx.collections.FXCollections;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.util.Pair;
public class ValidateurFichierEditFormController implements Initializable {
    @FXML
    @Champ(mappedBy = "typeFichier", type = TypeFichier.class, update = false)
    private AbstractSelectionItem<TypeFichier> typeFichierAbstractSelectItem;
    @FXML
    @Champ(mappedBy = "nombrePosition", type = Integer.class, update = false)
    private TextField nombrePositionTextField;
    @FXML
    private CheckBox saisieStructureLigneChecBox;
    @FXML
    @Champ(mappedBy = "delimiteurLigne", type = Delimiteur.class)
    private ComboBox<Delimiteur> delimiteurLigne;
    @FXML
    @Champ(mappedBy = "delimiteurColonne", type = Delimiteur.class)
    private ComboBox<Delimiteur> delimiteurColonne;
    @FXML
    @Champ(mappedBy = "dataType", type = DataType.class)
    private ComboBox<DataType> dataTypeComboBox;
    @FXML
    @Champ(mappedBy = "headerPresent", type = Boolean.class)
    private CheckBox headerPresentCheckbox;
    @FXML
    @Champ(mappedBy = "structureLignes", type = StructureLigne.class, update = true)
    private AbstractNestedEntityTable<StructureLigne, ValidateurFichier> structureLigneAbstractTable;
    private TypeFichierService typeFichierService = TypeFichierService.getInstance();
    private StructureLigneService structureLigneService = StructureLigneService.getInstance();
    //ELEMENTS DE CHARGEMENT
    private final Set<TypeFichier> typeFichierSet = new HashSet<>();
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        saisieStructureLigneChecBox.setDisable(true);
        nombrePositionTextField.setText("");
        typeFichierAbstractSelectItem.setTitle("Choix du type de fichier");
        typeFichierAbstractSelectItem.setColumns(Arrays.asList(
                TypeFichierTable.codeColumn(),
                TypeFichierTable.libelleColumn()
        ));
        typeFichierAbstractSelectItem.setSearchFieldPairs(Arrays.asList(
                new Pair<>("code", "Code"),
                new Pair<>("libelle", "Libellé")
        ));
        structureLigneAbstractTable.setClazz(StructureLigne.class);
        structureLigneAbstractTable.setColums(Arrays.asList(
                StructureLigneTable.positionColumn(),
                StructureLigneTable.codeColumn(),
                StructureLigneTable.typeDonneeColumn(),
                StructureLigneTable.tailleColumn()
        ));
        structureLigneAbstractTable.setGenericCrudService(structureLigneService);
        saisieStructureLigneChecBox.setOnAction(event -> {
            typeFichierAbstractSelectItem.setDisable(saisieStructureLigneChecBox.isSelected());
            nombrePositionTextField.setDisable(saisieStructureLigneChecBox.isSelected());
        });
        saisieStructureLigneChecBox.selectedProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue) {
                typeFichierAbstractSelectItem.setDisable(true);
                nombrePositionTextField.setDisable(true);
                saisieStructureLigneChecBox.setDisable(true);
            }
        });
        typeFichierAbstractSelectItem.selectedElementProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue != null) {
                enableCheckBox();
            }
        });
        nombrePositionTextField.textProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue.matches("\\d*")) {
                if (!newValue.isEmpty()) {
                    enableCheckBox();
                } else {
                    saisieStructureLigneChecBox.setDisable(true);
                }
            } else {
                nombrePositionTextField.setText(oldValue);
            }
        });
        delimiteurColonne.setPromptText("Sélectionnez un Ã©lément dans la liste");
        delimiteurColonne.setItems(FXCollections.observableArrayList(
                App.DELIMITEURS_COLONNE.values()
        ));
        delimiteurColonne.setDisable(true);
        delimiteurLigne.setPromptText("Sélectionnez un Ã©lément dans la liste");
        delimiteurLigne.setItems(FXCollections.observableArrayList(
                App.DELIMITEURS_LIGNE.values()
        ));
        delimiteurLigne.setDisable(true);
        dataTypeComboBox.setPromptText("Sélectionnez un Ã©lément dans la liste");
        dataTypeComboBox.setItems(FXCollections.observableArrayList(
                DataType.values()
        ));
        initElements();
    }
    private void initElements() {
        Task<Void> task = new Task() {
            @Override
            protected Object call() throws Exception {
                typeFichierSet.clear();
                typeFichierSet.addAll(typeFichierService.getAllTypeFichWithoutValidateur());
                return null;
            }
        };
        task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show());
        task.setOnSucceeded(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            typeFichierAbstractSelectItem.setElements(typeFichierSet);
        });
        task.setOnFailed(e -> {
            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
            AlertMessageUtil.showAlertException(task.getException(),
                    "Une exception s'est produite pendant le traitement", "Erreur");
        });
        Thread thread = new Thread(task);
        thread.setDaemon(true);
        thread.start();
    }
    public void enableCheckBox() {
        try {
            int position = Integer.valueOf(nombrePositionTextField.getText());
            saisieStructureLigneChecBox.setDisable(typeFichierAbstractSelectItem == null || position <= 0);
        } catch (NumberFormatException e) {
            saisieStructureLigneChecBox.setDisable(true);
        }
    }
    public AbstractSelectionItem<TypeFichier> getTypeFichierAbstractSelectItem() {
        return typeFichierAbstractSelectItem;
    }
    public void setTypeFichierAbstractSelectItem(AbstractSelectionItem<TypeFichier> typeFichierAbstractSelectItem) {
        this.typeFichierAbstractSelectItem = typeFichierAbstractSelectItem;
    }
    public TextField getNombrePositionTextField() {
        return nombrePositionTextField;
    }
    public void setNombrePositionTextField(TextField nombrePositionTextField) {
        this.nombrePositionTextField = nombrePositionTextField;
    }
    public CheckBox getSaisieStructureLigneChecBox() {
        return saisieStructureLigneChecBox;
    }
    public void setSaisieStructureLigneChecBox(CheckBox saisieStructureLigneChecBox) {
        this.saisieStructureLigneChecBox = saisieStructureLigneChecBox;
    }
    public AbstractNestedEntityTable<StructureLigne, ValidateurFichier> getStructureLigneAbstractTable() {
        return structureLigneAbstractTable;
    }
    public void setStructureLigneAbstractTable(AbstractNestedEntityTable<StructureLigne, ValidateurFichier> structureLigneAbstractTable) {
        this.structureLigneAbstractTable = structureLigneAbstractTable;
    }
    public ComboBox<Delimiteur> getDelimiteurLigne() {
        return delimiteurLigne;
    }
    public ComboBox<Delimiteur> getDelimiteurColonne() {
        return delimiteurColonne;
    }
    public ComboBox<DataType> getDataTypeComboBox() {
        return dataTypeComboBox;
    }
    public CheckBox getHeaderPresentCheckbox() {
        return headerPresentCheckbox;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/Configuration.java
New file
@@ -0,0 +1,28 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.Setter;
/**
 *
 * @author STEPHANIE
 */
@Getter @Setter
@Entity
public class Configuration implements Serializable {
    @Id
    @GeneratedValue
    private Long id;
    @NotEmpty(message= "Le chemin vers le repertoire est obligatoire")
    private String outputDir;
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/FichierValidation.java
New file
@@ -0,0 +1,49 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model;
import com.megatimfx.common.validationgroups.ViewFormValidationGroup;
import com.megatim.fdxgenerator.annotations.ConfigConstraint;
import com.megatim.fdxgenerator.annotations.FileNameConstraint;
import com.megatim.fdxgenerator.annotations.KeyToDecryptConstraint;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import lombok.Getter;
import lombok.Setter;
/**
 *
 * @author STEPHANIE
 */
@Getter
@Setter
@ConfigConstraint(groups = {ViewFormValidationGroup.class})
@KeyToDecryptConstraint(groups = {ViewFormValidationGroup.class})
@FileNameConstraint(groups = {ViewFormValidationGroup.class})
public class FichierValidation {
    @NotNull(message = "Le type de fichier est obligatoire", groups = {ViewFormValidationGroup.class})
    private TypeFichier typeFichier;
    private String keyToEncrypt;
    private String keyConfirmation;
    private boolean protege;
    private boolean validateFileName;
    @Pattern(regexp = "y{4}((M{2}){0,1})((d{2}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})|"
            + "y{4}((d{2}){0,1})((M{2}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})|"
            + "M{2}((y{4}){0,1})((d{2}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})|"
            + "M{2}((d{2}){0,1})((y{4}){0,1})((H{2}){0,1})((m{2}){0,1})((s{2}){0,1})",
            groups = {ViewFormValidationGroup.class},
            message = "Format Date yyyy : Année, MM : Mois, dd : Jour , HH : Heure, mm: Minute, ss : Seconde")
    private String formatDate;
    private String extension = "txt";
    private int maxValueTierce;
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/ImportFile.java
New file
@@ -0,0 +1,37 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model;
import com.megatimfx.common.validationgroups.ViewFormValidationGroup;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import lombok.Getter;
import lombok.Setter;
/**
 *
 * @author STEPHANIE
 */
@Getter @Setter
public class ImportFile<T> {
    @NotEmpty(message = "Le fichier Ã  importer est obligatoire" , groups = {ViewFormValidationGroup.class})
    @Pattern(regexp=".+\\.csv", flags = Pattern.Flag.CASE_INSENSITIVE, message="Bien vouloir sélectionner un fichier csv" , groups = {ViewFormValidationGroup.class})
    private String filePath;
//    @NotEmpty(message = "Le format du fichier est obligatoire" , groups = {ViewFormValidationGroup.class})
//    private String formatFichier;
    @NotNull(message = "Le délimiteur de ligne est obligatoire" , groups = {ViewFormValidationGroup.class})
    private Delimiteur delimiteurLigne;
    @NotNull(message = "Le délimiteur de colonne est obligatoire" , groups = {ViewFormValidationGroup.class})
    private Delimiteur delimiteurColonne;
    //type des objets qui vont contenir les données extraites
    Class<T> type;
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/StructureLigne.java
New file
@@ -0,0 +1,94 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model;
import com.megatimfx.common.validationgroups.ViewFormValidationGroup;
import com.megatim.fdxgenerator.enums.TypeDonnee;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Range;
/**
 *
 * @author STEPHANIE
 */
@Entity
@Getter
@Setter
//@TailleFormatDateConstraint(groups = {ViewFormValidationGroup.class})
public class StructureLigne implements Serializable {
    @Id
//    @NotEmpty(message = "L'identifiant est obligatoire", groups = {ViewFormValidationGroup.class})
    private String id;
    @Range(min = 1, message = "La position doit Ãªtre supérieure Ã  0", groups = {ViewFormValidationGroup.class})
    private int position;
    @NotEmpty(message = "Le code est obligatoire", groups = {ViewFormValidationGroup.class})
    private String code;
    private String designation;
    @Range(min = 1, message = "La taille du champ doit Ãªtre supérieure Ã  0", groups = {ViewFormValidationGroup.class})
    private int taille;
    private int taillePartieDecimal;
    private String source;
    private String formatDate;
    private String separateurDate;
    private String separateurDecimal;
    @Transient
    private Delimiteur delimiteurDate;
    @Transient
    private Delimiteur delimiteurDecimal;
    @Enumerated(EnumType.STRING)
    @NotNull(message = "Le type de données est obligatoire", groups = {ViewFormValidationGroup.class})
    private TypeDonnee typeDonnee;
    @NotNull(message = "Le validateur de fichier doit Ãªtre indiqué")
    @ManyToOne
    private ValidateurFichier validateurFichier;
    @Override
    public String toString() {
        return this.code + " - " + this.designation;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof StructureLigne)) {
            return false;
        }
        final StructureLigne other = (StructureLigne) obj;
        if (this.getId() != null && !this.getId().equals(other.getId())) {
            return false;
        }
        return true;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/TypeFichier.java
New file
@@ -0,0 +1,54 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model;
import com.megatimfx.common.validationgroups.ViewFormValidationGroup;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.Setter;
/**
 *
 * @author STEPHANIE
 */
@Entity
@Getter
@Setter
public class TypeFichier implements Serializable {
    @Id
    @NotEmpty(message = "Le code type de fichier est obligatoire" , groups = {ViewFormValidationGroup.class})
    private String code;
    private String libelle;
    private String codeParticipant;
    @Override
    public String toString() {
        return this.getCode() + " - " + this.getLibelle();
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof TypeFichier)) {
            return false;
        }
        final TypeFichier other = (TypeFichier) obj;
        if (this.getCode() != null && !this.getCode().equals(other.getCode())) {
            return false;
        }
        return true;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/ValidateurFichier.java
New file
@@ -0,0 +1,88 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model;
import com.megatimfx.common.validationgroups.ViewFormValidationGroup;
import com.megatim.fdxgenerator.enums.DataType;
import com.megatim.fdxgenerator.pojo.Delimiteur;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Range;
/**
 *
 * @author STEPHANIE
 */
@Entity
@Getter
@Setter
public class ValidateurFichier implements Serializable {
    @Id
    @NotNull(message = "Aucun identifiant spécifié", groups = {ViewFormValidationGroup.class})
    private String id;
    @Range(min = 1, message = "Le nombre de position doit Ãªtre supérieure Ã  0", groups = {ViewFormValidationGroup.class})
    private int nombrePosition;
    //private String typeFichierCode;
    @NotNull(message = "Le type de fichier est obligatoire", groups = {ViewFormValidationGroup.class})
    @ManyToOne
    private TypeFichier typeFichier;
    @Transient
    private Delimiteur delimiteurLigne;
    @Transient
    private Delimiteur delimiteurColonne;
    private String codeDelimiteurLigne;
    private String codeDelimiteurColonne;
    private boolean headerPresent;
    @NotNull(message = "Le format du fichier de données est obligatoire", groups = {ViewFormValidationGroup.class})
    @Enumerated(EnumType.STRING)
    private DataType dataType;
    @OneToMany(mappedBy = "validateurFichier", cascade = CascadeType.ALL)
    private Set<StructureLigne> structureLignes = new HashSet<>();
    @Override
    public String toString() {
        return this.typeFichier.toString();
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof ValidateurFichier)) {
            return false;
        }
        final ValidateurFichier other = (ValidateurFichier) obj;
        if (this.getTypeFichier() != null && !this.getTypeFichier().equals(other.getTypeFichier())) {
            return false;
        }
        return true;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/AbstractDAO.java
New file
@@ -0,0 +1,281 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model.dao;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import com.megatim.fdxgenerator.utilities.PaginationElts;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.Session;
/**
 *
 * @author mela
 */
@Getter
@Setter
public class AbstractDAO<T> {
    private Class<T> clazz;
    private PaginationElts pagination;
    public AbstractDAO(Class<T> clas) {
        clazz = clas;
        pagination = new PaginationElts();
    }
    public <T> T add(T element) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            session.beginTransaction();
            session.persist(element);
            session.getTransaction().commit();
            session.refresh(element);
        }
        return element;
    }
    public <T> T edit(T element) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            session.beginTransaction();
            session.update(element);
            session.getTransaction().commit();
            session.refresh(element);
        }
        return element;
    }
    public void delete(T element) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            session.beginTransaction();
            session.delete(element);
            session.getTransaction().commit();
        }
    }
    public void deleteAll(String tableName) {
        List<T> liste = getAll(tableName);
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            session.beginTransaction();
            liste.forEach(t -> session.delete(t));
            session.getTransaction().commit();
        }
    }
    public <Optional> T find(T element) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            return session.find(clazz, element);
        }
    }
    public List<T> getAll(String tableName) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            return session.createQuery("from " + tableName).getResultList();
        }
    }
    public List<T> getAllByPage(int indexDebut, int numberOfElt, List<SearchCriteria> searchCriterias) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
            CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(clazz);
            Root<T> root = criteriaQuery.from(clazz);
            List<Predicate> predicates = createPedicates(searchCriterias, criteriaBuilder, root);
            CriteriaQuery<T> cq = criteriaQuery.select(root);
            cq = cq.select(root).where(predicates.toArray(new Predicate[predicates.size()]));
            TypedQuery<T> typedQuery = session.createQuery(cq);
            typedQuery.setFirstResult(indexDebut);
            typedQuery.setMaxResults(numberOfElt);
            List<T> liste = typedQuery.getResultList();
            return liste;
        }
    }
    private long count(List<SearchCriteria> searchCriterias) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            CriteriaBuilder qb = session.getCriteriaBuilder();
            CriteriaQuery<Long> cq = qb.createQuery(Long.class);
            Root<T> root = cq.from(clazz);
            List<Predicate> predicates = createPedicates(searchCriterias, qb, root);
            cq.select(qb.count(root));
            cq.where(predicates.toArray(new Predicate[predicates.size()]));
            return (long) session.createQuery(cq).getSingleResult();
        }
    }
    public PaginationElts initPaginationElts(int pageNumber, List<SearchCriteria> searchCriterias) {
        int indexDebut = pageNumber * pagination.getNbEltsPerPage();
        if (clazz.equals(ValidateurFichier.class)) {
            System.out.println("in custom getAllByPage");
            pagination.setListe(ValidateurFichierDAO.getAllByPage(indexDebut, pagination.getNbEltsPerPage(), searchCriterias));
        } else {
            pagination.setListe(getAllByPage(indexDebut, pagination.getNbEltsPerPage(), searchCriterias));
        }
        pagination.setTotalElts(count(searchCriterias));
        pagination.setPage(pageNumber);
        if (pageNumber == 0) {
            pagination.setNumberOfElts(pagination.getListe().size());
        } else {
            pagination.setNumberOfElts(pageNumber * pagination.getNbEltsPerPage() + pagination.getListe().size());
        }
        pagination.setNumberOfPage((pagination.getTotalElts() % pagination.getNbEltsPerPage() == 0) ? (pagination.getTotalElts() / pagination.getNbEltsPerPage())
                : (pagination.getTotalElts() / pagination.getNbEltsPerPage()) + 1);
        return pagination;
    }
    /**
     * Méthode qui retounre la liste des champs de la classe clazz
     *
     * @return
     */
    private Map<String, Field> getClassFields() {
        Field[] fields = clazz.getDeclaredFields();
        Map<String, Field> mapOfFields = new HashMap<>();
        for (Field field : fields) {
            mapOfFields.put(field.getName(), field);
        }
        return mapOfFields;
    }
    /**
     * Méthode qui vérifie que le champ "fieldValue" de l'objet searchCriteria
     * est du même type que le champ "fieldName" dans la classe clazz
     *
     * @param field : contient les informations sur le champ correspondant
     * @param value : valeur dont on veut vérifier le type
     * @return : retourne vrai sivalue est du même type que celui renseigné dans
     * field
     */
    private boolean isFieldAndValueOfSameType(Field field, Object value) {
        boolean result = true;
        try {
            field.getType().cast(value);
        } catch (ClassCastException ex) {
            result = false;
        }
        return result;
        //String className = field.getType().getName();
    }
    /**
     * Méthode qui filtre la liste des critères afin de ne garder que ceux qui
     * respectent le type du champ correspondant dans la classe et ceux dont le
     * fieldName correspond Ã  un champ de la classe clazz
     *
     * @param searchCriterias
     * @return
     */
    private List<SearchCriteria> verifySearchCriteria(List<SearchCriteria> searchCriterias) {
        Map<String, Field> mapOfFields = getClassFields();
        //Retire les critères dont le fieldName ne correspond Ã  aucun champ de la classe clazz
        for (SearchCriteria criteria : searchCriterias) {
            if (!mapOfFields.containsKey(criteria.getFieldName())) {
                searchCriterias.remove(criteria);
//                continue;
            }
//            Retire les critères dont le type de fieldValue ne correspond pas au type du champ dans la classe clazz
//            if(!isFieldAndValueOfSameType(mapOfFields.get(criteria.getFieldName()),criteria.getFieldValue())){
//                searchCriterias.remove(criteria);
//            }
        }
        return searchCriterias;
    }
    /**
     * Méthode qui les prédicats Ã  partir des critères de recherche
     *
     * @param searchCriterias
     * @param cb
     * @return
     */
    public List<Predicate> createPedicates(List<SearchCriteria> searchCriterias, CriteriaBuilder cb, Root<T> root) {
        List<Predicate> predicates = new ArrayList<>();
        searchCriterias = verifySearchCriteria(searchCriterias);
        searchCriterias.parallelStream().forEach(s -> {
            Predicate predicate = null;
            switch (s.getOperateur()) {
                case EQUALS:
                    predicate = cb.equal(root.get(s.getFieldName()), s.getFieldValue());
                    predicates.add(predicate);
                    break;
                case NOT_EQUALS:
                    predicate = cb.notEqual(root.get(s.getFieldName()), s.getFieldValue());
                    predicates.add(predicate);
                    break;
                case LIKE:
                    if (s.getFieldValue() instanceof String) {
                        predicate = cb.like(root.get(s.getFieldName()), "%" + s.getFieldValue().toString() + "%");
                        predicates.add(predicate);
                    }
                    break;
                case GREATER_THAN:
                    if (s.getFieldValue() instanceof Number) {
                        predicate = cb.gt(root.get(s.getFieldName()), (Number) s.getFieldValue());
                        predicates.add(predicate);
                    }
                    break;
                case GREATER_OR_EQUALS_THAN:
                    if (s.getFieldValue() instanceof Number) {
                        predicate = cb.ge(root.get(s.getFieldName()), (Number) s.getFieldValue());
                        predicates.add(predicate);
                    }
                    break;
                case LESS_THAN:
                    if (s.getFieldValue() instanceof Number) {
                        predicate = cb.lt(root.get(s.getFieldName()), (Number) s.getFieldValue());
                        predicates.add(predicate);
                    }
                    break;
                case _LESS_OR_EQUALS_THAN:
                    if (s.getFieldValue() instanceof Number) {
                        predicate = cb.le(root.get(s.getFieldName()), (Number) s.getFieldValue());
                        predicates.add(predicate);
                    }
                    break;
                case IN:
                    if (s.getFieldValue() instanceof java.util.Collection) {
                        predicate = root.get(s.getFieldName()).in(s.getFieldValue());
                        predicates.add(predicate);
                    }
                    break;
                default:
            }
        });
        return predicates;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/HibernateUtil.java
New file
@@ -0,0 +1,48 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model.dao;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
/**
 *
 * @author mela
 */
public class HibernateUtil {
    private static SessionFactory sessionFactory;
    private HibernateUtil() {
    }
    public static synchronized SessionFactory getSessionFactory() {
        try {
            if (sessionFactory == null) {
                StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
                        //                        .configure("hibernate.cfg.xml").build();
                        .configure("file:hibernate.cfg.xml").build();
                Metadata metaData = new MetadataSources(standardRegistry)
                        .getMetadataBuilder()
                        .build();
                sessionFactory = metaData.getSessionFactoryBuilder().build();
            }
            return sessionFactory;
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static void shutdown() {
        if(sessionFactory != null)
            sessionFactory.close();
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/StructureLigneDAO.java
New file
@@ -0,0 +1,31 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model.dao;
import com.megatim.fdxgenerator.model.StructureLigne;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.query.Query;
/**
 *
 * @author STEPHANIE
 */
public class StructureLigneDAO {
    private StructureLigneDAO() {
    }
    public static List<StructureLigne> findByValidateurFichierId(String validateurFichierId) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            Query query = session.createQuery("select s from StructureLigne s where s.validateurFichier.id =: validateurFichierId");
            query.setParameter("validateurFichierId", validateurFichierId);
            return query.getResultList();
        }
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/TypeFichierDAO.java
New file
@@ -0,0 +1,45 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model.dao;
import com.megatim.fdxgenerator.model.TypeFichier;
import java.util.List;
import java.util.Optional;
import org.hibernate.Session;
import org.hibernate.query.Query;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierDAO {
    private TypeFichierDAO() {
    }
    public static List<TypeFichier> getAllTypeFichWithValidateur() {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            Query query = session.createQuery("SELECT t FROM TypeFichier t, ValidateurFichier v  WHERE t.code = v.typeFichier.code");
            return query.getResultList();
        }
    }
    public static List<TypeFichier> getAllTypeFichWithoutValidateur() {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
             Query query = session.createQuery("SELECT t FROM TypeFichier t"
                     + " WHERE NOT EXISTS"
                     + " (SELECT v FROM ValidateurFichier v WHERE v.typeFichier.code = t.code)");
            return query.getResultList();
        }
    }
    public static Optional<TypeFichier> findByCode(TypeFichier t) {
        try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
            Query query = session.createQuery("SELECT t FROM TypeFichier t WHERE t.code = :code");
            query.setParameter("code", t.getCode());
            return query.uniqueResultOptional();
        }
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/model/dao/ValidateurFichierDAO.java
New file
@@ -0,0 +1,84 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.model.dao;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.query.Query;
/**
 *
 * @author STEPHANIE
 */
public class ValidateurFichierDAO {
    private ValidateurFichierDAO() {
    }
    public static Optional<ValidateurFichier> findByTypeFichier(TypeFichier typeFichier) {
        Optional<ValidateurFichier> opt;
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            Query query = session.createQuery("select v from ValidateurFichier v where v.typeFichier =: typeFichier");
            query.setParameter("typeFichier", typeFichier);
            opt = query.uniqueResultOptional();
        }
        return opt;
    }
    public static Optional<ValidateurFichier> findByTypeFichier(String typeFichierCode) {
        Optional<ValidateurFichier> opt ;
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            Query query = session.createQuery("select v from ValidateurFichier v where v.typeFichier.code =: typeFichierCode");
            query.setParameter("typeFichierCode", typeFichierCode);
            opt = query.uniqueResultOptional();
        }
        return opt;
    }
    public static Optional<ValidateurFichier> findById(String id) {
        Optional<ValidateurFichier> opt;
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            Query query = session.createQuery("select v from ValidateurFichier v where v.id =: id");
            query.setParameter("id", id);
            opt = query.uniqueResultOptional();
        }
        return opt;
    }
     public static List<ValidateurFichier> getAllByPage(int indexDebut, int numberOfElt,List<SearchCriteria> searchCriterias) {
         AbstractDAO<ValidateurFichier> dao = new AbstractDAO<>(ValidateurFichier.class);
         List<ValidateurFichier> liste = new ArrayList<>();
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
            CriteriaQuery<ValidateurFichier> criteriaQuery = criteriaBuilder.createQuery(ValidateurFichier.class);
            Root<ValidateurFichier> root = criteriaQuery.from(ValidateurFichier.class);
            List<Predicate> predicates = dao.createPedicates(searchCriterias,criteriaBuilder,root);
            root.fetch("structureLignes",JoinType.LEFT);
            CriteriaQuery<ValidateurFichier> cq = criteriaQuery.select(root).distinct(true);
            cq = cq.select(root).where(predicates.toArray(new Predicate[predicates.size()]));
            TypedQuery<ValidateurFichier> typedQuery = session.createQuery(cq);
            typedQuery.setFirstResult(indexDebut);
            typedQuery.setMaxResults(numberOfElt);
            liste = typedQuery.getResultList();
        }
        return liste;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/pojo/Delimiteur.java
New file
@@ -0,0 +1,26 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.pojo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
/**
 *
 * @author STEPHANIE
 */
@Getter
@Setter
@AllArgsConstructor
public class Delimiteur {
    private String code;
    private String libelle;
    @Override
    public String toString() {
        return libelle;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/ConfigurationService.java
New file
@@ -0,0 +1,63 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.service;
import com.megatimfx.common.service.GenericCrudService;
import com.megatim.fdxgenerator.model.Configuration;
import com.megatim.fdxgenerator.model.dao.AbstractDAO;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author mela
 */
public class ConfigurationService implements GenericCrudService<Configuration> {
    private static ConfigurationService configurationService;
    private static AbstractDAO<Configuration> dao;
    private ConfigurationService() {
    }
    public static synchronized ConfigurationService getInstance() {
        if (configurationService == null) {
            configurationService = new ConfigurationService();
            dao = new AbstractDAO<>(Configuration.class);
        }
        return configurationService;
    }
    @Override
    public Configuration add(Configuration t) throws Exception {
        return dao.add(t);
    }
    @Override
    public Configuration edit(Configuration t) throws Exception {
        return dao.edit(t);
    }
    @Override
    public List<Configuration> getAll() throws Exception {
        return dao.getAll("Configuration");
    }
    @Override
    public void delete(Configuration t) throws Exception {
        dao.delete(t);
    }
    public Configuration getCurrentConfig(){
        try {
            return getAll().stream().findFirst().orElse(null);
        } catch (Exception ex) {
            Logger.getLogger(ConfigurationService.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/ImportFileService.java
New file
@@ -0,0 +1,90 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.service;
import com.megatim.fdxgenerator.utilities.DataToImport;
import com.megatim.fdxgenerator.utilities.ImportData;
import com.megatim.fdxgenerator.model.StructureLigne;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import com.megatim.fdxgenerator.model.ImportFile;
import com.megatimfx.common.service.GenericCrudService;
import com.megatim.fdxgenerator.model.dao.AbstractDAO;
import com.megatim.fdxgenerator.model.dao.TypeFichierDAO;
import com.megatim.fdxgenerator.utilities.PaginationElts;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
 * structLigne : id, code,format_date, position, taille, type_donnee,
 * validateur_fichier_id ValidateurFichier : id, nombre_position,
 * type_fichier_code
 *
 * @author STEPHANIE
 */
public class ImportFileService implements GenericCrudService<ImportFile> {
    private static ImportFileService importFileService;
    private PaginationElts<TypeFichier> pagination;
    private ImportFileService() {
    }
    public static synchronized ImportFileService getInstance() {
        if (importFileService == null) {
            importFileService = new ImportFileService();
        }
        return importFileService;
    }
    @Override
    public ImportFile add(ImportFile t) throws Exception {
        importDataFromFile(t);
        return t;
    }
    @Override
    public ImportFile edit(ImportFile t) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    @Override
    public List<ImportFile> getAll() throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    @Override
    public void delete(ImportFile t) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    private void importDataFromFile(ImportFile im) {
        List<String> fields = new ArrayList<>();
        StructureLigne s = new StructureLigne();
        ValidateurFichier v = new ValidateurFichier();
        if (im != null && im.getType() != null) {
            if (im.getType().equals(TypeFichier.class)) {
                fields.add("code");
                fields.add("libelle");
                fields.add("codeParticipant");
            }
        }
        DataToImport datIm = new DataToImport(new File(im.getFilePath()), im.getDelimiteurLigne().getCode(), im.getDelimiteurColonne().getCode(), im.getType(), fields);
        List<Object> datas = ImportData.importDataFromCsvFile(datIm);
            if (im.getType().equals(TypeFichier.class)) {
            AbstractDAO<TypeFichier> dao = new AbstractDAO<>(TypeFichier.class);
            datas.forEach(d -> {
                TypeFichier t = (TypeFichier) d;
                Optional<TypeFichier> opt = TypeFichierDAO.findByCode(t);
                if(!opt.isPresent())
                     dao.add(t);
            });
        }
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/StructureLigneService.java
New file
@@ -0,0 +1,93 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.service;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatimfx.common.service.GenericCrudService;
import com.megatim.fdxgenerator.model.StructureLigne;
import com.megatim.fdxgenerator.model.dao.AbstractDAO;
import com.megatim.fdxgenerator.utilities.PaginationElts;
import java.util.List;
/**
 *
 * @author STEPHANIE
 */
public class StructureLigneService implements GenericCrudService<StructureLigne> {
    private static StructureLigneService structureLigneService;
    private static AbstractDAO<StructureLigne> dao;
    private PaginationElts<StructureLigne> pagination;
    private StructureLigneService() {
    }
    public static synchronized StructureLigneService getInstance() {
        if (structureLigneService == null) {
            structureLigneService = new StructureLigneService();
            dao = new AbstractDAO<>(StructureLigne.class);
        }
        return structureLigneService;
    }
    @Override
    public StructureLigne add(StructureLigne t) throws Exception {
        return dao.add(t);
    }
    @Override
    public StructureLigne edit(StructureLigne t) throws Exception {
        return dao.edit(t);
    }
    @Override
    public List<StructureLigne> getAll() throws Exception {
        return dao.getAll("StructureLigne");
    }
    @Override
    public void delete(StructureLigne t) throws Exception {
        dao.delete(t);
    }
   @Override
    public boolean isLast() {
        return pagination.isLast();
    }
    @Override
    public boolean isFirst() {
        return pagination.isFirst();
    }
    @Override
    public int getCurrentPage() {
        return pagination.getPage();
    }
    @Override
    public int getNumberOfElements() {
        return pagination.getNumberOfElts();
    }
    @Override
    public int getNumberPerPage() {
        return pagination.getNbEltsPerPage();
    }
    @Override
    public Long getTotalElements() {
        return pagination.getTotalElts();
    }
    @Override
    public List<StructureLigne> getAllByPage(int pageNumber, List<SearchCriteria> searchCriterias) {
         pagination = dao.initPaginationElts(pageNumber, searchCriterias);
        return pagination.getListe();
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/TypeFichierService.java
New file
@@ -0,0 +1,103 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.service;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatimfx.common.service.GenericCrudService;
import com.megatim.fdxgenerator.model.TypeFichier;
import com.megatim.fdxgenerator.model.dao.AbstractDAO;
import com.megatim.fdxgenerator.model.dao.TypeFichierDAO;
import com.megatim.fdxgenerator.utilities.PaginationElts;
import java.util.List;
/**
 *
 * @author STEPHANIE
 */
public class TypeFichierService implements GenericCrudService<TypeFichier> {
    private static TypeFichierService typeFichierService;
    private static AbstractDAO<TypeFichier> dao;
    private PaginationElts<TypeFichier> pagination;
    private TypeFichierService() {
    }
    public static synchronized TypeFichierService getInstance() {
        if (typeFichierService == null) {
            typeFichierService = new TypeFichierService();
            dao = new AbstractDAO<>(TypeFichier.class);
        }
        return typeFichierService;
    }
    @Override
    public TypeFichier add(TypeFichier t) throws Exception {
        return dao.add(t);
    }
    @Override
    public TypeFichier edit(TypeFichier t) throws Exception {
        return dao.edit(t);
    }
    @Override
    public List<TypeFichier> getAll() throws Exception {
        return dao.getAll("TypeFichier");
    }
    public List<TypeFichier> getAllTypeFichWithValidateur() throws Exception {
        return TypeFichierDAO.getAllTypeFichWithValidateur();
    }
    public List<TypeFichier> getAllTypeFichWithoutValidateur() throws Exception {
        return TypeFichierDAO.getAllTypeFichWithoutValidateur();
    }
    @Override
    public void delete(TypeFichier t) throws Exception {
        dao.delete(t);
    }
   @Override
    public boolean isLast() {
        return pagination.isLast();
    }
    @Override
    public boolean isFirst() {
        return pagination.isFirst();
    }
    @Override
    public int getCurrentPage() {
        return pagination.getPage();
    }
    @Override
    public int getNumberOfElements() {
        return pagination.getNumberOfElts();
    }
    @Override
    public int getNumberPerPage() {
        return pagination.getNbEltsPerPage();
    }
    @Override
    public Long getTotalElements() {
        return pagination.getTotalElts();
    }
    @Override
    public List<TypeFichier> getAllByPage(int pageNumber, List<SearchCriteria> searchCriterias) {
        System.out.println("searchCriterias.size "+searchCriterias.size());
         pagination = dao.initPaginationElts(pageNumber, searchCriterias);
        return pagination.getListe();
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/service/ValidateurFichierService.java
New file
@@ -0,0 +1,100 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.service;
import com.megatimfx.common.pojo.SearchCriteria;
import com.megatimfx.common.service.GenericCrudService;
import com.megatim.fdxgenerator.model.ValidateurFichier;
import com.megatim.fdxgenerator.model.dao.AbstractDAO;
import com.megatim.fdxgenerator.model.dao.ValidateurFichierDAO;
import com.megatim.fdxgenerator.utilities.PaginationElts;
import java.util.List;
import java.util.Optional;
/**
 *
 * @author STEPHANIE
 */
public class ValidateurFichierService implements GenericCrudService<ValidateurFichier> {
    private static ValidateurFichierService validateurFichierService;
    private static AbstractDAO<ValidateurFichier> dao;
    private PaginationElts<ValidateurFichier> pagination;
    private ValidateurFichierService() {
    }
    public static synchronized ValidateurFichierService getInstance() {
        if (validateurFichierService == null) {
            validateurFichierService = new ValidateurFichierService();
            dao = new AbstractDAO<>(ValidateurFichier.class);
        }
        return validateurFichierService;
    }
    @Override
    public ValidateurFichier add(ValidateurFichier t) throws Exception {
        return dao.add(t);
    }
    public Optional<ValidateurFichier> find(ValidateurFichier t) {
        return ValidateurFichierDAO.findById(t.getId());
    }
    @Override
    public ValidateurFichier edit(ValidateurFichier t) throws Exception {
        return dao.edit(t);
    }
    @Override
    public List<ValidateurFichier> getAll() throws Exception {
        return dao.getAll("ValidateurFichier");
    }
    @Override
    public void delete(ValidateurFichier t) throws Exception {
        dao.delete(t);
    }
   @Override
    public boolean isLast() {
        return pagination.isLast();
    }
    @Override
    public boolean isFirst() {
        return pagination.isFirst();
    }
    @Override
    public int getCurrentPage() {
        return pagination.getPage();
    }
    @Override
    public int getNumberOfElements() {
        return pagination.getNumberOfElts();
    }
    @Override
    public int getNumberPerPage() {
        return pagination.getNbEltsPerPage();
    }
    @Override
    public Long getTotalElements() {
        return pagination.getTotalElts();
    }
    @Override
    public List<ValidateurFichier> getAllByPage(int pageNumber, List<SearchCriteria> searchCriterias) {
         pagination = dao.initPaginationElts(pageNumber, searchCriterias);
        return pagination.getListe();
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/AttributeFormatException.java
New file
@@ -0,0 +1,23 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.utilities;
/**
 *
 * @author mela
 */
public class AttributeFormatException extends RuntimeException {
     public AttributeFormatException(String message) {
        super(message);
    }
    public AttributeFormatException(String message, Throwable cause) {
        super(message, cause);
    }
    public AttributeFormatException(Throwable cause) {
        super(cause);
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/DataToImport.java
New file
@@ -0,0 +1,36 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.utilities;
import java.io.File;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
 *
 * @author mela
 * @param <T>
 */
@Getter @Setter
@NoArgsConstructor @AllArgsConstructor
public class DataToImport <T> {
    //Fichier duquel seront extraits les données
    File file;
    //délimiteur de ligne
    String rowDelimiter;
    //délimiteur de colonne
    String columnDelimiter;
    //type des objets qui vont contenir les données extraites
    Class<T> type;
    //liste des champs dans leur ordre d'apparition dans le fichier "file"
    List<String> fields;
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/ImportData.java
New file
@@ -0,0 +1,178 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.utilities;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author mela
 */
public class ImportData {
    /**
     * Méthode qui parse le fichier csv et en extrait les données
     *
     * @param datIm
     * @return
     */
    public static <T> List<T> importDataFromCsvFile(DataToImport<T> datIm) throws AttributeFormatException {
        FileReader reader = null;
        List<String[]> datas = new ArrayList<>();
        List<T> listeToReturn = new ArrayList<>();
        if (datIm != null) {
            try {
                reader = new FileReader(datIm.getFile() + "");
                LineNumberReader lineReader = new LineNumberReader(reader);
                String line = "";
                while ((line = lineReader.readLine()) != null) {
                    String[] row = line.split(datIm.getRowDelimiter());
                    for (String r : row) {
                        String[] values = new String[datIm.getFields().size()];
                        String[] columns = r.split(datIm.getColumnDelimiter());
                        int ss = 0;
                        while (ss < datIm.getFields().size() && ss < columns.length) {
                            values[ss] = columns[ss];
                            ss++;
                        }
                        datas.add(values);
                    }
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(ImportData.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
            } catch (IOException ex) {
                Logger.getLogger(ImportData.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
            } finally {
                try {
                    reader.close();
                } catch (IOException | NullPointerException ex) {
                    Logger.getLogger(ImportData.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
                }
            }
            if (!datas.isEmpty()) {
                //tous les champs du type paramétré
                Field[] fields = datIm.getType().getDeclaredFields();
                // mettre les champs du type paramétré dans une map afin de faciliter leur accès
                Map<String, Field> fieldsToMap = fieldsToMap(fields);
                datas.forEach(d -> {
                    try {
                        T obj = datIm.getType().newInstance();
                        Map<String, String> map = tabToMap(datIm.getFields(), d);
                        for (Field field : fields) {
                            String fieldName = field.getName();
                            if (map.containsKey(fieldName) && fieldsToMap.containsKey(fieldName)) {
                                try {
                                    Object converted = convertToPrimitive(field, map.get(fieldName));
                                    Method method = new PropertyDescriptor(fieldName, datIm.getType()).getWriteMethod();
                                    method.invoke(obj, converted);
                                } catch (IntrospectionException | IllegalAccessException | InvocationTargetException ex) {
                                    Logger.getLogger(ImportData.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
                                } catch (IllegalArgumentException | ClassCastException ex) {
                                    throw new AttributeFormatException("Erreur de type sur le champ " + fieldName);
                                }
                            }
                        }
                        listeToReturn.add(obj);
                    } catch (InstantiationException | IllegalAccessException ex) {
                        Logger.getLogger(ImportData.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
                    }
                });
            }
        }
        return listeToReturn;
    }
    /**
     * Méthode qui met les libellés des colonnes et leurs valeurs
     * correspondantes dans une map
     *
     * @param titles : ensemble des noms de colonnes
     * @param values : ensemble des données
     * @return : rentourne une map (clé,valeur) = (nom_de_la_colonne,
     * valeur_colonne)
     */
    private static Map<String, String> tabToMap(List<String> titles, String[] values) {
        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < titles.size(); i++) {
            map.put(titles.get(i), values[i]);
        }
        return map;
    }
    /**
     * Méthode qui met un tableau de Field dans une
     * map<nom_du_champ,objet représentant_le_champ>
     * afin de faciliter leur accès
     *
     * @param fields
     * @return
     */
    private static Map<String, Field> fieldsToMap(Field[] fields) {
        Map<String, Field> map = new HashMap<>();
        for (Field f : fields) {
            map.put(f.getName(), f);
        }
        return map;
    }
    /**
     * Méthode qui fait la conversion de la donnée extraite vers un type
     * primitif
     *
     * @param field : objet contenant les informations sur le type auquel
     * appartient le champ de la donnée extraite
     * @param value : donnée Ã  convertir
     * @return : retourne un String si le type du champ ne figure pas dans la
     * liste ci-dessus
     */
    private static Object convertToPrimitive(Field field, String value) {
        Object obj = value;
        if (field.getType().isAssignableFrom(Integer.class)
                || field.getType().isAssignableFrom(int.class)) {
            obj = Integer.parseInt(value);
        } else if (field.getType().isAssignableFrom(Double.class)
                || field.getType().isAssignableFrom(double.class)) {
            obj = Double.parseDouble(value);
        } else if (field.getType().isAssignableFrom(java.math.BigDecimal.class)) {
            obj = new java.math.BigDecimal(value);
        } else if (field.getType().isAssignableFrom(Float.class)
                || field.getType().isAssignableFrom(float.class)) {
            obj = Float.valueOf(value);
        } else if (field.getType().isAssignableFrom(Long.class)
                || field.getType().isAssignableFrom(long.class)) {
            obj = Long.parseLong(value);
        } else if (field.getType().isAssignableFrom(Boolean.class)
                || field.getType().isAssignableFrom(boolean.class)) {
            Boolean.parseBoolean(value);
        }
        return obj;
    }
}
fdx_generator/src/main/java/com/megatim/fdxgenerator/utilities/PaginationElts.java
New file
@@ -0,0 +1,49 @@
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.megatim.fdxgenerator.utilities;
import java.util.List;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
 *
 * @author mela
 */
@Getter
@Setter
@NoArgsConstructor
public class PaginationElts<T> {
    //Numéro de page courante
    private int page = 0;
    //Nombre de pages
    private long numberOfPage = 0;
    //Nombre d'éléments Ã  afficher par page
    private int nbEltsPerPage = 10;
    //Nombre d'éléments total Ã  afficher
    private long totalElts = 0;
    //Nombre délémnts sur une pages quelconque : peut Ãªtre inférieure ou Ã©gale Ã  nbEltsPerPage
    private int numberOfElts = 0;
    private  List<T> liste;
    public PaginationElts(int nbEltsPerPage){
        this.nbEltsPerPage = nbEltsPerPage;
    }
    public boolean isLast() {
        return page == (numberOfPage == 0 ? numberOfPage : numberOfPage - 1);
    }
    public boolean isFirst() {
        return page == 0;
    }
}
fdx_generator/src/main/resources/com/megatim/fdxgenerator/abstracts/AbstractEditDialog.fxml
New file
@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.URL?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<BorderPane style="-fx-border-color: rgb(184, 184, 184); -fx-border-width: 1;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatimfx.common.abstracts.AbstractEditDialogController">
   <top>
      <HBox onMouseDragged="#mouseDraggedTitleBar" onMousePressed="#mousePressedTitleBar" styleClass="title-bar" BorderPane.alignment="CENTER">
         <children>
            <HBox prefWidth="200.0" HBox.hgrow="ALWAYS" />
            <HBox alignment="CENTER_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS">
               <children>
                  <Button mnemonicParsing="false" onMouseClicked="#minimize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/min-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onMouseClicked="#maximize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/max-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#close" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/close-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
               </children></HBox>
         </children>
         <padding>
            <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
         </padding>
      </HBox>
   </top>
   <center>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <HBox alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="50.0" prefWidth="200.0" styleClass="banner">
               <children>
                  <Text fx:id="title" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="TITRE DE LA FENETRE ICI">
                     <font>
                        <Font name="Arial Bold" size="16.0" />
                     </font>
                  </Text>
               </children>
            </HBox>
            <BorderPane fx:id="formPanel">
               <center>
                  <VBox BorderPane.alignment="CENTER">
                     <padding>
                        <Insets bottom="20.0" left="47.0" right="47.0" top="20.0" />
                     </padding>
                     <children>
                        <VBox fx:id="formContainer" style="-fx-background-color: #F8F8F8; -fx-border-color: #E9E9E9; -fx-border-width: 1;" />
                     </children>
                  </VBox>
               </center></BorderPane>
            <HBox fx:id="bottomContainer" alignment="TOP_RIGHT" prefHeight="50.0" spacing="5.0">
               <children>
                  <Button fx:id="cancelButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-border-color: #9d9fa2; -fx-background-radius: 0;" text="Annuler" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
                  <Button fx:id="editButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #31a19a; -fx-cursor: pointer; -fx-background-radius: 0;" text="Enregistrer" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
               </children>
               <padding>
                  <Insets left="47.0" right="47.0" />
               </padding>
            </HBox>
         </children>
      </VBox>
   </center>
   <stylesheets>
      <URL value="@../../../../styles/title-bar.css" />
      <URL value="@../../../../styles/main-style.css" />
   </stylesheets>
</BorderPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/abstracts/AbstractEditValidateDialog.fxml
New file
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.URL?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<BorderPane prefHeight="571.0" prefWidth="657.0" style="-fx-border-color: rgb(184, 184, 184); -fx-border-width: 1;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatimfx.common.abstracts.AbstractSelfEditValidateDialogController">
   <top>
      <HBox onMouseDragged="#mouseDraggedTitleBar" onMousePressed="#mousePressedTitleBar" styleClass="title-bar" BorderPane.alignment="CENTER">
         <children>
            <HBox prefWidth="200.0" HBox.hgrow="ALWAYS" />
            <HBox alignment="CENTER_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS">
               <children>
                  <Button mnemonicParsing="false" onAction="#min" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/min-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#max" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/max-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#close" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/close-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
               </children></HBox>
         </children>
         <padding>
            <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
         </padding>
      </HBox>
   </top>
   <center>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <HBox alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="50.0" prefWidth="200.0" styleClass="banner">
               <children>
                  <Text fx:id="title" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="TITRE DE LA FENETRE ICI">
                     <font>
                        <Font name="Arial Bold" size="16.0" />
                     </font>
                  </Text>
               </children>
            </HBox>
            <BorderPane fx:id="formPanel" VBox.vgrow="ALWAYS">
               <center>
                  <VBox prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER">
                     <padding>
                        <Insets bottom="20.0" left="47.0" right="47.0" top="20.0" />
                     </padding>
                     <children>
                        <ScrollPane fitToHeight="true" fitToWidth="true" prefHeight="381.0" prefWidth="310.0" VBox.vgrow="ALWAYS">
                           <content>
                              <VBox fx:id="formContainer" style="-fx-background-color: #F8F8F8; -fx-border-color: #E9E9E9; -fx-border-width: 1;" />
                           </content>
                        </ScrollPane>
                     </children>
                  </VBox>
               </center></BorderPane>
            <HBox fx:id="bottomContainer" alignment="TOP_RIGHT" prefHeight="50.0" spacing="5.0">
               <children>
                  <Button fx:id="cancelButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-border-color: #9d9fa2; -fx-background-radius: 0;" text="Annuler" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
                  <Button fx:id="editButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #31a19a; -fx-cursor: pointer; -fx-background-radius: 0;" text="Enregistrerr" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
               </children>
               <padding>
                  <Insets left="47.0" right="47.0" />
               </padding>
            </HBox>
         </children>
      </VBox>
   </center>
   <stylesheets>
      <URL value="@../../../../styles/main-style.css" />
      <URL value="@../../../../styles/title-bar.css" />
   </stylesheets>
</BorderPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/abstracts/AbstractMainDialog.fxml
New file
@@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.URL?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onMouseDragged="#mouseDraggedTitleBar" onMousePressed="#mousePressedTitleBar" prefHeight="678.0" prefWidth="1120.0" style="-fx-border-color: rgb(184, 184, 184); -fx-border-width: 1;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatimfx.common.abstracts.AbstractMainDialogController">
   <center>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <HBox alignment="CENTER" prefHeight="65.0" prefWidth="1024.0" styleClass="banner">
               <children>
                  <Text fx:id="title" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="TITRE">
                     <font>
                        <Font name="Arial Bold" size="16.0" />
                     </font>
                  </Text>
               </children>
            </HBox>
            <VBox spacing="5.0" style="-fx-background-color: #44507;" VBox.vgrow="ALWAYS">
               <children>
                  <TitledPane collapsible="false" prefHeight="61.0" prefWidth="1223.0" text="Recherche">
                     <content>
                        <BorderPane fx:id="searchPane" prefHeight="43.0" prefWidth="1219.0" style="-fx-background-color: rgb(246, 247, 249);">
                           <right>
                              <HBox spacing="5.0" BorderPane.alignment="CENTER_LEFT">
                                 <BorderPane.margin>
                                    <Insets />
                                 </BorderPane.margin>
                                 <children>
                                    <Button fx:id="btnSearch" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="search">
                                       <graphic>
                                          <ImageView fitHeight="20.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/Recherche.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnReset" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="search">
                                       <graphic>
                                          <ImageView fitHeight="20.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/Reset.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <CheckBox fx:id="advancedCheckBox" alignment="CENTER" maxHeight="-Infinity" maxWidth="1.7976931348623157E308" mnemonicParsing="false" prefHeight="25.0" text="Options avancées" />
                                 </children>
                                 <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                 </padding>
                              </HBox>
                           </right>
                           <center>
                              <VBox BorderPane.alignment="CENTER">
                                 <children>
                                    <VBox fx:id="normalSearchContainer" prefHeight="200.0" prefWidth="100.0">
                                       <padding>
                                          <Insets right="50.0" />
                                       </padding>
                                    </VBox>
                                    <VBox fx:id="advancedSearchContainer" prefHeight="200.0" prefWidth="100.0">
                                       <padding>
                                          <Insets right="50.0" />
                                       </padding>
                                    </VBox>
                                 </children>
                              </VBox>
                           </center>
                        </BorderPane>
                     </content>
                  </TitledPane>
                  <VBox prefHeight="200.0" prefWidth="100.0" spacing="3.0" style="-fx-background-color: rgb(246, 247, 249);" VBox.vgrow="ALWAYS">
                     <children>
                        <HBox fx:id="buttonContainer" alignment="CENTER_LEFT" spacing="2.0">
                           <children>
                              <HBox fx:id="buttonContainer" alignment="BOTTOM_LEFT" spacing="2.0">
                                 <children>
                                    <Button fx:id="btnAdd" mnemonicParsing="false" onAction="#onAddDialog" style="-fx-background-color: #31a19a; -fx-cursor: pointer; -fx-background-radius: 8 0 0 0; -fx-border-radius: 8 0 0 0;" textFill="#ebf0ee">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/add.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnEdit" mnemonicParsing="false" onAction="#onEditDialog" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/edit.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnPrint" mnemonicParsing="false" onAction="#onEditDialog" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/print.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnDelete" mnemonicParsing="false" onAction="#removeElement" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/trash.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                 </children>
                              </HBox>
                              <HBox alignment="CENTER_RIGHT" HBox.hgrow="ALWAYS">
                                 <children>
                                    <Button fx:id="btnImport" mnemonicParsing="false" onAction="#removeElement" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/trash.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                 </children>
                              </HBox>
                           </children>
                           <opaqueInsets>
                              <Insets />
                           </opaqueInsets>
                        </HBox>
                        <VBox prefHeight="200.0" prefWidth="100.0" VBox.vgrow="ALWAYS">
                           <children>
                              <TableView fx:id="elementTable" VBox.vgrow="ALWAYS">
                                 <columnResizePolicy>
                                    <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                                 </columnResizePolicy>
                              </TableView>
                              <HBox alignment="CENTER_LEFT" spacing="30.0" style="-fx-background-color: rgb(206, 206, 206);">
                                 <children>
                                    <HBox alignment="CENTER" spacing="15.0">
                                       <children>
                                          <HBox alignment="CENTER">
                                             <children>
                                                <Button fx:id="btnNext" mnemonicParsing="false" style="-fx-background-color: transparent; -fx-padding: 1;">
                                                   <graphic>
                                                      <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                                         <image>
                                                            <Image url="@../../../../images/next.png" />
                                                         </image>
                                                      </ImageView>
                                                   </graphic>
                                                </Button>
                                                <Label text="suivant">
                                                   <font>
                                                      <Font size="14.0" />
                                                   </font>
                                                </Label>
                                             </children>
                                          </HBox>
                                          <HBox alignment="CENTER">
                                             <children>
                                                <Button fx:id="btnPrevious" mnemonicParsing="false" onAction="#previousPage" style="-fx-background-color: transparent; -fx-padding: 1;">
                                                   <graphic>
                                                      <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                                         <image>
                                                            <Image url="@../../../../images/previous.png" />
                                                         </image>
                                                      </ImageView>
                                                   </graphic>
                                                </Button>
                                                <Label text="precedent">
                                                   <font>
                                                      <Font size="14.0" />
                                                   </font>
                                                </Label>
                                             </children>
                                          </HBox>
                                          <Label fx:id="paginationNumberInfo" text="(0/0)">
                                             <font>
                                                <Font size="14.0" />
                                             </font>
                                          </Label>
                                       </children>
                                    </HBox>
                                 </children>
                                 <padding>
                                    <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
                                 </padding>
                              </HBox>
                           </children>
                        </VBox>
                     </children>
                  </VBox>
                  <HBox alignment="CENTER_RIGHT">
                     <children>
                        <Button fx:id="btnClose" mnemonicParsing="false" prefHeight="27.0" prefWidth="90.0" style="-fx-background-color: rgb(202, 202, 202); -fx-cursor: pointer; -fx-border-color: #9d9fa2;" text="Quitter" textFill="#5d5d5d" />
                     </children>
                  </HBox>
               </children>
               <padding>
                  <Insets bottom="30.0" left="30.0" right="30.0" top="30.0" />
               </padding>
            </VBox>
         </children>
      </VBox>
   </center>
   <top>
      <HBox styleClass="title-bar" BorderPane.alignment="CENTER">
         <padding>
            <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
         </padding>
         <children>
            <HBox prefWidth="200.0" HBox.hgrow="ALWAYS" />
            <HBox alignment="CENTER_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS">
               <children>
                  <Button mnemonicParsing="false" onMouseClicked="#minimize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/min-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onMouseClicked="#maximize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/max-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#close" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/close-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
               </children>
            </HBox>
         </children>
      </HBox>
   </top>
   <stylesheets>
      <URL value="@../../../../styles/main-style.css" />
      <URL value="@../../../../styles/title-bar.css" />
   </stylesheets>
</BorderPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/main.fxml
New file
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="533.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.MainController">
   <children>
      <VBox fx:id="mainContainer" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css">
               <children>
                  <HBox alignment="CENTER">
                     <children>
                        <ImageView fitHeight="48.0" fitWidth="190.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/icone_ins.png" />
                           </image>
                        </ImageView>
                     </children>
                     <padding>
                        <Insets right="30.0" />
                     </padding>
                  </HBox>
                  <HBox fx:id="myMenuBar">
                     <children>
                        <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Fichier">
                           <graphic>
                              <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                 <image>
                                    <Image url="@../../../../images/Fichier.png" />
                                 </image>
                              </ImageView>
                           </graphic>
                           <items>
                              <MenuItem mnemonicParsing="false" onAction="#quit" text="Quitter" />
                           </items>
                        </MenuButton>
                        <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Paramètres">
                           <graphic>
                              <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                 <image>
                                    <Image url="@../../../../images/143-02.png" />
                                 </image>
                              </ImageView>
                           </graphic>
                           <items>
                              <Menu mnemonicParsing="false" text="TypeFichier">
                                 <items>
                                    <MenuItem fx:id="validateurMenuItem" mnemonicParsing="false" onAction="#openImportTypeFichierDialog" text="Importer" />
                                    <MenuItem fx:id="typeFichMenuItem" mnemonicParsing="false" onAction="#openTypeFichierDialog" text="Consulter" />
                                 </items>
                              </Menu>
                              <MenuItem fx:id="configMenuItem" mnemonicParsing="false" onAction="#openConfigDialog" text="Configuration des repertoires" />
                              <MenuItem fx:id="validateurTypeFichMenuItem" mnemonicParsing="false" onAction="#openValidateurFichierDialog" text="Consulter les validateurs des typeFichier" />
                              <MenuItem fx:id="fichierValidationMenuItem1" mnemonicParsing="false" onAction="#openFichierValidationDialog" text="Générer les fichiers de validation" />
                           </items>
                        </MenuButton>
                        <MenuButton contentDisplay="TOP" disable="true" mnemonicParsing="false" text="Aide">
                           <graphic>
                              <ImageView disable="true" fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                 <image>
                                    <Image url="@../../../../images/143-05.png" />
                                 </image>
                              </ImageView>
                           </graphic>
                           <items>
                              <MenuItem mnemonicParsing="false" text="A propos" />
                           </items>
                        </MenuButton>
                     </children>
                  </HBox>
               </children>
               <padding>
                  <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
               </padding>
            </HBox>
            <HBox spacing="10.0" style="-fx-background-color: #fff; -fx-border-color: #dedfe0;">
               <padding>
                  <Insets bottom="5.0" left="15.0" right="5.0" top="5.0" />
               </padding>
               <children>
                  <HBox prefWidth="200.0" spacing="10.0">
                     <children>
                        <Button fx:id="btnGenValidateur" mnemonicParsing="false" onAction="#openFichierValidationDialog" styleClass="receive">
                           <cursor>
                              <Cursor fx:constant="HAND" />
                           </cursor>
                        </Button>
                     </children>
                  </HBox>
                  <HBox alignment="TOP_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS" />
               </children>
            </HBox>
            <VBox prefHeight="437.0" prefWidth="928.0" style="-fx-background-color: transparent;" styleClass="main_screen" stylesheets="@../../../../styles/main_screen.css" VBox.vgrow="ALWAYS" />
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/main2.fxml
New file
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.MainController">
   <children>
      <HBox style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css">
         <children>
            <HBox alignment="CENTER">
               <children>
                  <ImageView fitHeight="48.0" fitWidth="190.0" pickOnBounds="true" preserveRatio="true">
                     <image>
                        <Image url="@../../../../images/icone_ins.png" />
                     </image>
                  </ImageView>
               </children>
               <padding>
                  <Insets right="30.0" />
               </padding>
            </HBox>
            <HBox fx:id="myMenuBar">
               <children>
                  <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Fichier">
                     <graphic>
                        <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../../../../../importation-validation-data/src/main/resources/images/Fichier.png" />
                           </image>
                        </ImageView>
                     </graphic>
                     <items>
                        <MenuItem mnemonicParsing="false" onAction="#quit" text="Quitter" />
                     </items>
                  </MenuButton>
                  <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Paramètres">
                     <graphic>
                        <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../../../../../importation-validation-data/src/main/resources/images/143-02.png" />
                           </image>
                        </ImageView>
                     </graphic>
                     <items>
                        <Menu mnemonicParsing="false" text="TypeFichier">
                           <items>
                              <MenuItem fx:id="validateurMenuItem" mnemonicParsing="false" onAction="#openImportTypeFichierDialog" text="Importer" />
                              <MenuItem fx:id="typeFichMenuItem" mnemonicParsing="false" onAction="#openTypeFichierDialog" text="Consulter" />
                           </items>
                        </Menu>
                        <MenuItem fx:id="configMenuItem" mnemonicParsing="false" onAction="#openConfigDialog" text="Configuration des repertoires" />
                        <MenuItem fx:id="validateurTypeFichMenuItem" mnemonicParsing="false" onAction="#openValidateurFichierDialog" text="Consulter les validateurs des typeFichier" />
                        <MenuItem fx:id="fichierValidationMenuItem1" mnemonicParsing="false" onAction="#openFichierValidationDialog" text="Générer les fichiers de validation" />
                     </items>
                  </MenuButton>
                  <MenuButton contentDisplay="TOP" disable="true" mnemonicParsing="false" text="Aide">
                     <graphic>
                        <ImageView disable="true" fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../../../../../importation-validation-data/src/main/resources/images/143-05.png" />
                           </image>
                        </ImageView>
                     </graphic>
                     <items>
                        <MenuItem mnemonicParsing="false" text="A propos" />
                     </items>
                  </MenuButton>
               </children>
            </HBox>
         </children>
         <padding>
            <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
         </padding>
      </HBox>
      <HBox spacing="10.0" style="-fx-background-color: #fff; -fx-border-color: #dedfe0;">
         <padding>
            <Insets bottom="5.0" left="15.0" right="5.0" top="5.0" />
         </padding>
         <children>
            <HBox prefWidth="200.0" spacing="10.0">
               <children>
                  <Button fx:id="btnGenValidateur" mnemonicParsing="false" onAction="#openFichierValidationDialog" styleClass="receive">
                     <cursor>
                        <Cursor fx:constant="HAND" />
                     </cursor>
                  </Button>
               </children>
            </HBox>
            <HBox alignment="TOP_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS" />
         </children>
      </HBox>
      <VBox prefHeight="437.0" prefWidth="928.0" style="-fx-background-color: transparent;" styleClass="cover" stylesheets="@../../../../styles/style.css" />
   </children>
</VBox>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/main_1.fxml
New file
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="928.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.MainController">
   <children>
      <VBox fx:id="mainContainer" prefHeight="200.0" prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <MenuBar>
              <menus>
                  <Menu mnemonicParsing="false" text="Fichier">
                    <items>
                      <MenuItem mnemonicParsing="false" onAction="#quit" text="Quitter" />
                    </items>
                  </Menu>
                  <Menu mnemonicParsing="false" text="Paramètres">
                    <items>
                        <Menu mnemonicParsing="false" text="TypeFichier">
                          <items>
                              <MenuItem fx:id="typeFichMenuItem" mnemonicParsing="false" onAction="#openTypeFichierDialog" text="Consulter" />
                              <MenuItem fx:id="validateurMenuItem" mnemonicParsing="false" onAction="#openImportTypeFichierDialog" text="Importer" />
                          </items>
                        </Menu>
                      <MenuItem fx:id="configMenuItem" mnemonicParsing="false" onAction="#openConfigDialog" text="Configuration des repertoires" />
                        <MenuItem fx:id="validateurTypeFichMenuItem" mnemonicParsing="false" onAction="#openValidateurFichierDialog" text="Consulter les validateurs des typeFichier" />
                        <MenuItem fx:id="fichierValidationMenuItem1" mnemonicParsing="false" onAction="#openFichierValidationDialog" text="Générer les fichiers de validation" />
                    </items>
                  </Menu>
                  <Menu mnemonicParsing="false" text="Aide">
                    <items>
                      <MenuItem mnemonicParsing="false" text="Afficher l'aide" />
                        <MenuItem mnemonicParsing="false" text="A propos de le l'application" />
                    </items>
                  </Menu>
              </menus>
            </MenuBar>
            <VBox prefHeight="437.0" prefWidth="928.0" styleClass="cover" stylesheets="@../../../../styles/style.css" VBox.vgrow="ALWAYS" />
                           </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/TypeFichierAdvancedSearchForm.fxml
New file
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="30.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.TypeFichierAdvancedSearchFormController">
   <children>
      <VBox prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox layoutX="10.0" layoutY="45.0" spacing="5.0">
               <children>
                  <Label alignment="CENTER_RIGHT" minWidth="42.0" prefHeight="17.0" prefWidth="57.0" text="participant">
                     <HBox.margin>
                        <Insets />
                     </HBox.margin></Label>
                  <TextField fx:id="participant" prefHeight="25.0" prefWidth="80.0" styleClass="square-border" stylesheets="@../../../../../styles/style.css" />
               </children>
            </HBox>
            <HBox spacing="5.0">
               <children>
                  <Label alignment="CENTER_RIGHT" prefWidth="57.0" text="Libelle" />
                  <TextField fx:id="libelle" styleClass="square-border" stylesheets="@../../../../../styles/style.css" HBox.hgrow="ALWAYS" />
               </children>
            </HBox>
         </children>
      </VBox>
   </children>
   <padding>
      <Insets top="10.0" />
   </padding>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/TypeFichierSearchForm.fxml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="13.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.TypeFichierSearchFormController">
   <children>
      <VBox layoutX="10.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox spacing="5.0">
               <children>
                  <Label alignment="CENTER_RIGHT" minWidth="42.0" prefWidth="57.0" text="Code" />
                  <TextField fx:id="code" prefWidth="80.0" styleClass="square-border" stylesheets="@../../../../../styles/style.css" />
               </children>
            </HBox>
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/ValidateurFichierAdvancedSearchForm.fxml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="30.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.ValidateurFichierAdvancedSearchFormController">
   <children>
      <VBox prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox spacing="10.0">
               <children>
                  <Label alignment="CENTER_RIGHT" prefHeight="17.0" prefWidth="96.0" text="Nombre Position" />
                  <TextField fx:id="nombrePosition" prefHeight="25.0" prefWidth="71.0" styleClass="square-border" stylesheets="@../../../../../styles/style.css" />
               </children>
            </HBox>
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/controller/search/ValidateurFichierSearchForm.fxml
New file
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.megatimfx.common.customcontrols.AbstractSelectionItem?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="13.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.ValidateurFichierSearchFormController">
    <children>
        <VBox layoutX="10.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <HBox alignment="CENTER_LEFT" prefWidth="96.0" spacing="10.0">
                    <children>
                        <Label alignment="CENTER_RIGHT" minWidth="76.0" prefHeight="17.0" prefWidth="96.0" text="Type de fichier" />
                        <AbstractSelectionItem fx:id="typeFichierAbstractSelectItem" minWidth="330.0" prefHeight="27.0" prefWidth="432.0" />
                    </children>
               <VBox.margin>
                  <Insets bottom="10.0" />
               </VBox.margin>
                </HBox>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/ConfigEditForm.fxml
New file
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="87.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.ConfigEditFormController">
    <children>
        <VBox prefHeight="400.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <TitledPane collapsible="false" text="Informations sur les repertoires">
                    <content>
                        <VBox spacing="5.0">
                            <children>
                                <HBox alignment="CENTER_LEFT" layoutX="25.0" layoutY="115.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Repertoire de stockage des validateurs XML" />
                                        <TextField fx:id="outputDir" prefHeight="25.0" prefWidth="336.0" styleClass="square-border" stylesheets="@../../../../styles/style.css">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                        <Button fx:id="outButton" mnemonicParsing="false" onMousePressed="#outButtonOnClicked" prefHeight="25.0" prefWidth="25.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" text="...">
                                            <HBox.margin>
                                                <Insets right="10.0" />
                                            </HBox.margin>
                                 <font>
                                    <Font name="System Bold" size="12.0" />
                                 </font>
                                        </Button>
                                    </children>
                                </HBox>
                            </children>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/FichierValidationEditForm.fxml
New file
@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.megatimfx.common.customcontrols.AbstractSelectionItem?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="249.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.FichierValidationEditFormController">
    <children>
        <VBox spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <padding>
                <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
            </padding>
            <children>
                <TitledPane collapsible="false" text="Informations sur le fichier de validation">
                    <content>
                        <VBox spacing="5.0">
                            <children>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Type de fichier" />
                                        <AbstractSelectionItem fx:id="typeFichierAbstractSelectItem" minWidth="330.0" prefWidth="327.0">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin></AbstractSelectionItem>
                                    </children>
                                </HBox>
                        <HBox layoutX="25.0" layoutY="87.0" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" prefWidth="205.0" text="Protéger fichier de validation ?" />
                              <CheckBox fx:id="isProtegeCheckBox" layoutX="235.0" layoutY="10.0" mnemonicParsing="false" text="Oui">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </CheckBox>
                           </children>
                        </HBox>
                        <HBox prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="TOP_RIGHT" prefWidth="205.0" text="Clé de cryptage" />
                              <StackPane minWidth="328.0" prefHeight="150.0" prefWidth="200.0">
                                 <children>
                                    <TextField fx:id="showKeyToEncrypt" prefWidth="328.0" style="-fx-background-radius: 0%;" />
                                    <PasswordField fx:id="keyToEncryptField" />
                                    <ImageView fx:id="imageView" fitHeight="15.0" fitWidth="15.0" onMousePressed="#eyeOnMousePressed" pickOnBounds="true" preserveRatio="true" StackPane.alignment="CENTER_RIGHT">
                                       <StackPane.margin>
                                          <Insets right="5.0" />
                                       </StackPane.margin>
                                       <image>
                                          <Image url="@../../../../images/oeil.png" />
                                       </image>
                                    </ImageView>
                                 </children>
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </StackPane>
                           </children>
                        </HBox>
                        <HBox layoutX="25.0" layoutY="57.0" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" prefWidth="205.0" text="Confirmation de la clé" />
                              <PasswordField fx:id="keyConfirmationField" minWidth="328.0">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </PasswordField>
                           </children>
                        </HBox>
                        <HBox layoutX="25.0" layoutY="117.0" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" prefWidth="205.0" text="Valider nom du fichier ?" />
                              <CheckBox fx:id="validateFileNameCheckBox" layoutX="235.0" layoutY="10.0" mnemonicParsing="false" text="Oui">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </CheckBox>
                           </children>
                        </HBox>
<!--                                <HBox alignment="CENTER_LEFT">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Repertoire de sortie" />
                                        <TextField fx:id="OutDirTextField" prefHeight="25.0" prefWidth="336.0">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                        <Button fx:id="OutButton" mnemonicParsing="false" onMousePressed="#outButtonOnClicked" prefHeight="25.0" prefWidth="31.0" text="...">
                                            <HBox.margin>
                                                <Insets right="10.0" />
                                            </HBox.margin>
                                        </Button>
                                    </children>
                                </HBox>-->
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
                <TitledPane fx:id="fileNameTitledPane" collapsible="false" text="Informations sur le nom du fichier Ã  valider">
                    <content>
                        <VBox spacing="5.0">
                            <children>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Format de la date" />
                                         <ComboBox fx:id="formatDate" prefWidth="327.0" style="-fx-background-radius: 0%;">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin></ComboBox>
                                    </children>
                                </HBox>
<!--                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Extension du fichier" />
                              <ComboBox fx:id="extensionFichier" prefWidth="327.0" style="-fx-background-radius: 0%;">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </ComboBox>
                                    </children>
                                </HBox>-->
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Valeur maximale des tierces" />
                                        <TextField fx:id="MaxValueTierceTextField" prefHeight="25.0" prefWidth="124.0" style="-fx-background-radius: 0%;">
                                            <HBox.margin>
                                                <Insets left="10.0" />
                                            </HBox.margin>
                                        </TextField>
                                    </children>
                                </HBox>
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/ImportTypeFichierEditForm.fxml
New file
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="182.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.ImportTypeFichierEditFormController">
    <children>
        <VBox layoutX="-6.0" layoutY="7.0" spacing="5.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="-6.0" AnchorPane.rightAnchor="6.0" AnchorPane.topAnchor="7.0">
            <padding>
                <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
            </padding>
            <children>
                <TitledPane collapsible="false" text="Informations sur le fichier Ã  importer">
                    <content>
                        <VBox spacing="5.0">
                            <children>
<!--                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Format du fichier" />
                                        <ComboBox fx:id="formatFichier" prefWidth="150.0" />
                                    </children>
                                </HBox>-->
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Délimiteur de ligne" />
                                        <ComboBox fx:id="delimiteurLigne" prefHeight="25.0" prefWidth="328.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Délimiteur colonne" />
                                        <ComboBox fx:id="delimiteurColonne" prefHeight="25.0" prefWidth="328.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Fichier Ã  importer" />
                                        <TextField fx:id="fileToImportTextField" prefHeight="25.0" prefWidth="336.0" styleClass="square-border" stylesheets="@../../../../styles/style.css">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                        <Button fx:id="importButton" mnemonicParsing="false" onMousePressed="#importButtonOnClicked" prefHeight="25.0" prefWidth="31.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" text="...">
                                            <HBox.margin>
                                                <Insets right="10.0" />
                                            </HBox.margin>
                                 <font>
                                    <Font name="System Bold" size="12.0" />
                                 </font>
                                        </Button>
                                    </children>
                                </HBox>
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/StructureLigneEditForm.fxml
New file
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="394.0" prefWidth="586.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.StructureLigneEditFormController">
   <children>
      <VBox prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <TitledPane collapsible="false" text="Informations générales sur la structure de la ligne" VBox.vgrow="ALWAYS">
               <content>
                  <VBox fx:id="formFieldContainer" spacing="5.0">
                     <children>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Position" />
                              <ComboBox fx:id="positionComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Code" />
                              <TextField fx:id="codeTextField" prefWidth="100.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Désignation" />
                              <TextField fx:id="designationTextField" prefWidth="280.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Type de donnée" />
                              <ComboBox fx:id="typeDonneeComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Taille" />
                              <TextField fx:id="tailleTextField" prefWidth="100.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" layoutX="25.0" layoutY="145.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Taille partie décimale" />
                              <TextField fx:id="taillePartieDecimalTextField" prefWidth="100.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox fx:id="dateFormatContainer" alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Format" />
                               <ComboBox fx:id="formatDateComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                              <!--<TextField fx:id="formatDateTextField" prefWidth="100.0" />-->
                           </children>
                        </HBox>
                        <HBox fx:id="dateFormatContainer1" alignment="CENTER_LEFT" layoutX="25.0" layoutY="175.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Séparateur de date" />
                              <ComboBox fx:id="delimiteurDateComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox fx:id="dateFormatContainer11" alignment="CENTER_LEFT" layoutX="25.0" layoutY="205.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefHeight="17.0" prefWidth="138.0" text="Séparateur de décimal" />
                              <ComboBox fx:id="delimiteurDecimalComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                     </children>
                     <padding>
                        <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                     </padding>
                  </VBox>
               </content>
            </TitledPane>
         </children>
         <padding>
            <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
         </padding>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/TypeFichierEditForm.fxml
New file
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="182.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.TypeFichierEditFormController">
    <children>
        <VBox layoutX="-6.0" layoutY="7.0" spacing="5.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="-6.0" AnchorPane.rightAnchor="6.0" AnchorPane.topAnchor="7.0">
            <padding>
                <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
            </padding>
            <children>
                <TitledPane collapsible="false" text="Informations générales sur le type fichier">
                    <content>
                        <VBox spacing="5.0">
                            <children>
<!--                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Format du fichier" />
                                        <ComboBox fx:id="formatFichier" prefWidth="150.0" />
                                    </children>
                                </HBox>-->
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Code TypeFichier" />
                              <TextField fx:id="codeTextField" minWidth="328.0" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Libellé" />
                              <TextField fx:id="libelleTextField" minWidth="328.0" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Code Participant" />
                                        <TextField fx:id="codeParticipantTextField" maxWidth="328.0" minWidth="328.0" prefHeight="25.0" prefWidth="336.0" styleClass="square-border" stylesheets="@../../../../styles/style.css">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                    </children>
                                </HBox>
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/src/main/resources/com/megatim/fdxgenerator/forms/ValidateurFichierEditForm.fxml
New file
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.megatimfx.common.customcontrols.AbstractNestedEntityTable?>
<?import com.megatimfx.common.customcontrols.AbstractSelectionItem?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="543.0" prefWidth="650.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.ValidateurFichierEditFormController">
   <children>
      <VBox spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <padding>
            <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
         </padding>
         <children>
            <TitledPane collapsible="false" text="Informations sur le validateur">
               <content>
                  <VBox spacing="5.0">
                     <children>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" text="Type de fichier" />
                              <AbstractSelectionItem fx:id="typeFichierAbstractSelectItem" minWidth="330.0" prefWidth="330.0" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-font-size: 12; -fx-text-fill: black;" text="Format du fichier de données" />
                              <ComboBox fx:id="dataTypeComboBox" minHeight="25.0" minWidth="300.0" prefHeight="25.0" prefWidth="300.0" style="-fx-background-radius: 0%;" />
                           </children>
                        </HBox>
                        <HBox fx:id="delimiteurLigneHBox" alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-font-size: 12; -fx-text-fill: black;" text="Délimiteur de ligne" />
                              <ComboBox fx:id="delimiteurLigne" minHeight="25.0" minWidth="300.0" prefHeight="25.0" prefWidth="300.0" style="-fx-background-radius: 0%;" />
                           </children>
                        </HBox>
                        <HBox fx:id="delimiteurColonneHBox" alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-text-fill: black;" text="Délimiteur colonne" />
                              <ComboBox fx:id="delimiteurColonne" minHeight="25.0" minWidth="300.0" prefHeight="25.0" prefWidth="300.0" style="-fx-background-radius: 0%;" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" text="Nombre de position par ligne" />
                              <TextField fx:id="nombrePositionTextField" prefWidth="50.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox prefHeight="43.0" prefWidth="637.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-text-fill: black;" text="Fichier contient ligne d'entête ?" />
                              <CheckBox fx:id="headerPresentCheckbox" minHeight="25.0" mnemonicParsing="false" prefHeight="25.0" text="Oui" />
                           </children>
                        </HBox>
                     </children>
                     <padding>
                        <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                     </padding>
                  </VBox>
               </content>
            </TitledPane>
            <TitledPane animated="false" collapsible="false" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Structure des lignes" VBox.vgrow="ALWAYS">
               <content>
                  <VBox prefHeight="200.0" prefWidth="100.0" spacing="5.0">
                     <children>
                        <HBox alignment="CENTER_RIGHT">
                           <children>
                              <CheckBox fx:id="saisieStructureLigneChecBox" mnemonicParsing="false" styleClass="square-border" stylesheets="@../../../../styles/style.css" text="Saisir la structure des ligne" />
                           </children>
                        </HBox>
                        <AbstractNestedEntityTable fx:id="structureLigneAbstractTable" prefHeight="252.0" prefWidth="526.0" VBox.vgrow="ALWAYS" />
                     </children>
                     <padding>
                        <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                     </padding></VBox>
               </content>
            </TitledPane>
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/src/main/resources/images/143-01.png
fdx_generator/src/main/resources/images/143-02.png
fdx_generator/src/main/resources/images/143-03.png
fdx_generator/src/main/resources/images/143-04.png
fdx_generator/src/main/resources/images/143-05.png
fdx_generator/src/main/resources/images/Accuueil_Generator.jpg
fdx_generator/src/main/resources/images/Fichier.png
fdx_generator/src/main/resources/images/Motif.png
fdx_generator/src/main/resources/images/Recherche.png
fdx_generator/src/main/resources/images/Reset.png
fdx_generator/src/main/resources/images/add.png
fdx_generator/src/main/resources/images/close-icon.png
fdx_generator/src/main/resources/images/edit.png
fdx_generator/src/main/resources/images/generate.png
fdx_generator/src/main/resources/images/icone_ins.png
fdx_generator/src/main/resources/images/max-icon.png
fdx_generator/src/main/resources/images/min-icon.png
fdx_generator/src/main/resources/images/next.png
fdx_generator/src/main/resources/images/oeil.png
fdx_generator/src/main/resources/images/previous.png
fdx_generator/src/main/resources/images/trash.png
fdx_generator/src/main/resources/log4j.properties
New file
@@ -0,0 +1,12 @@
# Root logger option
log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=generateur.log
log4j.appender.file.MaxFileSize=10GB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Log everything. Good for troubleshooting
log4j.logger.org.hibernate=FATAL
fdx_generator/src/main/resources/styles/main-style.css
New file
@@ -0,0 +1,251 @@
/*
 * Empty Stylesheet file.
 */
.banner {
    -fx-background-image: url(../images/Motif.png);
    -fx-background-position: center center;
    -fx-background-repeat: stretch;
    -fx-background-size: cover;
}
.mainFxmlClass {
}
.table-view {
    -fx-background-color: transparent;
    -fx-border-color: rgb(209, 211, 212);
    -fx-padding: 0;
}
.table-view .column-header,
.table-view .column-header-background .filler {
    -fx-background-color: #44507B;
}
.column-header {
}
.table-view .column-header-background{
    -fx-padding: 0;
}
.table-view .column-header {
    -fx-border-color: rgb(209, 211, 212);
}
.table-view .column-header .label{
    -fx-text-fill: white;
    -fx-font-weight: bold;
    -fx-alignment: CENTER;
    -fx-padding: 5;
}
.table-cell {
    -fx-border-width: 0 1 0 1;
    -fx-border-color: rgb(230, 231, 232);
    -fx-padding: 5;
    -fx-alignment: CENTER;
}
.table-row-cell{
    -fx-background-color: #ffffff;
}
.table-row-cell:odd {
    -fx-background-color: rgb(239, 239, 240);
}
.table-row-cell:selected {
    -fx-background-color: rgba(214, 236, 219, 1);
    -fx-background-insets: 0;
    -fx-background-radius: 0;
}
.table-row-cell:selected .text {
    -fx-fill: #000;
}
/*
* Style for TextField
*/
.text-field {
    -fx-background-color: #F6F7F9;
    -fx-border-color: #30AFDC;
    -fx-border-radius: 3px;
    -fx-background-radius: 3px;
}
/*
Tab Pane style
*/
.tab-pane > .tab-header-area > .headers-region > .tab:top {
    -fx-border-color: #a3a7a8;
    -fx-border-radius: 5 5 0 0;
    -fx-background-color: white;
    -fx-pref-height: 40px;
    -fx-background-insets: 0;
}
.tab-pane > .tab-header-area > .headers-region > .tab:selected:top {
    -fx-border-color: #a3a7a8 #a3a7a8 #a3a7a8 #a3a7a8;
    -fx-border-width: 1 1 1 1;
    -fx-border-radius: 5 5 0 0;
    -fx-background-color: white;
    -fx-pref-height: 40px;
    -fx-background-insets: 0;
    -fx-border-insets: 0;
}
.tab-pane > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-label {
    -fx-alignment: CENTER;
    -fx-text-fill: #323232;
    -fx-font-weight: bold;
}
.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label {
    -fx-alignment: CENTER;
    -fx-text-fill: #323232;
    -fx-font-weight: bold;
}
.tab-pane > .tab-header-area > .tab-header-background {
    -fx-background-color: white;
    -fx-border-color: #a3a7a8;
    -fx-border-width: 0 0 1 0;
    -fx-background-insets: 0;
    -fx-pref-height: 45px;
}
/*
* Title pane style
*/
.titled-pane {
    -fx-border-color: rgba(199, 200, 202, 1);
    -fx-text-fill: rgba(255, 255, 255, 1);
}
.titled-pane > .title {
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-background-color: rgba(68, 80, 123, 1);
}
.titled-pane > .title .text {
}
/* #2 */
.titled-pane > .title > .text {
    -fx-font-size: 14px;
    -fx-background-color: rgba(114, 114, 116, 1);
}
/*
* Search buttons
*/
.search {
    -fx-background-color: rgba(220, 221, 223, 1);
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-text-fill: rgba(53, 52, 52, 1);
}
.search:hover {
    -fx-background-color: rgba(220, 221, 223, .8);
}
.search:cancel {
    -fx-text-fill: gray;
}
/* CHECKBOX */
.check-box {
    /* default properties */
    selected-box-color: rgba(255, 255, 255, 1);
    box-color: rgba(255, 255, 255, 1);
    mark-color: white;
}
.check-box .box {
    /* background color for selected checkbox */
    -fx-border-width: 1px;
    -fx-border-color: rgb(208, 208, 208);
}
.check-box:selected > .box {
    /* background color for selected checkbox */
    -fx-background-color: selected-box-color;
}
.check-box > .box {
    /* background color of unselected checkbox */
    -fx-background-color: box-color;
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
}
/* TEXTFIELD */
.text-field {
    -fx-background-color: rgba(208, 208, 208, 1);
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
    -fx-text-fill: rgba(98, 98, 100, 1);
    -fx-border-color: rgba(208, 208, 208, 1);
    -fx-border-width: 1;
}
.text-field:disabled {
    -fx-opacity: 0.8;
}
/* COMBOBOX */
/* The ListCell that shows the selected item in a non-editable ComboBox */
.combo-box,
.combo-box:focus,
.combo-box .list-cell {
    -fx-background-color: rgba(208, 208, 208, 1);
}
.combo-box .list-view .list-cell {
    -fx-background-color: rgba(255, 255, 255, 1);
}
/* The TextField that shows the selected item in an editable ComboBox */
.combo-box .text-input {
    -fx-background-color: rgba(208, 208, 208, 1);
}
.combo-box:disabled {
    -fx-opacity: 0.8;
}
/* Style the arrow button area */
.combo-box .arrow-button {
    -fx-background-color: rgba(255, 255, 255, 1);
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
    -fx-border-color: rgba(225, 225, 225, 1);
    -fx-border-width: 1;
}
.combo-box .arrow-button .arrow {
    -fx-background-color: rgba(162, 162, 162, 1);
}
/* Set the text color in the popup list for ComboBox to blue */
.combo-box-popup .list-view .list-cell {
    -fx-text-fill: rgba(98, 98, 100, 1);
}
/* Set the text color in the popup list for ComboBox to blue */
.combo-box-popup .list-view .list-cell:hover {
    -fx-text-fill: rgba(98, 98, 100, 1);
    -fx-background-color: rgba(214, 236, 219, 1);
}
fdx_generator/src/main/resources/styles/main_screen.css
New file
@@ -0,0 +1,246 @@
/*
 * Empty Stylesheet file.
 */
@font-face {
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Medium.ttf');
}
* {
    -fx-font-family: 'Roboto';
}
.main_screen {
    -fx-background-image: url('../images/Accuueil_Generator.jpg');
    -fx-background-position: center center;
    -fx-background-repeat: stretch;
    -fx-background-size: cover;
    -fx-border-color: #C5CFCE;
}
.dashboard {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Tableau_de_bord_1.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.dashboard:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Barre_outils_hover-03.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.receive {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/generate.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.receive:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/generate.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.update {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Modif-01-01x.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.update:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Modif-01-01.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.generate {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/fichiers_generesx.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.generate:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Barre_outils_hover-01.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.treatment {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/tache.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.treatment:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/tache_hover.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
/*
* Title pane style
*/
.titled-pane > .title {
    -fx-background-color: #C5D6E0;
    -fx-border-color: #C5D6E0;
}
.titled-pane > .title .text {
}
/* #2 */
.titled-pane > .title > .text {
    -fx-font-size: 14px;
}
/*
* Menu-bar style
*/
/*
.menu-item {
    -fx-border-color: #fff;
    -fx-margin: 0;
}
.menu .text,
.menu-item .text {
    -fx-fill: #000;
    -fx-fill: #000;
}
.menu:hover .text,
.menu:showing .text,
.menu:focused .text,
.menu-item:hover .text,
.menu-item:showing .text,
.menu-item:focused .text {
    -fx-fill: #fff;
    -fx-fill: #fff;
    -fx-font-weight: bold;
}
.menu:hover,
.menu:showing,
.menu:focused,
.menu-item:hover,
.menu-item:showing,
.menu-item:focused {
    -fx-background-color: #BCD18A;
}
.menu:clicked {
    -fx-background-color: #BCD18A;
}
*/
/*
* MENU BUTTON
*/
.menu-button > .arrow-button {
    -fx-padding: 0;
}
.menu-button > .arrow-button > .arrow {
    -fx-padding: 0;
}
.menu-button {
    -fx-background-color: transparent;
    -fx-background-radius: 7;
    -fx-border-radius: 7;
    -fx-border-width: 1;
    -fx-border-color: transparent;
    -fx-text-fill: white;
    -fx-font-size: 11px;
    -fx-padding: 0;
}
.menu-button:hover {
    -fx-background-color: #ededee;
    -fx-background-radius: 7;
    -fx-border-radius: 7;
    -fx-border-width: 1;
    -fx-border-color: #F2F2F2;
    -fx-text-fill: white;
    -fx-font-weight: normal;
}
/* LABEL */
.bottom-label {
    -fx-text-fill: rgba(90, 90, 90, 1);
    -fx-font-weight: bold;
    -fx-font-size: 11px;
}
/* TEXTFIELD */
.bottom-text-field {
    -fx-background-color: #e0e4e3;
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
    -fx-text-fill: rgba(0, 0, 0, 1);
    -fx-border-color: #C5CFCE;
    -fx-border-width: 1;
    -fx-padding: 3;
    -fx-font-size: 11px;
    -fx-background-radius: 2;
    -fx-border-radius: 2;
}
.bottom-text-field:disabled {
    -fx-opacity: 0.8;
}
fdx_generator/src/main/resources/styles/style.css
New file
@@ -0,0 +1,18 @@
/*
Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
Click nbfs://nbhost/SystemFileSystem/Templates/Other/CascadeStyleSheet.css to edit this template
*/
/*
    Created on : 15 nov. 2022, 11:59:29
    Author     : STEPHANIE
*/
.cover{
    -fx-background-image: url(../images/Accuueil_Generator.jpg);
    -fx-background-position: center center;
    -fx-background-repeat: stretch;
    -fx-background-size: stretch;
}
.square-border {
    -fx-background-radius:0%;
}
fdx_generator/src/main/resources/styles/title-bar.css
New file
@@ -0,0 +1,44 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
    Created on : 3 mars 2022, 14:50:08
    Author     : MGT_DEV3
*/
.title-bar {
    -fx-background-color: rgba(235, 235, 235, 1);
}
.title-bar-button {
    -fx-background-color: transparent;
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
.title-bar-button:hover {
    -fx-cursor: hand;
    -fx-background-color: rgba(220, 221, 222, 1);
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
.title-bar-button-close {
    -fx-cursor: hand;
    -fx-background-color: transparent;
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
.title-bar-button-close:hover {
    -fx-background-color: rgba(232, 17, 35, 1);
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
fdx_generator/src/main/resources/update-description.txt
New file
@@ -0,0 +1,3 @@
title of the update version 1.0
use this as description version 1.0
bla bla bla
fdx_generator/target/classes/.netbeans_automatic_build
fdx_generator/target/classes/com/megatim/fdxgenerator/abstracts/AbstractEditDialog.fxml
New file
@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.URL?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<BorderPane style="-fx-border-color: rgb(184, 184, 184); -fx-border-width: 1;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatimfx.common.abstracts.AbstractEditDialogController">
   <top>
      <HBox onMouseDragged="#mouseDraggedTitleBar" onMousePressed="#mousePressedTitleBar" styleClass="title-bar" BorderPane.alignment="CENTER">
         <children>
            <HBox prefWidth="200.0" HBox.hgrow="ALWAYS" />
            <HBox alignment="CENTER_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS">
               <children>
                  <Button mnemonicParsing="false" onMouseClicked="#minimize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/min-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onMouseClicked="#maximize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/max-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#close" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/close-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
               </children></HBox>
         </children>
         <padding>
            <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
         </padding>
      </HBox>
   </top>
   <center>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <HBox alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="50.0" prefWidth="200.0" styleClass="banner">
               <children>
                  <Text fx:id="title" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="TITRE DE LA FENETRE ICI">
                     <font>
                        <Font name="Arial Bold" size="16.0" />
                     </font>
                  </Text>
               </children>
            </HBox>
            <BorderPane fx:id="formPanel">
               <center>
                  <VBox BorderPane.alignment="CENTER">
                     <padding>
                        <Insets bottom="20.0" left="47.0" right="47.0" top="20.0" />
                     </padding>
                     <children>
                        <VBox fx:id="formContainer" style="-fx-background-color: #F8F8F8; -fx-border-color: #E9E9E9; -fx-border-width: 1;" />
                     </children>
                  </VBox>
               </center></BorderPane>
            <HBox fx:id="bottomContainer" alignment="TOP_RIGHT" prefHeight="50.0" spacing="5.0">
               <children>
                  <Button fx:id="cancelButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-border-color: #9d9fa2; -fx-background-radius: 0;" text="Annuler" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
                  <Button fx:id="editButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #31a19a; -fx-cursor: pointer; -fx-background-radius: 0;" text="Enregistrer" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
               </children>
               <padding>
                  <Insets left="47.0" right="47.0" />
               </padding>
            </HBox>
         </children>
      </VBox>
   </center>
   <stylesheets>
      <URL value="@../../../../styles/title-bar.css" />
      <URL value="@../../../../styles/main-style.css" />
   </stylesheets>
</BorderPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/abstracts/AbstractEditValidateDialog.fxml
New file
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.URL?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<BorderPane prefHeight="571.0" prefWidth="657.0" style="-fx-border-color: rgb(184, 184, 184); -fx-border-width: 1;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatimfx.common.abstracts.AbstractSelfEditValidateDialogController">
   <top>
      <HBox onMouseDragged="#mouseDraggedTitleBar" onMousePressed="#mousePressedTitleBar" styleClass="title-bar" BorderPane.alignment="CENTER">
         <children>
            <HBox prefWidth="200.0" HBox.hgrow="ALWAYS" />
            <HBox alignment="CENTER_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS">
               <children>
                  <Button mnemonicParsing="false" onAction="#min" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/min-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#max" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/max-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#close" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/close-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
               </children></HBox>
         </children>
         <padding>
            <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
         </padding>
      </HBox>
   </top>
   <center>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <HBox alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="50.0" prefWidth="200.0" styleClass="banner">
               <children>
                  <Text fx:id="title" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="TITRE DE LA FENETRE ICI">
                     <font>
                        <Font name="Arial Bold" size="16.0" />
                     </font>
                  </Text>
               </children>
            </HBox>
            <BorderPane fx:id="formPanel" VBox.vgrow="ALWAYS">
               <center>
                  <VBox prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER">
                     <padding>
                        <Insets bottom="20.0" left="47.0" right="47.0" top="20.0" />
                     </padding>
                     <children>
                        <ScrollPane fitToHeight="true" fitToWidth="true" prefHeight="381.0" prefWidth="310.0" VBox.vgrow="ALWAYS">
                           <content>
                              <VBox fx:id="formContainer" style="-fx-background-color: #F8F8F8; -fx-border-color: #E9E9E9; -fx-border-width: 1;" />
                           </content>
                        </ScrollPane>
                     </children>
                  </VBox>
               </center></BorderPane>
            <HBox fx:id="bottomContainer" alignment="TOP_RIGHT" prefHeight="50.0" spacing="5.0">
               <children>
                  <Button fx:id="cancelButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-border-color: #9d9fa2; -fx-background-radius: 0;" text="Annuler" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
                  <Button fx:id="editButton" mnemonicParsing="false" prefHeight="27.0" prefWidth="87.0" style="-fx-background-color: #31a19a; -fx-cursor: pointer; -fx-background-radius: 0;" text="Enregistrerr" textFill="WHITE">
                     <font>
                        <Font name="System Bold" size="12.0" />
                     </font>
                  </Button>
               </children>
               <padding>
                  <Insets left="47.0" right="47.0" />
               </padding>
            </HBox>
         </children>
      </VBox>
   </center>
   <stylesheets>
      <URL value="@../../../../styles/main-style.css" />
      <URL value="@../../../../styles/title-bar.css" />
   </stylesheets>
</BorderPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/abstracts/AbstractMainDialog.fxml
New file
@@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.URL?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onMouseDragged="#mouseDraggedTitleBar" onMousePressed="#mousePressedTitleBar" prefHeight="678.0" prefWidth="1120.0" style="-fx-border-color: rgb(184, 184, 184); -fx-border-width: 1;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatimfx.common.abstracts.AbstractMainDialogController">
   <center>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <HBox alignment="CENTER" prefHeight="65.0" prefWidth="1024.0" styleClass="banner">
               <children>
                  <Text fx:id="title" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="TITRE">
                     <font>
                        <Font name="Arial Bold" size="16.0" />
                     </font>
                  </Text>
               </children>
            </HBox>
            <VBox spacing="5.0" style="-fx-background-color: #44507;" VBox.vgrow="ALWAYS">
               <children>
                  <TitledPane collapsible="false" prefHeight="61.0" prefWidth="1223.0" text="Recherche">
                     <content>
                        <BorderPane fx:id="searchPane" prefHeight="43.0" prefWidth="1219.0" style="-fx-background-color: rgb(246, 247, 249);">
                           <right>
                              <HBox spacing="5.0" BorderPane.alignment="CENTER_LEFT">
                                 <BorderPane.margin>
                                    <Insets />
                                 </BorderPane.margin>
                                 <children>
                                    <Button fx:id="btnSearch" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="search">
                                       <graphic>
                                          <ImageView fitHeight="20.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/Recherche.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnReset" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="search">
                                       <graphic>
                                          <ImageView fitHeight="20.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/Reset.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <CheckBox fx:id="advancedCheckBox" alignment="CENTER" maxHeight="-Infinity" maxWidth="1.7976931348623157E308" mnemonicParsing="false" prefHeight="25.0" text="Options avancées" />
                                 </children>
                                 <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                 </padding>
                              </HBox>
                           </right>
                           <center>
                              <VBox BorderPane.alignment="CENTER">
                                 <children>
                                    <VBox fx:id="normalSearchContainer" prefHeight="200.0" prefWidth="100.0">
                                       <padding>
                                          <Insets right="50.0" />
                                       </padding>
                                    </VBox>
                                    <VBox fx:id="advancedSearchContainer" prefHeight="200.0" prefWidth="100.0">
                                       <padding>
                                          <Insets right="50.0" />
                                       </padding>
                                    </VBox>
                                 </children>
                              </VBox>
                           </center>
                        </BorderPane>
                     </content>
                  </TitledPane>
                  <VBox prefHeight="200.0" prefWidth="100.0" spacing="3.0" style="-fx-background-color: rgb(246, 247, 249);" VBox.vgrow="ALWAYS">
                     <children>
                        <HBox fx:id="buttonContainer" alignment="CENTER_LEFT" spacing="2.0">
                           <children>
                              <HBox fx:id="buttonContainer" alignment="BOTTOM_LEFT" spacing="2.0">
                                 <children>
                                    <Button fx:id="btnAdd" mnemonicParsing="false" onAction="#onAddDialog" style="-fx-background-color: #31a19a; -fx-cursor: pointer; -fx-background-radius: 8 0 0 0; -fx-border-radius: 8 0 0 0;" textFill="#ebf0ee">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/add.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnEdit" mnemonicParsing="false" onAction="#onEditDialog" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/edit.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnPrint" mnemonicParsing="false" onAction="#onEditDialog" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/print.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                    <Button fx:id="btnDelete" mnemonicParsing="false" onAction="#removeElement" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/trash.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                 </children>
                              </HBox>
                              <HBox alignment="CENTER_RIGHT" HBox.hgrow="ALWAYS">
                                 <children>
                                    <Button fx:id="btnImport" mnemonicParsing="false" onAction="#removeElement" style="-fx-background-color: #9d9fa2; -fx-cursor: pointer; -fx-background-radius: 0;" textFill="#f2eded">
                                       <font>
                                          <Font name="System Bold" size="12.0" />
                                       </font>
                                       <graphic>
                                          <ImageView fitHeight="15.0" fitWidth="15.0" pickOnBounds="true" preserveRatio="true">
                                             <image>
                                                <Image url="@../../../../images/trash.png" />
                                             </image>
                                          </ImageView>
                                       </graphic>
                                    </Button>
                                 </children>
                              </HBox>
                           </children>
                           <opaqueInsets>
                              <Insets />
                           </opaqueInsets>
                        </HBox>
                        <VBox prefHeight="200.0" prefWidth="100.0" VBox.vgrow="ALWAYS">
                           <children>
                              <TableView fx:id="elementTable" VBox.vgrow="ALWAYS">
                                 <columnResizePolicy>
                                    <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                                 </columnResizePolicy>
                              </TableView>
                              <HBox alignment="CENTER_LEFT" spacing="30.0" style="-fx-background-color: rgb(206, 206, 206);">
                                 <children>
                                    <HBox alignment="CENTER" spacing="15.0">
                                       <children>
                                          <HBox alignment="CENTER">
                                             <children>
                                                <Button fx:id="btnNext" mnemonicParsing="false" style="-fx-background-color: transparent; -fx-padding: 1;">
                                                   <graphic>
                                                      <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                                         <image>
                                                            <Image url="@../../../../images/next.png" />
                                                         </image>
                                                      </ImageView>
                                                   </graphic>
                                                </Button>
                                                <Label text="suivant">
                                                   <font>
                                                      <Font size="14.0" />
                                                   </font>
                                                </Label>
                                             </children>
                                          </HBox>
                                          <HBox alignment="CENTER">
                                             <children>
                                                <Button fx:id="btnPrevious" mnemonicParsing="false" onAction="#previousPage" style="-fx-background-color: transparent; -fx-padding: 1;">
                                                   <graphic>
                                                      <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                                         <image>
                                                            <Image url="@../../../../images/previous.png" />
                                                         </image>
                                                      </ImageView>
                                                   </graphic>
                                                </Button>
                                                <Label text="precedent">
                                                   <font>
                                                      <Font size="14.0" />
                                                   </font>
                                                </Label>
                                             </children>
                                          </HBox>
                                          <Label fx:id="paginationNumberInfo" text="(0/0)">
                                             <font>
                                                <Font size="14.0" />
                                             </font>
                                          </Label>
                                       </children>
                                    </HBox>
                                 </children>
                                 <padding>
                                    <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
                                 </padding>
                              </HBox>
                           </children>
                        </VBox>
                     </children>
                  </VBox>
                  <HBox alignment="CENTER_RIGHT">
                     <children>
                        <Button fx:id="btnClose" mnemonicParsing="false" prefHeight="27.0" prefWidth="90.0" style="-fx-background-color: rgb(202, 202, 202); -fx-cursor: pointer; -fx-border-color: #9d9fa2;" text="Quitter" textFill="#5d5d5d" />
                     </children>
                  </HBox>
               </children>
               <padding>
                  <Insets bottom="30.0" left="30.0" right="30.0" top="30.0" />
               </padding>
            </VBox>
         </children>
      </VBox>
   </center>
   <top>
      <HBox styleClass="title-bar" BorderPane.alignment="CENTER">
         <padding>
            <Insets bottom="2.0" left="2.0" right="2.0" top="2.0" />
         </padding>
         <children>
            <HBox prefWidth="200.0" HBox.hgrow="ALWAYS" />
            <HBox alignment="CENTER_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS">
               <children>
                  <Button mnemonicParsing="false" onMouseClicked="#minimize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/min-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onMouseClicked="#maximize" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/max-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
                  <Button mnemonicParsing="false" onAction="#close" style="-fx-padding: 5 12 5 12;" styleClass="title-bar-button">
                     <graphic>
                        <ImageView fitHeight="10.0" fitWidth="10.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/close-icon.png" />
                           </image>
                        </ImageView>
                     </graphic>
                  </Button>
               </children>
            </HBox>
         </children>
      </HBox>
   </top>
   <stylesheets>
      <URL value="@../../../../styles/main-style.css" />
      <URL value="@../../../../styles/title-bar.css" />
   </stylesheets>
</BorderPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/main.fxml
New file
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="533.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.MainController">
   <children>
      <VBox fx:id="mainContainer" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css">
               <children>
                  <HBox alignment="CENTER">
                     <children>
                        <ImageView fitHeight="48.0" fitWidth="190.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../images/icone_ins.png" />
                           </image>
                        </ImageView>
                     </children>
                     <padding>
                        <Insets right="30.0" />
                     </padding>
                  </HBox>
                  <HBox fx:id="myMenuBar">
                     <children>
                        <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Fichier">
                           <graphic>
                              <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                 <image>
                                    <Image url="@../../../../images/Fichier.png" />
                                 </image>
                              </ImageView>
                           </graphic>
                           <items>
                              <MenuItem mnemonicParsing="false" onAction="#quit" text="Quitter" />
                           </items>
                        </MenuButton>
                        <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Paramètres">
                           <graphic>
                              <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                 <image>
                                    <Image url="@../../../../images/143-02.png" />
                                 </image>
                              </ImageView>
                           </graphic>
                           <items>
                              <Menu mnemonicParsing="false" text="TypeFichier">
                                 <items>
                                    <MenuItem fx:id="validateurMenuItem" mnemonicParsing="false" onAction="#openImportTypeFichierDialog" text="Importer" />
                                    <MenuItem fx:id="typeFichMenuItem" mnemonicParsing="false" onAction="#openTypeFichierDialog" text="Consulter" />
                                 </items>
                              </Menu>
                              <MenuItem fx:id="configMenuItem" mnemonicParsing="false" onAction="#openConfigDialog" text="Configuration des repertoires" />
                              <MenuItem fx:id="validateurTypeFichMenuItem" mnemonicParsing="false" onAction="#openValidateurFichierDialog" text="Consulter les validateurs des typeFichier" />
                              <MenuItem fx:id="fichierValidationMenuItem1" mnemonicParsing="false" onAction="#openFichierValidationDialog" text="Générer les fichiers de validation" />
                           </items>
                        </MenuButton>
                        <MenuButton contentDisplay="TOP" disable="true" mnemonicParsing="false" text="Aide">
                           <graphic>
                              <ImageView disable="true" fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                                 <image>
                                    <Image url="@../../../../images/143-05.png" />
                                 </image>
                              </ImageView>
                           </graphic>
                           <items>
                              <MenuItem mnemonicParsing="false" text="A propos" />
                           </items>
                        </MenuButton>
                     </children>
                  </HBox>
               </children>
               <padding>
                  <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
               </padding>
            </HBox>
            <HBox spacing="10.0" style="-fx-background-color: #fff; -fx-border-color: #dedfe0;">
               <padding>
                  <Insets bottom="5.0" left="15.0" right="5.0" top="5.0" />
               </padding>
               <children>
                  <HBox prefWidth="200.0" spacing="10.0">
                     <children>
                        <Button fx:id="btnGenValidateur" mnemonicParsing="false" onAction="#openFichierValidationDialog" styleClass="receive">
                           <cursor>
                              <Cursor fx:constant="HAND" />
                           </cursor>
                        </Button>
                     </children>
                  </HBox>
                  <HBox alignment="TOP_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS" />
               </children>
            </HBox>
            <VBox prefHeight="437.0" prefWidth="928.0" style="-fx-background-color: transparent;" styleClass="main_screen" stylesheets="@../../../../styles/main_screen.css" VBox.vgrow="ALWAYS" />
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/main2.fxml
New file
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.MainController">
   <children>
      <HBox style="-fx-background-color: transparent;" stylesheets="@../../../../styles/main_screen.css">
         <children>
            <HBox alignment="CENTER">
               <children>
                  <ImageView fitHeight="48.0" fitWidth="190.0" pickOnBounds="true" preserveRatio="true">
                     <image>
                        <Image url="@../../../../images/icone_ins.png" />
                     </image>
                  </ImageView>
               </children>
               <padding>
                  <Insets right="30.0" />
               </padding>
            </HBox>
            <HBox fx:id="myMenuBar">
               <children>
                  <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Fichier">
                     <graphic>
                        <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../../../../../importation-validation-data/src/main/resources/images/Fichier.png" />
                           </image>
                        </ImageView>
                     </graphic>
                     <items>
                        <MenuItem mnemonicParsing="false" onAction="#quit" text="Quitter" />
                     </items>
                  </MenuButton>
                  <MenuButton contentDisplay="TOP" mnemonicParsing="false" text="Paramètres">
                     <graphic>
                        <ImageView fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../../../../../importation-validation-data/src/main/resources/images/143-02.png" />
                           </image>
                        </ImageView>
                     </graphic>
                     <items>
                        <Menu mnemonicParsing="false" text="TypeFichier">
                           <items>
                              <MenuItem fx:id="validateurMenuItem" mnemonicParsing="false" onAction="#openImportTypeFichierDialog" text="Importer" />
                              <MenuItem fx:id="typeFichMenuItem" mnemonicParsing="false" onAction="#openTypeFichierDialog" text="Consulter" />
                           </items>
                        </Menu>
                        <MenuItem fx:id="configMenuItem" mnemonicParsing="false" onAction="#openConfigDialog" text="Configuration des repertoires" />
                        <MenuItem fx:id="validateurTypeFichMenuItem" mnemonicParsing="false" onAction="#openValidateurFichierDialog" text="Consulter les validateurs des typeFichier" />
                        <MenuItem fx:id="fichierValidationMenuItem1" mnemonicParsing="false" onAction="#openFichierValidationDialog" text="Générer les fichiers de validation" />
                     </items>
                  </MenuButton>
                  <MenuButton contentDisplay="TOP" disable="true" mnemonicParsing="false" text="Aide">
                     <graphic>
                        <ImageView disable="true" fitHeight="20.0" fitWidth="20.0" pickOnBounds="true" preserveRatio="true">
                           <image>
                              <Image url="@../../../../../../../../importation-validation-data/src/main/resources/images/143-05.png" />
                           </image>
                        </ImageView>
                     </graphic>
                     <items>
                        <MenuItem mnemonicParsing="false" text="A propos" />
                     </items>
                  </MenuButton>
               </children>
            </HBox>
         </children>
         <padding>
            <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
         </padding>
      </HBox>
      <HBox spacing="10.0" style="-fx-background-color: #fff; -fx-border-color: #dedfe0;">
         <padding>
            <Insets bottom="5.0" left="15.0" right="5.0" top="5.0" />
         </padding>
         <children>
            <HBox prefWidth="200.0" spacing="10.0">
               <children>
                  <Button fx:id="btnGenValidateur" mnemonicParsing="false" onAction="#openFichierValidationDialog" styleClass="receive">
                     <cursor>
                        <Cursor fx:constant="HAND" />
                     </cursor>
                  </Button>
               </children>
            </HBox>
            <HBox alignment="TOP_RIGHT" prefWidth="200.0" HBox.hgrow="ALWAYS" />
         </children>
      </HBox>
      <VBox prefHeight="437.0" prefWidth="928.0" style="-fx-background-color: transparent;" styleClass="cover" stylesheets="@../../../../styles/style.css" />
   </children>
</VBox>
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/main_1.fxml
New file
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="928.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.MainController">
   <children>
      <VBox fx:id="mainContainer" prefHeight="200.0" prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <MenuBar>
              <menus>
                  <Menu mnemonicParsing="false" text="Fichier">
                    <items>
                      <MenuItem mnemonicParsing="false" onAction="#quit" text="Quitter" />
                    </items>
                  </Menu>
                  <Menu mnemonicParsing="false" text="Paramètres">
                    <items>
                        <Menu mnemonicParsing="false" text="TypeFichier">
                          <items>
                              <MenuItem fx:id="typeFichMenuItem" mnemonicParsing="false" onAction="#openTypeFichierDialog" text="Consulter" />
                              <MenuItem fx:id="validateurMenuItem" mnemonicParsing="false" onAction="#openImportTypeFichierDialog" text="Importer" />
                          </items>
                        </Menu>
                      <MenuItem fx:id="configMenuItem" mnemonicParsing="false" onAction="#openConfigDialog" text="Configuration des repertoires" />
                        <MenuItem fx:id="validateurTypeFichMenuItem" mnemonicParsing="false" onAction="#openValidateurFichierDialog" text="Consulter les validateurs des typeFichier" />
                        <MenuItem fx:id="fichierValidationMenuItem1" mnemonicParsing="false" onAction="#openFichierValidationDialog" text="Générer les fichiers de validation" />
                    </items>
                  </Menu>
                  <Menu mnemonicParsing="false" text="Aide">
                    <items>
                      <MenuItem mnemonicParsing="false" text="Afficher l'aide" />
                        <MenuItem mnemonicParsing="false" text="A propos de le l'application" />
                    </items>
                  </Menu>
              </menus>
            </MenuBar>
            <VBox prefHeight="437.0" prefWidth="928.0" styleClass="cover" stylesheets="@../../../../styles/style.css" VBox.vgrow="ALWAYS" />
                           </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/TypeFichierAdvancedSearchForm.fxml
New file
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="30.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.TypeFichierAdvancedSearchFormController">
   <children>
      <VBox prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox layoutX="10.0" layoutY="45.0" spacing="5.0">
               <children>
                  <Label alignment="CENTER_RIGHT" minWidth="42.0" prefHeight="17.0" prefWidth="57.0" text="participant">
                     <HBox.margin>
                        <Insets />
                     </HBox.margin></Label>
                  <TextField fx:id="participant" prefHeight="25.0" prefWidth="80.0" styleClass="square-border" stylesheets="@../../../../../styles/style.css" />
               </children>
            </HBox>
            <HBox spacing="5.0">
               <children>
                  <Label alignment="CENTER_RIGHT" prefWidth="57.0" text="Libelle" />
                  <TextField fx:id="libelle" styleClass="square-border" stylesheets="@../../../../../styles/style.css" HBox.hgrow="ALWAYS" />
               </children>
            </HBox>
         </children>
      </VBox>
   </children>
   <padding>
      <Insets top="10.0" />
   </padding>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/TypeFichierSearchForm.fxml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="13.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.TypeFichierSearchFormController">
   <children>
      <VBox layoutX="10.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox spacing="5.0">
               <children>
                  <Label alignment="CENTER_RIGHT" minWidth="42.0" prefWidth="57.0" text="Code" />
                  <TextField fx:id="code" prefWidth="80.0" styleClass="square-border" stylesheets="@../../../../../styles/style.css" />
               </children>
            </HBox>
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/ValidateurFichierAdvancedSearchForm.fxml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="30.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.ValidateurFichierAdvancedSearchFormController">
   <children>
      <VBox prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <HBox spacing="10.0">
               <children>
                  <Label alignment="CENTER_RIGHT" prefHeight="17.0" prefWidth="96.0" text="Nombre Position" />
                  <TextField fx:id="nombrePosition" prefHeight="25.0" prefWidth="71.0" styleClass="square-border" stylesheets="@../../../../../styles/style.css" />
               </children>
            </HBox>
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/controller/search/ValidateurFichierSearchForm.fxml
New file
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.megatimfx.common.customcontrols.AbstractSelectionItem?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="13.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.controller.search.ValidateurFichierSearchFormController">
    <children>
        <VBox layoutX="10.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <HBox alignment="CENTER_LEFT" prefWidth="96.0" spacing="10.0">
                    <children>
                        <Label alignment="CENTER_RIGHT" minWidth="76.0" prefHeight="17.0" prefWidth="96.0" text="Type de fichier" />
                        <AbstractSelectionItem fx:id="typeFichierAbstractSelectItem" minWidth="330.0" prefHeight="27.0" prefWidth="432.0" />
                    </children>
               <VBox.margin>
                  <Insets bottom="10.0" />
               </VBox.margin>
                </HBox>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/ConfigEditForm.fxml
New file
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="87.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.ConfigEditFormController">
    <children>
        <VBox prefHeight="400.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <TitledPane collapsible="false" text="Informations sur les repertoires">
                    <content>
                        <VBox spacing="5.0">
                            <children>
                                <HBox alignment="CENTER_LEFT" layoutX="25.0" layoutY="115.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Repertoire de stockage des validateurs XML" />
                                        <TextField fx:id="outputDir" prefHeight="25.0" prefWidth="336.0" styleClass="square-border" stylesheets="@../../../../styles/style.css">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                        <Button fx:id="outButton" mnemonicParsing="false" onMousePressed="#outButtonOnClicked" prefHeight="25.0" prefWidth="25.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" text="...">
                                            <HBox.margin>
                                                <Insets right="10.0" />
                                            </HBox.margin>
                                 <font>
                                    <Font name="System Bold" size="12.0" />
                                 </font>
                                        </Button>
                                    </children>
                                </HBox>
                            </children>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/FichierValidationEditForm.fxml
New file
@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.megatimfx.common.customcontrols.AbstractSelectionItem?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="249.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.FichierValidationEditFormController">
    <children>
        <VBox spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <padding>
                <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
            </padding>
            <children>
                <TitledPane collapsible="false" text="Informations sur le fichier de validation">
                    <content>
                        <VBox spacing="5.0">
                            <children>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Type de fichier" />
                                        <AbstractSelectionItem fx:id="typeFichierAbstractSelectItem" minWidth="330.0" prefWidth="327.0">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin></AbstractSelectionItem>
                                    </children>
                                </HBox>
                        <HBox layoutX="25.0" layoutY="87.0" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" prefWidth="205.0" text="Protéger fichier de validation ?" />
                              <CheckBox fx:id="isProtegeCheckBox" layoutX="235.0" layoutY="10.0" mnemonicParsing="false" text="Oui">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </CheckBox>
                           </children>
                        </HBox>
                        <HBox prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="TOP_RIGHT" prefWidth="205.0" text="Clé de cryptage" />
                              <StackPane minWidth="328.0" prefHeight="150.0" prefWidth="200.0">
                                 <children>
                                    <TextField fx:id="showKeyToEncrypt" prefWidth="328.0" style="-fx-background-radius: 0%;" />
                                    <PasswordField fx:id="keyToEncryptField" />
                                    <ImageView fx:id="imageView" fitHeight="15.0" fitWidth="15.0" onMousePressed="#eyeOnMousePressed" pickOnBounds="true" preserveRatio="true" StackPane.alignment="CENTER_RIGHT">
                                       <StackPane.margin>
                                          <Insets right="5.0" />
                                       </StackPane.margin>
                                       <image>
                                          <Image url="@../../../../images/oeil.png" />
                                       </image>
                                    </ImageView>
                                 </children>
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </StackPane>
                           </children>
                        </HBox>
                        <HBox layoutX="25.0" layoutY="57.0" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" prefWidth="205.0" text="Confirmation de la clé" />
                              <PasswordField fx:id="keyConfirmationField" minWidth="328.0">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </PasswordField>
                           </children>
                        </HBox>
                        <HBox layoutX="25.0" layoutY="117.0" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" prefWidth="205.0" text="Valider nom du fichier ?" />
                              <CheckBox fx:id="validateFileNameCheckBox" layoutX="235.0" layoutY="10.0" mnemonicParsing="false" text="Oui">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </CheckBox>
                           </children>
                        </HBox>
<!--                                <HBox alignment="CENTER_LEFT">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Repertoire de sortie" />
                                        <TextField fx:id="OutDirTextField" prefHeight="25.0" prefWidth="336.0">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                        <Button fx:id="OutButton" mnemonicParsing="false" onMousePressed="#outButtonOnClicked" prefHeight="25.0" prefWidth="31.0" text="...">
                                            <HBox.margin>
                                                <Insets right="10.0" />
                                            </HBox.margin>
                                        </Button>
                                    </children>
                                </HBox>-->
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
                <TitledPane fx:id="fileNameTitledPane" collapsible="false" text="Informations sur le nom du fichier Ã  valider">
                    <content>
                        <VBox spacing="5.0">
                            <children>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Format de la date" />
                                         <ComboBox fx:id="formatDate" prefWidth="327.0" style="-fx-background-radius: 0%;">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin></ComboBox>
                                    </children>
                                </HBox>
<!--                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Extension du fichier" />
                              <ComboBox fx:id="extensionFichier" prefWidth="327.0" style="-fx-background-radius: 0%;">
                                 <HBox.margin>
                                    <Insets left="10.0" />
                                 </HBox.margin>
                              </ComboBox>
                                    </children>
                                </HBox>-->
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Valeur maximale des tierces" />
                                        <TextField fx:id="MaxValueTierceTextField" prefHeight="25.0" prefWidth="124.0" style="-fx-background-radius: 0%;">
                                            <HBox.margin>
                                                <Insets left="10.0" />
                                            </HBox.margin>
                                        </TextField>
                                    </children>
                                </HBox>
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/ImportTypeFichierEditForm.fxml
New file
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="182.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.ImportTypeFichierEditFormController">
    <children>
        <VBox layoutX="-6.0" layoutY="7.0" spacing="5.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="-6.0" AnchorPane.rightAnchor="6.0" AnchorPane.topAnchor="7.0">
            <padding>
                <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
            </padding>
            <children>
                <TitledPane collapsible="false" text="Informations sur le fichier Ã  importer">
                    <content>
                        <VBox spacing="5.0">
                            <children>
<!--                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Format du fichier" />
                                        <ComboBox fx:id="formatFichier" prefWidth="150.0" />
                                    </children>
                                </HBox>-->
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Délimiteur de ligne" />
                                        <ComboBox fx:id="delimiteurLigne" prefHeight="25.0" prefWidth="328.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Délimiteur colonne" />
                                        <ComboBox fx:id="delimiteurColonne" prefHeight="25.0" prefWidth="328.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Fichier Ã  importer" />
                                        <TextField fx:id="fileToImportTextField" prefHeight="25.0" prefWidth="336.0" styleClass="square-border" stylesheets="@../../../../styles/style.css">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                        <Button fx:id="importButton" mnemonicParsing="false" onMousePressed="#importButtonOnClicked" prefHeight="25.0" prefWidth="31.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" text="...">
                                            <HBox.margin>
                                                <Insets right="10.0" />
                                            </HBox.margin>
                                 <font>
                                    <Font name="System Bold" size="12.0" />
                                 </font>
                                        </Button>
                                    </children>
                                </HBox>
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/StructureLigneEditForm.fxml
New file
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="394.0" prefWidth="586.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.StructureLigneEditFormController">
   <children>
      <VBox prefHeight="200.0" prefWidth="100.0" spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <TitledPane collapsible="false" text="Informations générales sur la structure de la ligne" VBox.vgrow="ALWAYS">
               <content>
                  <VBox fx:id="formFieldContainer" spacing="5.0">
                     <children>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Position" />
                              <ComboBox fx:id="positionComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Code" />
                              <TextField fx:id="codeTextField" prefWidth="100.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Désignation" />
                              <TextField fx:id="designationTextField" prefWidth="280.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Type de donnée" />
                              <ComboBox fx:id="typeDonneeComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Taille" />
                              <TextField fx:id="tailleTextField" prefWidth="100.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" layoutX="25.0" layoutY="145.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Taille partie décimale" />
                              <TextField fx:id="taillePartieDecimalTextField" prefWidth="100.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox fx:id="dateFormatContainer" alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Format" />
                               <ComboBox fx:id="formatDateComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                              <!--<TextField fx:id="formatDateTextField" prefWidth="100.0" />-->
                           </children>
                        </HBox>
                        <HBox fx:id="dateFormatContainer1" alignment="CENTER_LEFT" layoutX="25.0" layoutY="175.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefWidth="138.0" text="Séparateur de date" />
                              <ComboBox fx:id="delimiteurDateComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox fx:id="dateFormatContainer11" alignment="CENTER_LEFT" layoutX="25.0" layoutY="205.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minWidth="138.0" prefHeight="17.0" prefWidth="138.0" text="Séparateur de décimal" />
                              <ComboBox fx:id="delimiteurDecimalComboBox" minWidth="180.0" prefWidth="180.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                     </children>
                     <padding>
                        <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                     </padding>
                  </VBox>
               </content>
            </TitledPane>
         </children>
         <padding>
            <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
         </padding>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/TypeFichierEditForm.fxml
New file
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="182.0" prefWidth="648.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.TypeFichierEditFormController">
    <children>
        <VBox layoutX="-6.0" layoutY="7.0" spacing="5.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="-6.0" AnchorPane.rightAnchor="6.0" AnchorPane.topAnchor="7.0">
            <padding>
                <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
            </padding>
            <children>
                <TitledPane collapsible="false" text="Informations générales sur le type fichier">
                    <content>
                        <VBox spacing="5.0">
                            <children>
<!--                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Format du fichier" />
                                        <ComboBox fx:id="formatFichier" prefWidth="150.0" />
                                    </children>
                                </HBox>-->
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Code TypeFichier" />
                              <TextField fx:id="codeTextField" minWidth="328.0" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT" spacing="10.0">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Libellé" />
                              <TextField fx:id="libelleTextField" minWidth="328.0" />
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER_LEFT">
                                    <children>
                                        <Label alignment="CENTER_RIGHT" minWidth="205.0" text="Code Participant" />
                                        <TextField fx:id="codeParticipantTextField" maxWidth="328.0" minWidth="328.0" prefHeight="25.0" prefWidth="336.0" styleClass="square-border" stylesheets="@../../../../styles/style.css">
                                            <HBox.margin>
                                                <Insets left="10.0" right="2.0" />
                                            </HBox.margin>
                                        </TextField>
                                    </children>
                                </HBox>
                            </children>
                            <padding>
                                <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                            </padding>
                        </VBox>
                    </content>
                </TitledPane>
            </children>
        </VBox>
    </children>
</AnchorPane>
fdx_generator/target/classes/com/megatim/fdxgenerator/forms/ValidateurFichierEditForm.fxml
New file
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.megatimfx.common.customcontrols.AbstractNestedEntityTable?>
<?import com.megatimfx.common.customcontrols.AbstractSelectionItem?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorPane" prefHeight="543.0" prefWidth="650.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.megatim.fdxgenerator.forms.ValidateurFichierEditFormController">
   <children>
      <VBox spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <padding>
            <Insets bottom="20.0" left="32.0" right="32.0" top="20.0" />
         </padding>
         <children>
            <TitledPane collapsible="false" text="Informations sur le validateur">
               <content>
                  <VBox spacing="5.0">
                     <children>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" text="Type de fichier" />
                              <AbstractSelectionItem fx:id="typeFichierAbstractSelectItem" minWidth="330.0" prefWidth="330.0" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-font-size: 12; -fx-text-fill: black;" text="Format du fichier de données" />
                              <ComboBox fx:id="dataTypeComboBox" minHeight="25.0" minWidth="300.0" prefHeight="25.0" prefWidth="300.0" style="-fx-background-radius: 0%;" />
                           </children>
                        </HBox>
                        <HBox fx:id="delimiteurLigneHBox" alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-font-size: 12; -fx-text-fill: black;" text="Délimiteur de ligne" />
                              <ComboBox fx:id="delimiteurLigne" minHeight="25.0" minWidth="300.0" prefHeight="25.0" prefWidth="300.0" style="-fx-background-radius: 0%;" />
                           </children>
                        </HBox>
                        <HBox fx:id="delimiteurColonneHBox" alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-text-fill: black;" text="Délimiteur colonne" />
                              <ComboBox fx:id="delimiteurColonne" minHeight="25.0" minWidth="300.0" prefHeight="25.0" prefWidth="300.0" style="-fx-background-radius: 0%;" />
                           </children>
                        </HBox>
                        <HBox alignment="CENTER_LEFT" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" text="Nombre de position par ligne" />
                              <TextField fx:id="nombrePositionTextField" prefWidth="50.0" styleClass="square-border" stylesheets="@../../../../styles/style.css" />
                           </children>
                        </HBox>
                        <HBox prefHeight="43.0" prefWidth="637.0" spacing="10.0">
                           <children>
                              <Label alignment="CENTER_RIGHT" minHeight="25.0" minWidth="176.0" prefHeight="25.0" prefWidth="176.0" style="-fx-text-fill: black;" text="Fichier contient ligne d'entête ?" />
                              <CheckBox fx:id="headerPresentCheckbox" minHeight="25.0" mnemonicParsing="false" prefHeight="25.0" text="Oui" />
                           </children>
                        </HBox>
                     </children>
                     <padding>
                        <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                     </padding>
                  </VBox>
               </content>
            </TitledPane>
            <TitledPane animated="false" collapsible="false" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Structure des lignes" VBox.vgrow="ALWAYS">
               <content>
                  <VBox prefHeight="200.0" prefWidth="100.0" spacing="5.0">
                     <children>
                        <HBox alignment="CENTER_RIGHT">
                           <children>
                              <CheckBox fx:id="saisieStructureLigneChecBox" mnemonicParsing="false" styleClass="square-border" stylesheets="@../../../../styles/style.css" text="Saisir la structure des ligne" />
                           </children>
                        </HBox>
                        <AbstractNestedEntityTable fx:id="structureLigneAbstractTable" prefHeight="252.0" prefWidth="526.0" VBox.vgrow="ALWAYS" />
                     </children>
                     <padding>
                        <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
                     </padding></VBox>
               </content>
            </TitledPane>
         </children>
      </VBox>
   </children>
</AnchorPane>
fdx_generator/target/classes/images/143-01.png
fdx_generator/target/classes/images/143-02.png
fdx_generator/target/classes/images/143-03.png
fdx_generator/target/classes/images/143-04.png
fdx_generator/target/classes/images/143-05.png
fdx_generator/target/classes/images/Accuueil_Generator.jpg
fdx_generator/target/classes/images/Fichier.png
fdx_generator/target/classes/images/Motif.png
fdx_generator/target/classes/images/Recherche.png
fdx_generator/target/classes/images/Reset.png
fdx_generator/target/classes/images/add.png
fdx_generator/target/classes/images/close-icon.png
fdx_generator/target/classes/images/edit.png
fdx_generator/target/classes/images/generate.png
fdx_generator/target/classes/images/icone_ins.png
fdx_generator/target/classes/images/max-icon.png
fdx_generator/target/classes/images/min-icon.png
fdx_generator/target/classes/images/next.png
fdx_generator/target/classes/images/oeil.png
fdx_generator/target/classes/images/previous.png
fdx_generator/target/classes/images/trash.png
fdx_generator/target/classes/log4j.properties
New file
@@ -0,0 +1,12 @@
# Root logger option
log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=generateur.log
log4j.appender.file.MaxFileSize=10GB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Log everything. Good for troubleshooting
log4j.logger.org.hibernate=FATAL
fdx_generator/target/classes/styles/main-style.css
New file
@@ -0,0 +1,251 @@
/*
 * Empty Stylesheet file.
 */
.banner {
    -fx-background-image: url(../images/Motif.png);
    -fx-background-position: center center;
    -fx-background-repeat: stretch;
    -fx-background-size: cover;
}
.mainFxmlClass {
}
.table-view {
    -fx-background-color: transparent;
    -fx-border-color: rgb(209, 211, 212);
    -fx-padding: 0;
}
.table-view .column-header,
.table-view .column-header-background .filler {
    -fx-background-color: #44507B;
}
.column-header {
}
.table-view .column-header-background{
    -fx-padding: 0;
}
.table-view .column-header {
    -fx-border-color: rgb(209, 211, 212);
}
.table-view .column-header .label{
    -fx-text-fill: white;
    -fx-font-weight: bold;
    -fx-alignment: CENTER;
    -fx-padding: 5;
}
.table-cell {
    -fx-border-width: 0 1 0 1;
    -fx-border-color: rgb(230, 231, 232);
    -fx-padding: 5;
    -fx-alignment: CENTER;
}
.table-row-cell{
    -fx-background-color: #ffffff;
}
.table-row-cell:odd {
    -fx-background-color: rgb(239, 239, 240);
}
.table-row-cell:selected {
    -fx-background-color: rgba(214, 236, 219, 1);
    -fx-background-insets: 0;
    -fx-background-radius: 0;
}
.table-row-cell:selected .text {
    -fx-fill: #000;
}
/*
* Style for TextField
*/
.text-field {
    -fx-background-color: #F6F7F9;
    -fx-border-color: #30AFDC;
    -fx-border-radius: 3px;
    -fx-background-radius: 3px;
}
/*
Tab Pane style
*/
.tab-pane > .tab-header-area > .headers-region > .tab:top {
    -fx-border-color: #a3a7a8;
    -fx-border-radius: 5 5 0 0;
    -fx-background-color: white;
    -fx-pref-height: 40px;
    -fx-background-insets: 0;
}
.tab-pane > .tab-header-area > .headers-region > .tab:selected:top {
    -fx-border-color: #a3a7a8 #a3a7a8 #a3a7a8 #a3a7a8;
    -fx-border-width: 1 1 1 1;
    -fx-border-radius: 5 5 0 0;
    -fx-background-color: white;
    -fx-pref-height: 40px;
    -fx-background-insets: 0;
    -fx-border-insets: 0;
}
.tab-pane > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-label {
    -fx-alignment: CENTER;
    -fx-text-fill: #323232;
    -fx-font-weight: bold;
}
.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-label {
    -fx-alignment: CENTER;
    -fx-text-fill: #323232;
    -fx-font-weight: bold;
}
.tab-pane > .tab-header-area > .tab-header-background {
    -fx-background-color: white;
    -fx-border-color: #a3a7a8;
    -fx-border-width: 0 0 1 0;
    -fx-background-insets: 0;
    -fx-pref-height: 45px;
}
/*
* Title pane style
*/
.titled-pane {
    -fx-border-color: rgba(199, 200, 202, 1);
    -fx-text-fill: rgba(255, 255, 255, 1);
}
.titled-pane > .title {
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-background-color: rgba(68, 80, 123, 1);
}
.titled-pane > .title .text {
}
/* #2 */
.titled-pane > .title > .text {
    -fx-font-size: 14px;
    -fx-background-color: rgba(114, 114, 116, 1);
}
/*
* Search buttons
*/
.search {
    -fx-background-color: rgba(220, 221, 223, 1);
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-text-fill: rgba(53, 52, 52, 1);
}
.search:hover {
    -fx-background-color: rgba(220, 221, 223, .8);
}
.search:cancel {
    -fx-text-fill: gray;
}
/* CHECKBOX */
.check-box {
    /* default properties */
    selected-box-color: rgba(255, 255, 255, 1);
    box-color: rgba(255, 255, 255, 1);
    mark-color: white;
}
.check-box .box {
    /* background color for selected checkbox */
    -fx-border-width: 1px;
    -fx-border-color: rgb(208, 208, 208);
}
.check-box:selected > .box {
    /* background color for selected checkbox */
    -fx-background-color: selected-box-color;
}
.check-box > .box {
    /* background color of unselected checkbox */
    -fx-background-color: box-color;
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
}
/* TEXTFIELD */
.text-field {
    -fx-background-color: rgba(208, 208, 208, 1);
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
    -fx-text-fill: rgba(98, 98, 100, 1);
    -fx-border-color: rgba(208, 208, 208, 1);
    -fx-border-width: 1;
}
.text-field:disabled {
    -fx-opacity: 0.8;
}
/* COMBOBOX */
/* The ListCell that shows the selected item in a non-editable ComboBox */
.combo-box,
.combo-box:focus,
.combo-box .list-cell {
    -fx-background-color: rgba(208, 208, 208, 1);
}
.combo-box .list-view .list-cell {
    -fx-background-color: rgba(255, 255, 255, 1);
}
/* The TextField that shows the selected item in an editable ComboBox */
.combo-box .text-input {
    -fx-background-color: rgba(208, 208, 208, 1);
}
.combo-box:disabled {
    -fx-opacity: 0.8;
}
/* Style the arrow button area */
.combo-box .arrow-button {
    -fx-background-color: rgba(255, 255, 255, 1);
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
    -fx-border-color: rgba(225, 225, 225, 1);
    -fx-border-width: 1;
}
.combo-box .arrow-button .arrow {
    -fx-background-color: rgba(162, 162, 162, 1);
}
/* Set the text color in the popup list for ComboBox to blue */
.combo-box-popup .list-view .list-cell {
    -fx-text-fill: rgba(98, 98, 100, 1);
}
/* Set the text color in the popup list for ComboBox to blue */
.combo-box-popup .list-view .list-cell:hover {
    -fx-text-fill: rgba(98, 98, 100, 1);
    -fx-background-color: rgba(214, 236, 219, 1);
}
fdx_generator/target/classes/styles/main_screen.css
New file
@@ -0,0 +1,246 @@
/*
 * Empty Stylesheet file.
 */
@font-face {
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Medium.ttf');
}
* {
    -fx-font-family: 'Roboto';
}
.main_screen {
    -fx-background-image: url('../images/Accuueil_Generator.jpg');
    -fx-background-position: center center;
    -fx-background-repeat: stretch;
    -fx-background-size: cover;
    -fx-border-color: #C5CFCE;
}
.dashboard {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Tableau_de_bord_1.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.dashboard:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Barre_outils_hover-03.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.receive {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/generate.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.receive:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/generate.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.update {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Modif-01-01x.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.update:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Modif-01-01.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.generate {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/fichiers_generesx.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.generate:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/Barre_outils_hover-01.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.treatment {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/tache.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
.treatment:hover {
    -fx-pref-width: 20px;
    -fx-pref-height: 20px;
    -fx-background-color: transparent;
    -fx-background-image: url('../images/tache_hover.png');
    -fx-background-size: 20px;
    -fx-background-position: 0, 0, 0, 0;
    -fx-background-repeat: stretch;
}
/*
* Title pane style
*/
.titled-pane > .title {
    -fx-background-color: #C5D6E0;
    -fx-border-color: #C5D6E0;
}
.titled-pane > .title .text {
}
/* #2 */
.titled-pane > .title > .text {
    -fx-font-size: 14px;
}
/*
* Menu-bar style
*/
/*
.menu-item {
    -fx-border-color: #fff;
    -fx-margin: 0;
}
.menu .text,
.menu-item .text {
    -fx-fill: #000;
    -fx-fill: #000;
}
.menu:hover .text,
.menu:showing .text,
.menu:focused .text,
.menu-item:hover .text,
.menu-item:showing .text,
.menu-item:focused .text {
    -fx-fill: #fff;
    -fx-fill: #fff;
    -fx-font-weight: bold;
}
.menu:hover,
.menu:showing,
.menu:focused,
.menu-item:hover,
.menu-item:showing,
.menu-item:focused {
    -fx-background-color: #BCD18A;
}
.menu:clicked {
    -fx-background-color: #BCD18A;
}
*/
/*
* MENU BUTTON
*/
.menu-button > .arrow-button {
    -fx-padding: 0;
}
.menu-button > .arrow-button > .arrow {
    -fx-padding: 0;
}
.menu-button {
    -fx-background-color: transparent;
    -fx-background-radius: 7;
    -fx-border-radius: 7;
    -fx-border-width: 1;
    -fx-border-color: transparent;
    -fx-text-fill: white;
    -fx-font-size: 11px;
    -fx-padding: 0;
}
.menu-button:hover {
    -fx-background-color: #ededee;
    -fx-background-radius: 7;
    -fx-border-radius: 7;
    -fx-border-width: 1;
    -fx-border-color: #F2F2F2;
    -fx-text-fill: white;
    -fx-font-weight: normal;
}
/* LABEL */
.bottom-label {
    -fx-text-fill: rgba(90, 90, 90, 1);
    -fx-font-weight: bold;
    -fx-font-size: 11px;
}
/* TEXTFIELD */
.bottom-text-field {
    -fx-background-color: #e0e4e3;
    -fx-border-radius: 0px;
    -fx-background-radius: 0px;
    -fx-text-fill: rgba(0, 0, 0, 1);
    -fx-border-color: #C5CFCE;
    -fx-border-width: 1;
    -fx-padding: 3;
    -fx-font-size: 11px;
    -fx-background-radius: 2;
    -fx-border-radius: 2;
}
.bottom-text-field:disabled {
    -fx-opacity: 0.8;
}
fdx_generator/target/classes/styles/style.css
New file
@@ -0,0 +1,18 @@
/*
Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
Click nbfs://nbhost/SystemFileSystem/Templates/Other/CascadeStyleSheet.css to edit this template
*/
/*
    Created on : 15 nov. 2022, 11:59:29
    Author     : STEPHANIE
*/
.cover{
    -fx-background-image: url(../images/Accuueil_Generator.jpg);
    -fx-background-position: center center;
    -fx-background-repeat: stretch;
    -fx-background-size: stretch;
}
.square-border {
    -fx-background-radius:0%;
}
fdx_generator/target/classes/styles/title-bar.css
New file
@@ -0,0 +1,44 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
    Created on : 3 mars 2022, 14:50:08
    Author     : MGT_DEV3
*/
.title-bar {
    -fx-background-color: rgba(235, 235, 235, 1);
}
.title-bar-button {
    -fx-background-color: transparent;
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
.title-bar-button:hover {
    -fx-cursor: hand;
    -fx-background-color: rgba(220, 221, 222, 1);
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
.title-bar-button-close {
    -fx-cursor: hand;
    -fx-background-color: transparent;
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
.title-bar-button-close:hover {
    -fx-background-color: rgba(232, 17, 35, 1);
    -fx-background-radius: 0;
    -fx-border-radius: 0;
    -fx-border-width: 0;
}
fdx_generator/target/classes/update-description.txt
New file
@@ -0,0 +1,3 @@
title of the update version 1.0
use this as description version 1.0
bla bla bla
fdx_generator/target/maven-archiver/pom.properties
New file
@@ -0,0 +1,5 @@
#Generated by Maven
#Thu Jun 18 17:23:39 WAT 2026
version=1.0
groupId=com.megatim.com.megatim.fdxgenerator
artifactId=fdx-generator
fdx_generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
New file
@@ -0,0 +1,70 @@
com\megatim\fdxgenerator\model\StructureLigne.class
com\megatim\fdxgenerator\model\dao\ValidateurFichierDAO.class
com\megatim\fdxgenerator\annotations\KeyToDecryptConstraint.class
com\megatim\fdxgenerator\annotations\FormatDateConstraint.class
com\megatim\fdxgenerator\controller\search\ValidateurFichierSearchFormController$1.class
com\megatim\fdxgenerator\controller\search\TypeFichierSearchFormController.class
com\megatim\fdxgenerator\utilities\DataToImport.class
com\megatim\fdxgenerator\forms\ImportTypeFichierEditFormController.class
com\megatim\fdxgenerator\pojo\Delimiteur.class
com\megatim\fdxgenerator\controller\StructureLigneListDialogController.class
com\megatim\fdxgenerator\annotations\FormatDateValidator.class
com\megatim\fdxgenerator\annotations\TailleFormatDateValidator.class
com\megatim\fdxgenerator\annotations\TailleFormatDateConstraint.class
com\megatim\fdxgenerator\BriefLogFormatter.class
com\megatim\fdxgenerator\controller\MainController$1.class
com\megatim\fdxgenerator\forms\TypeFichierEditFormController.class
com\megatim\fdxgenerator\model\dao\StructureLigneDAO.class
com\megatim\fdxgenerator\controller\ImportTypeFichierEditDialogController.class
com\megatim\fdxgenerator\controller\ConfigEditDialogController.class
com\megatim\fdxgenerator\controller\TypeFichierListDialogController.class
com\megatim\fdxgenerator\controller\MainController.class
com\megatim\fdxgenerator\forms\FichierValidationEditFormController$1.class
com\megatim\fdxgenerator\controller\ValidateurFichierEditDialogController$1.class
com\megatim\fdxgenerator\model\dao\HibernateUtil.class
com\megatim\fdxgenerator\service\ConfigurationService.class
com\megatim\fdxgenerator\forms\StructureLigneEditFormController.class
com\megatim\fdxgenerator\App.class
com\megatim\fdxgenerator\annotations\FileNameValidator.class
com\megatim\fdxgenerator\controller\table\TypeFichierTable.class
com\megatim\fdxgenerator\controller\ValidateurFichierEditDialogController.class
com\megatim\fdxgenerator\controller\search\TypeFichierAdvancedSearchFormController.class
com\megatim\fdxgenerator\model\ImportFile.class
com\megatim\fdxgenerator\model\dao\TypeFichierDAO.class
com\megatim\fdxgenerator\utilities\AttributeFormatException.class
com\megatim\fdxgenerator\AppUpdate.class
com\megatim\fdxgenerator\controller\search\ValidateurFichierSearchFormController.class
com\megatim\fdxgenerator\controller\FichierValidationEditDialogController$2.class
com\megatim\fdxgenerator\service\ImportFileService.class
com\megatim\fdxgenerator\utilities\ImportData.class
com\megatim\fdxgenerator\controller\search\StructureLigneSearchFormController.class
com\megatim\fdxgenerator\model\dao\AbstractDAO$1.class
com\megatim\fdxgenerator\controller\search\StructureLigneAdvancedSearchFormController.class
com\megatim\fdxgenerator\annotations\ConfigConstraint.class
com\megatim\fdxgenerator\forms\ValidateurFichierEditFormController$1.class
com\megatim\fdxgenerator\forms\ValidateurFichierEditFormController.class
com\megatim\fdxgenerator\model\ValidateurFichier.class
com\megatim\fdxgenerator\model\TypeFichier.class
com\megatim\fdxgenerator\forms\FichierValidationEditFormController.class
com\megatim\fdxgenerator\controller\table\StructureLigneTable.class
com\megatim\fdxgenerator\enums\TypeDonnee.class
com\megatim\fdxgenerator\model\FichierValidation.class
com\megatim\fdxgenerator\service\TypeFichierService.class
com\megatim\fdxgenerator\utilities\PaginationElts.class
com\megatim\fdxgenerator\service\ValidateurFichierService.class
com\megatim\fdxgenerator\controller\StructureLigneEditDialogController.class
com\megatim\fdxgenerator\model\dao\AbstractDAO.class
com\megatim\fdxgenerator\forms\ConfigEditFormController.class
com\megatim\fdxgenerator\controller\search\ValidateurFichierAdvancedSearchFormController.class
com\megatim\fdxgenerator\model\Configuration.class
com\megatim\fdxgenerator\exceptions\ConfigException.class
com\megatim\fdxgenerator\controller\TypeFichierEditDialogController.class
com\megatim\fdxgenerator\controller\table\ValidateurFichierTable.class
com\megatim\fdxgenerator\enums\DataType.class
com\megatim\fdxgenerator\annotations\FileNameConstraint.class
com\megatim\fdxgenerator\controller\FichierValidationEditDialogController$1.class
com\megatim\fdxgenerator\annotations\KeyToDecryptValidator.class
com\megatim\fdxgenerator\annotations\ConfigValidator.class
com\megatim\fdxgenerator\service\StructureLigneService.class
com\megatim\fdxgenerator\controller\FichierValidationEditDialogController.class
com\megatim\fdxgenerator\controller\ValidateurFichierListDialogController.class
fdx_generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
New file
@@ -0,0 +1,62 @@
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\FileNameValidator.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\TailleFormatDateValidator.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\service\ImportFileService.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\utilities\AttributeFormatException.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\ValidateurFichierListDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\ImportFile.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\forms\FichierValidationEditFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\App.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\forms\ConfigEditFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\FileNameConstraint.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\FichierValidationEditDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\enums\DataType.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\StructureLigne.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\KeyToDecryptValidator.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\search\TypeFichierSearchFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\BriefLogFormatter.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\search\StructureLigneSearchFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\Configuration.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\table\ValidateurFichierTable.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\FormatDateConstraint.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\pojo\Delimiteur.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\dao\HibernateUtil.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\ConfigEditDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\search\ValidateurFichierSearchFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\search\TypeFichierAdvancedSearchFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\TypeFichierListDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\dao\ValidateurFichierDAO.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\utilities\PaginationElts.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\table\TypeFichierTable.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\service\TypeFichierService.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\ConfigConstraint.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\dao\AbstractDAO.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\KeyToDecryptConstraint.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\utilities\ImportData.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\StructureLigneListDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\TypeFichier.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\utilities\DataToImport.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\service\ConfigurationService.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\AppUpdate.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\MainController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\dao\StructureLigneDAO.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\TailleFormatDateConstraint.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\search\ValidateurFichierAdvancedSearchFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\ConfigValidator.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\StructureLigneEditDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\service\ValidateurFichierService.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\forms\StructureLigneEditFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\ImportTypeFichierEditDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\annotations\FormatDateValidator.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\enums\TypeDonnee.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\table\StructureLigneTable.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\search\StructureLigneAdvancedSearchFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\exceptions\ConfigException.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\dao\TypeFichierDAO.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\service\StructureLigneService.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\forms\ValidateurFichierEditFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\ValidateurFichierEditDialogController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\forms\TypeFichierEditFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\FichierValidation.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\model\ValidateurFichier.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\forms\ImportTypeFichierEditFormController.java
C:\Users\ASUS\Documents\NetBeansProjects\share_sources\generation-validateur-typefichier\src\main\java\com\megatim\fdxgenerator\controller\TypeFichierEditDialogController.java
fdx_generator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
fdx_generator/target/test-classes/.netbeans_automatic_build