Skip to content
Snippets Groups Projects

ngHyd : Angular Component Library For Hydraulics using JaLHyd library

All the things to know for developping the library

The library needs nodeJS installed and the following node packages installed globally: typescript, karma, tslint.

This can be done from the command line:

npm install -g typescript karma tslint

Install the necessary packages of the library:

Clone or update the JalHyd project and in the JalHyd folder, run :

npm package

Then, back to the ngHyd project folder, run :

npm install <path to the JalHyd folder>/jalhyd-<version>.tar.gz

and then :

npm install

To compile the typescript code

npm run build

To run compilation in watch mode as well as application execution in a navigator window

npm start

To flag suspicious language usage

npm run lint

Procédure d'ajout d'une calculette

JaLHyd

  • Créer la classe de paramétrage

    • exemple :

        export class TotoParams extends ParamsEquation {
        	[key: string]: any; // pour pouvoir faire this['methode]();
      
        	/** Longueur L */
        	private _L: ParamDefinition;
      
        	/** Largeur W */
        	private _W: ParamDefinition;
      
        	/** Tugudu A */
        	private _A: ParamDefinition;
      
        	constructor(rL: number, rW: number, rA:number=undefined) {
        		super();
        		this._L = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'L', ParamDomainValue.POS, rL);
        		this._W = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'W', ParamDomainValue.POS, rW);
        		this._A = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'A', ParamDomainValue.POS, rA);
      
        		this.addParamDefinition(this._L);
        		this.addParamDefinition(this._W);
        		this.addParamDefinition(this._A);
        	}
      
        	get L() {
        		return this._L;
        	}
      
        	get W() {
        		return this._W;
        	}
      
        	get A() {
        		return this._A;
        	}
        }
  • Créer la classe de calcul

    • exemple :

        export class Toto extends Nub {
        	constructor(prms: TotoParams, dbg: boolean = false) {
        		super(prms, dbg);
        	}
      
        	/**
        	* paramètres castés au bon type
        	*/
        	get prms(): TotoParams {
        		return <TotoParams>this._prms;
        	}
      
        	/**
        	* paramétrage de la calculabilité des paramètres
        	*/
        	protected setParametersCalculability() {
        		this.prms.L.calculability = ParamCalculability.DICHO;
        		this.prms.W.calculability = ParamCalculability.DICHO;
        		this.prms.A.calculability = ParamCalculability.EQUATION;
        	}
      
        	Equation(sVarCalc: string): Result {
        		let v: number;
      
        		switch (sVarCalc) {
        			case "A":
        				v = this.prms.L.v / this.prms.W.v;
        				break;
      
        			default:
        				throw "Toto.Equation() : invalid variable name " + sVarCalc;
        		}
      
        		return new Result(v);
        	}
        }
  • Créer les tests unitaires correspondants

  • Ajouter une valeur à l'enum ComputeNodeType pour identifier le type de noeud de calcul (par ex MaCalculette).

  • Compléter la méthode ComputeNodeParameters.getComputeNodeParameters().

    Si plusieurs valeurs de ComputeNodeType font référence à la même calculette, n'ajouter les case que pour les valeurs "concrètes". Par exemple, pour les sections paramétrées, il n'y a pas de case pour la valeur SectionParametree qui est générique.

ngHyd

  • Créer les fichier de configuration de la calculette

    • dans src/app/calculators : créer un répertoire (par ex ma-calculette)

    • dans src/app/calculators/ma-calculette :

      Créer ma-calculette.config.json sur le modèle des autres. Les ids utilisés doivent correspondre au symbole fourni à classe ParamDefinition (2ème paramètre du constructeur)

      Ne pas oublier de spécifier : - le type de noeud de la calculette (dans l'objet comportant "id":"options") avec le champ "nodeType": "MaCalculette" - éventuellement le type de noeud de fieldset particuliers (objets comportant "id":"fs_XXX") avec le champ "nodeType": "MaCalculetteBleue"

    • dans src/app/calculators/ma-calculette :

      Créer les fichiers d'internationalisation (ma-calculette.<langue>.json). Il doivent reprendre tous les ids utilisés dans le fichier de configuration et fournir leur traduction.

  • Dans le fichier src/app/formulaire/formulaire-definition.ts ajouter une valeur à l'enum CalculatorType pour identifier la calculette.

    On ne reprend pas directement l'enum ComputeNodeType car celui ci sert à distinguer les variantes au sein d'une même calculette (par exemple les différentes sections paramétrées).

  • Composant CalculatorListComponent : ajouter une ligne à la methode updateLocale() pour créer une nouvelle entrée dans la liste des calculettes disponibles.

  • src/locale/error_messages.<langue>.json : Ajouter un champ pour le titre de la calculette. Par exemple : "INFO_MACALC_TITRE": "Ma calculette"

  • Compléter la méthode GenericCalculatorComponent.uitextTitre() avec cette valeur et la valeur de l'enum CalculatorType correspondante.

  • Dans la méthode FormulaireService.getConfigPathPrefix(), compléter le switch pour fournir le préfixe des fichiers de configuration/internationalisation.

  • Classe ParamService : compléter le constructeur.

  • S'il existe plusieurs valeurs de ComputeNodeType pour la même calculette, compléter les méthodes

    • FormulaireDefinition.getComputeNodeTypeFromSection().
    • ParamService.hasParameter()
  • Compléter la méthode FormulaireDefinition.doCompute(). En particulier, adapter les méthodes getNubAndParameters() ou getSectionNubAndParameters() (récupération des valeurs saisies dans l'interface).