Modifier le fichier

Initialisation d'une extension

Prérequis

  • Créer un dépôt sur Gitlab dans le groupe solutioning/ksup/produit/extensions et le cloner en local.
  • Ajouter un fichier LICENCE.md à la racine avec le contenu suivant
    Copyright 2013 - Kosmos
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at  
      
    [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)  
      
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
  • Ajouter un fichier README.md à la racine avec le contenu suivant (en adaptant le contenu)
    #Mon Extension
    Cette extension permet ...
    
    ##Questions, problèmes, suggestions
    Les produits K-Portal et K-Sup sont Open Source. Vous pouvez ainsi participer à leur évolution : [Guide de contribution Open-Source](http://www.ksup.org/fr/communaute/contribuez/).   
    En cas d'anomalie, merci de saisir un ticket sur la plate-forme d'assistance [JIRA](https://issues.kosmos.fr/browse/MONEXTENSION).
    
    ##Contribution au développement
    Si vous souhaitez proposer des développements merci de consulter le [processus de contribution](http://www.ksup.org/fr/communaute/contribuez/guide-de-contribution-sur-bitbucket-20805.kjsp).
    
    ## Installation hooks GIT
    Ce projet contient des Hooks préconfiguré.
    Lors de l'installation de ce projet lancer la commande
    ```
    npm install
    ```
    Voir ssh://git@gitlab.kosmos.fr:22226/solutioning/ksup/outils/node-cli-ksup.git
  • Ajouter un fichier package.json à la racine avec le contenu suivant (en adaptant le contenu)
    {
      "name": "@ksup/extensions-monextension",
      "version": "7.2-SNAPSHOT",
      "description": "Cette extension permet de ...",
      "main": "index.js",
      "devDependencies": {
        "husky": "^3.1.0",
        "node-cli-ksup": "^1.0.1"
      },
      "husky": {
        "hooks": {
          "commit-msg": "commit-msg -E HUSKY_GIT_PARAMS"
        }
      },
      "repository": {
        "type": "git",
        "url": "ssh://git@gitlab.kosmos.fr:22226/solutioning/ksup/extensions/monextension.git"
      },
      "keywords": [],
      "author": "",
      "license": "Apache-2.0",
      "dependencies": {}
    }
  • Ajouter un fichier Jenkinsfile à la racine avec le contenu suivant (en adaptant le contenu)
    #!/usr/bin/env groovy
    @Library('KSup_Pipeline') _
    
    ksupTemplatePipeline(
            repoKey : 'monextension',
            mavenProfile: 'generate-license',
            jdkVersion: 'jdk_17',
            mvnVersion: 'maven_3.8.6',
            DEPLOY: true
    )

Création du pom.xml

  • Ajouter un fichier pom.xml à la racine avec le contenu suivant (en adaptant le contenu)
<?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>
    ...
</project>
  • Déclarer le parent Koreparent
<parent>
    <groupId>fr.kosmos.web.extensions</groupId>
    <artifactId>parent-extensions</artifactId>
    <version>7.2-SNAPSHOT</version>
</parent>
  • Déclarer les information relatives à l'extension
<name>Mon extension</name>
<description>Artifact parent de l'extension Mon extension</description>

<scm>
    <connection>scm:git:git@gitlab.kosmos.fr:22226/solutioning/ksup/extensions/monextension.git</connection>
    <tag>HEAD</tag>
</scm>
  • Déclarer les modules de l'extension
 <modules>
    <module>monextension-core</module>
    <module>monextension-webapp-contrib</module>
    <module>monextension-webapp-front</module>
</modules>

Ajout des modules

Module core

Le module core contient le code applicatif métier de l'extension (beans, dao, service...). Il est obligatoire.

Il contient également le fichier de contexte Spring permettant de déclarer l'extension au sein de K-Sup.

  • Créer un dossier monextension-core à la racine du projet
  • Ajouter un dossier docs à ce dossier (pour la documentation)
  • Ajouter un fichier pom.xml à ce dossier avec le contenu suivant (en adaptant le contenu)
<?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">
    <parent>
        <groupId>fr.kosmos.web.extensions</groupId>
        <artifactId>monextension</artifactId>
        <version>7.2-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>monextension-core</artifactId>
    <packaging>jar</packaging>

    <name>Mon extension Core</name>
    <description>Module contenant les services métiers de l'extension Mon extension</description>

</project>
  • Ajouter un dossier src/main/java à ce dossier (pour le code Java)
  • Ajouter un dossier src/main/resources à ce dossier (pour les ressources)
  • Créer un fichier monextension.properties dans src/main/resources avec le contenu suivant (en adaptant le contenu)
core.version=${core.version}
extension.version=${project.version}
  • Créer un fichier monextension_fr_FR.properties dans src/main/resources avec le contenu suivant (en adaptant le contenu)
MONEXTENSION.EXTENSION_LIBELLE=Mon extension
MONEXTENSION.EXTENSION_DESCRIPTION=Description de l'extension Mon extension
  • Ajouter le dossier com/kosmos/monextension/context/ à src/main/resources
  • Créer un fichier ExtensionContext.xml dans ce dossier avec le contenu suivant (en adaptant le contenu)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.kosmos.monextension.context"/>

    <bean id="monextension" class="com.kportal.extension.DefaultExtensionImpl">
        <property name="libelle" value="MONEXTENSION.EXTENSION_LIBELLE"/>
        <property name="version" value="${extension.version}"/>
        <property name="coreVersion" value="${core.version}"/>
        <property name="externe" value="true"/>
        <property name="type" ref="TYPE_PARAMETRABLE"/>
        <property name="relativePath" value="/extensions/monextension"/>
        <property name="description" value="MONEXTENSION.EXTENSION_DESCRIPTION"/>
        <property name="logo" value="/resources/images/extension.png"/>
        <property name="auteur" value="Kosmos"/>
    </bean>

    <bean id="monextensionProperties" class="com.kportal.core.config.PropertyConfigurer">
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="true" />
        <property name="locations">
            <list>
                <value>classpath*:monextension.properties</value>
                <value>classpath*:monextension-override.properties</value>
                <value>classpath*:application_monextension.properties</value>
                <value>${path.properties}env_monextension.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>

    <bean id="monextensionMessages" class="com.kportal.core.config.MessageLoader" init-method="init">
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="true" />
        <property name="locations">
            <list>
                <value>classpath*:monextension_*.properties</value>
                <value>classpath*:Application_monextension_*.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>

    <!-- Chargement des statistiques -->
    <import resource="classpath:com/kosmos/monextension/context/monextension-statistics.xml"/>

    <!-- Chargement des contextes externes-->
    <import resource="classpath*:com/kosmos/monextension/context/monextension-webapp-*.xml"/>

    <!-- Ouverture à la surchage projet -->
    <import resource="classpath*:spring/monextension-override.xml"/>
</beans>
  • Ajouter un dossier migration dans src/main/resources/com/kosmos/monextension
  • Ajouter un fichier V7_1_0__init.sql (numéro à adapater) dans ce dossier avec le script d'initialisation de la base de données.

Module webapp-contrib

Le module webapp-contrib contient le code applicatif de la partie contribution de l'extension.

  • Créer un dossier monextension-webapp-contrib à la racine du projet
  • Ajouter un fichier pom.xml à ce dossier avec le contenu suivant (en adaptant le contenu)
<?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">
    <parent>
        <groupId>fr.kosmos.web.extensions</groupId>
        <artifactId>monextension</artifactId>
        <version>7.2-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>monextension-webapp-contrib</artifactId>
    <packaging>jar</packaging>

    <name>Application Mon extension Contrib</name>
    <description>Module contenant la webapp de contribution de l'extension Mon extension</description>

    <dependencies>
        <dependency>
            <groupId>fr.kosmos.web.extensions</groupId>
            <artifactId>monextension-core</artifactId>
        </dependency>
    </dependencies>

</project>
  • Ajouter un dossier src/main/java à ce dossier (pour le code Java)
  • Ajouter un dossier src/main/resources à ce dossier (pour les ressources)
  • Ajouter un dossier com/kosmos/monextension/context à src/main/resources
  • Créer un fichier monextension-webapp-contrib.xml dans ce dossier avec le contenu suivant (en adaptant le contenu)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="monextensionContributionProperties" class="com.kportal.core.config.PropertyConfigurer">
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="true"/>
        <property name="locations">
            <list>
                <value>classpath*:monextension-contrib.properties</value>
                <value>classpath*:monextension-contrib-override.properties</value>
                <value>classpath*:application_monextension-contrib.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>

    <bean id="monextensionContributionMessages" class="com.kportal.core.config.MessageLoader" init-method="init">
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="true"/>
        <property name="locations">
            <list>
                <value>classpath*:monextension-contrib_*.properties</value>
                <value>classpath*:Application_monextension-contrib_*.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>

<!--    TODO entrée de menu...-->
</beans>
  • Ajouter un dossier META-INF/resources/extensions/monextension à src/main/resources
  • Ajouter un dossier resources/images dans le dossier META-INF/resources/extensions/monextension
  • Ajouter un dossier WEB-INF/jsp/monextension dans le dossier META-INF/resources/extensions/monextension, ce dossier contiendra les JSP de saisie de l'extension
  • Ajouter les fichiers monextension-contrib.properties et monextension-contrib_fr_FR.properties dans src/main/resources

Module webapp-front

Le module webapp-front contient le code applicatif de la partie front de l'extension (ViewModels, ViewPreparers, jsp...).

  • Créer un dossier monextension-webapp-front à la racine du projet
  • Ajouter un fichier pom.xml à ce dossier avec le contenu suivant (en adaptant le contenu)
<?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">
    <parent>
        <groupId>fr.kosmos.web.extensions</groupId>
        <artifactId>monextension</artifactId>
        <version>7.2-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>monextension-webapp-front</artifactId>
    <packaging>jar</packaging>

    <name>Mon extension Webapp Front</name>
    <description>Module contenant la webapp front de l'extension monextension</description>

    <dependencies>
        <dependency>
            <groupId>fr.kosmos.web.extensions</groupId>
            <artifactId>monextension-core</artifactId>
        </dependency>
    </dependencies>
</project>
  • Ajouter un dossier src/main/java à ce dossier (pour le code Java)
  • Ajouter un dossier src/main/resources à ce dossier (pour les ressources)
  • Ajouter un fichier bundle.json à src/main/resources, ce fichier contiendra les bundles à générer par la chaîne de build front (cf fichier bundle.json)
  • Ajouter un dossier com/kosmos/monextension/context à src/main/resources
  • Créer un fichier monextension-webapp-front.xml dans ce dossier, ce fichier contiendra les beans Spring spécifiques à la webapp front de l'extension
  • Ajouter un dossier META-INF/resources/extensions/monextension/WEB-INF/jsp à src/main/resources, ce dossier contiendra les JSP de l'extension