Skip to content
Snippets Groups Projects
  • mathias.chouet's avatar
    009f2ca5
    Amélioration des services · 009f2ca5
    mathias.chouet authored
    utilisation de l'injection tant que possible, plutôt que ServiceFactory
    simplification de HttpService
    fichier de configuration JSON pour ApplicationSetupService
    009f2ca5
    History
    Amélioration des services
    mathias.chouet authored
    utilisation de l'injection tant que possible, plutôt que ServiceFactory
    simplification de HttpService
    fichier de configuration JSON pour ApplicationSetupService
param.service.ts 3.36 KiB
import { ParamDomain, ParamDefinition, ParamDomainValue, ParamCalculability, Session, Props, Nub } from "jalhyd";

import { NgParameter } from "../../formulaire/ngparam";
import { Injectable } from "@angular/core";
import { InternationalisationService } from "../internationalisation/internationalisation.service";
import { ApplicationSetupService } from "../app-setup/app-setup.service";
import { FormulaireNode } from "../../formulaire/formulaire-node";

@Injectable()
export class ParamService {

    constructor(
        private internationalisationService: InternationalisationService,
        private applicationSetupService: ApplicationSetupService
        ) { }

    private get _intlService(): InternationalisationService {
        return this.internationalisationService;
    }

    private get _appSetupService(): ApplicationSetupService {
        return this.applicationSetupService;
    }

    private createAccuracyParameter(): ParamDefinition {
        const d = new ParamDomain(ParamDomainValue.INTERVAL, 1e-10, 100);
        const p = new ParamDefinition(null, "Pr", d, this._appSetupService.computePrecision);
        p.calculability = ParamCalculability.FREE;
        return p;
    }

    /**
     *
     * @param calcType crée un NgParameter n'appartenant pas à un ComputeNode
     * @param symbol symbole du paramètre à créer
     */
    public createParameter(symbol: string, parent: FormulaireNode): NgParameter {
        let p: NgParameter;
        if (symbol === "Pr") {
            const prmDef: ParamDefinition = this.createAccuracyParameter();
            p = new NgParameter(prmDef.clone(), parent);
            p.confId = "Pr";
        } else {
            const dom = new ParamDomain(ParamDomainValue.POS_NULL);
            p = new NgParameter(new ParamDefinition(null, symbol, dom), parent);
            p.confId = symbol;

            switch (symbol) {
                case "Hs":
                case "Hsc":
                case "B":
                case "P":
                case "R":
                case "Yc":
                case "Yn":
                case "Yf":
                case "Yt":
                case "Yco":
                case "J":
                    p.unit = "m";
                    break;

                case "S":
                    p.unit = "m2";
                    break;

                case "V":
                    p.unit = "m/s";
                    break;
                case "I-J":
                    p.unit = "m/m";
                    break;

                case "Fr":
                    p.unit = "";
                    break;

                case "Imp":
                    p.unit = "N";
                    break;

                case "Tau0":
                    p.unit = "Pa";
                    break;

                case "Pr":
                    break;

                default:
                    throw new Error(`ParamService.createParameter() : symbole ${symbol} non pris en charge`);
            }
            p.updateLocalisation(this._intlService.currentMap);
        }

        return p;
    }

    public createNub(params: Props | {}): Nub {
        const truc = Session.getInstance().createSessionNub(params);
        return truc;
    }

    public replaceNub(sn: Nub, params: Props): Nub {
        return Session.getInstance().replaceNub(sn, params);
    }

    public deleteNub(sn: Nub) {
        Session.getInstance().deleteNub(sn);
    }
}