package analyseplans; import static org.codelutin.i18n.I18n._; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import scripts.ResultName; import java.io.Writer; import java.io.*; import java.io.File; import java.io.FileReader; import java.util.*; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.codelutin.math.matrix.*; import org.codelutin.util.*; import org.codelutin.topia.*; import fr.ifremer.isisfish.util.Doc; import fr.ifremer.isisfish.*; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.types.Date; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.simulator.AnalysePlan; import fr.ifremer.isisfish.simulator.AnalysePlanContext; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.ResultStorage; /** * ChangParFilet.java * * Created: 1 juillet 2009 * * @author HUSSEIN chirine * */ public class ChangParFilet implements AnalysePlan { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory.getLog(ChangParFilet.class); static private final String MATRIX = "matrix"; static private final String PAR_VALUE = "ParameterValue"; public int param_parameterNumber = 1 ; /// ce param�tre n'est normalement pas modifi� public int param_first = 0; /// on utilise ce param�tre pour indiquer � quelle ligne /// de la matrice on doit commencer � faire tourner les simulations au cas o� on ait d� interompre le plan public int param_simulationNumber = 3;/// ce param�tre n'est normalement pas modifi� public String param_directory = "C:/Documents and Settings/hussein/Bureau/isis-fish-3.1.3/isis-fish-3.1.3/ChangParamConrolable//"; private MatrixND matrix = null; public String [] necessaryResult = { // put here all necessary result for this rule // example: // ResultName.MATRIX_BIOMASS, // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, }; public String[] getNecessaryResult() { return this.necessaryResult; } /** * Permet d'afficher a l'utilisateur une aide sur le plan. * @return L'aide ou la description du plan */ public String getDescription() throws Exception { // TODO return _("r�alise le plan de simulation pour un param�tres � 3 modalit�"); } /** * Appel� au d�marrage de la simulation, cette m�thode permet d'initialiser * des valeurs * @param simulation La simulation pour lequel on utilise cette regle */ public void init(AnalysePlanContext context) throws Exception { File dir = new File(param_directory); matrix = MatrixFactory.getInstance().create(new int[]{param_simulationNumber, param_parameterNumber+2}); matrix.importCSV(new FileReader(new File(dir, MATRIX + ".txt")), new int[]{0,0}); matrix.setSemantics(1, Arrays.asList(new String[]{PAR_VALUE})); //log.info("Matrix: " + matrix); } /** * @param name le nom de l'element a recuperer * @param simulation le numero de la simulation * @return */ private double getDouble(String name, int simulation) throws Exception { File dir = new File(param_directory); Properties prop = new Properties(); prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); // va chercher dans matrix si c est la modalit� 1 ou -1 du facteur int ligne = simulation + param_first; int mod = (int)matrix.getValue(ligne, name); double result = Double.parseDouble(prop.getProperty(""+mod)); return result; } private double [] getList(String name, int simulation) throws Exception { File dir = new File(param_directory); Properties prop = new Properties(); prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); int ligne = simulation + param_first; int mod = (int)matrix.getValue(ligne, name); double [] result = StringUtil.toArrayDouble(prop.getProperty(""+mod).split(";")); return result; } /** * @param name le nom de l'element a recuperer * @param simulation le numero de la simulation * @return */ private String getString(String name, int simulation) throws Exception { File dir = new File(param_directory); Properties prop = new Properties(); prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); int ligne = simulation + param_first; int mod = (int)matrix.getValue(ligne , name); String result = prop.getProperty(""+mod); return result; } /** * Call before each simulation * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ public boolean beforeSimulation(AnalysePlanContext context, SimulationStorage nextSimulation) throws Exception { //String [] values = new String[]{"ParameterValue"};// values devient un parametre du plan d analyse int simNum = context.getNumber(); if (simNum < param_simulationNumber+1) { double ParameterValue = getDouble (PAR_VALUE, simNum); TopiaContext tx = nextSimulation.getStorage().beginTransaction(); PopulationDAO popDAO = IsisFishDAOHelper.getPopulationDAO(tx); Population pop = popDAO.findByName("CSar"); List groups = pop.getPopulationGroup(); MetierDAO metierDAO = IsisFishDAOHelper.getMetierDAO(tx); List metiers = metierDAO.findAll(); GearDAO gearDAO = IsisFishDAOHelper.getGearDAO(tx); List gears = gearDAO.findAll(); for(Metier metier : metiers){ log.info("metier examin� " + metier.getName() + " son engin " + metier.getGear().getName()); String str1 = String.valueOf(ParameterValue); //System.out.println( "str1 = " + str1 ); String str2 = Double.toString(ParameterValue); //System.out.println( "str2 = " + str2 ); if ("FiletMer".equals(metier.getName()) || "FiletRreserve".equals(metier.getName())){ metier.setGearParameterValue(str2); } } tx.commitTransaction(); return true; } else { return false; } } public boolean afterSimulation(AnalysePlanContext context, SimulationStorage lastSimulation) throws Exception { return true; } }