Author: echatellier Date: 2020-07-23 11:32:50 +0200 (Thu, 23 Jul 2020) New Revision: 59 Url: http://forge.codelutin.com/projects/isis-fish-community/repository/revisions... Log: Ajout d'un fichier d'exemple de code Added: trunk/rules/ExampleDemoCodeRule.java Added: trunk/rules/ExampleDemoCodeRule.java =================================================================== --- trunk/rules/ExampleDemoCodeRule.java (rev 0) +++ trunk/rules/ExampleDemoCodeRule.java 2020-07-23 09:32:50 UTC (rev 59) @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2020 chatellier + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + */ +package rules; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.nuiton.math.matrix.*; +import resultinfos.*; + +import java.io.*; +import fr.ifremer.isisfish.util.*; +import java.util.*; +import scripts.*; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.types.TimeStep; +import fr.ifremer.isisfish.entities.*; +import fr.ifremer.isisfish.rule.AbstractRule; + +/** + * Fichier contenant des exemples de code couramment utilisé dans les règles. + */ +public class ExampleDemoCodeRule extends AbstractRule { + + /** to use log facility, just put in your code: log.info("..."); */ + private static Log log = LogFactory.getLog(ExampleDemoCodeRule.class); + + @Doc("Valeur") + public int param_value; + + protected String[] necessaryResult = { + MatrixBiomass.NAME, MatrixBiomass.NAME + }; + + public String[] getNecessaryResult() { + return this.necessaryResult; + } + + /** + * Permet d'afficher a l'utilisateur une aide sur la regle. + * @return L'aide ou la description de la regle + */ + public String getDescription() throws Exception { + return "TODO description rule"; + } + + /** + * Appelé au démarrage de la simulation, cette méthode permet d'initialiser + * des valeurs. + * + * @param context la simulation pour lequel on utilise cette regle + */ + public void init(SimulationContext context) throws Exception { + } + + /** + * La condition qui doit etre vrai pour faire les actions. + * + * @param context la simulation pour lequel on utilise cette regle + * @param step le pas de temps courant + * @param metier le metier concerné + * @return vrai si on souhaite que les actions soit faites + */ + public boolean condition(SimulationContext context, TimeStep step, Metier metier) throws Exception { + return false; + } + + /** + * Si la condition est vrai alors cette action est executee avant le pas + * de temps de la simulation. + * + * @param context la simulation pour lequel on utilise cette regle + * @param step le pas de temps courant + * @param metier le metier concerné + */ + public void preAction(SimulationContext context, TimeStep step, Metier metier) throws Exception { + + // récupérer une population en base de données + Population myPop = context.getPopulationDAO().findByName("MyPop"); + + // récupérer seulement les populations sélectionnées dans les paramêtres + SiMatrix siMatrix = SiMatrix.getSiMatrix(context); + List<Population> populations = siMatrix.getPopulations(step); + + + // lire le contenu d'un fichier + File file = new File("/path..."); + String content = ScriptUtil.readAsString(file); + // ajouter une ligne à la fin d'un fichier + FileUtils.writeStringToFile(file, "texte", true); + // lecture ligne par ligne + List<String> lignes = FileUtils.readLines(file); + for (String ligne : lignes) { + // ... + } + + // lecture d'un nombre dans un fichier + String content2 = FileUtils.readFileToString(file); + double value = Double.parseDouble(content2); + + // Fichier de propriété + // key=value + // key2=valeur2 + Properties props = new Properties(); + props.load(new FileInputStream(file)); + String value2 = props.getProperty("key"); + + // acceder à un resultat + MatrixND abundance = context.getResultManager().getMatrix(MatrixAbundance.NAME); + MatrixND biomassStep = context.getResultManager().getMatrix(step, MatrixBiomass.NAME); + // sauver un resultat après modification + context.getResultManager().addResult(step, biomassStep); + + // l'abondance en cours est aussi dans population monitor + MatrixND N = context.getPopulationMonitor().getN(myPop); + context.getPopulationMonitor().setN(myPop, N); + + // creation d'un nouveau résultat + MatrixND monResult = MatrixFactory.getInstance() + .create("MonResult", new int[]{2, 3}); + monResult.setValue(0, 0, 42); + context.getResultManager().addResult(step, monResult); + + } + + /** + * Si la condition est vrai alors cette action est executée apres le pas + * de temps de la simulation. + * + * @param context La simulation pour lequel on utilise cette regle + * @param step le pas de temps courant + * @param metier le metier concerné + */ + public void postAction(SimulationContext context, TimeStep step, Metier metier) throws Exception { + + } +}
participants (1)
-
echatellier@users.forge.codelutin.com