Author: bpoussin Date: 2014-12-03 14:04:24 +0000 (Wed, 03 Dec 2014) New Revision: 4138 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4138 Log: - EquationReproduction can be stock/recruitment equation - remove migration in PopulationMonitor Added: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV43V44.java Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationRecruitmentUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java 2014-12-03 13:59:09 UTC (rev 4137) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/DatabaseMigrationClass.java 2014-12-03 14:04:24 UTC (rev 4138) @@ -51,6 +51,7 @@ protected static final Version VERSION_41 = new Version("4.1"); protected static final Version VERSION_421 = new Version("4.2.1"); protected static final Version VERSION_43 = new Version("4.3"); + protected static final Version VERSION_44 = new Version("4.4"); public DatabaseMigrationClass() { super(new MigrationResolver()); @@ -76,6 +77,8 @@ result = MigrationV41V421.class; } else if (version.equals(VERSION_43)) { result = MigrationV421V43.class; + } else if (version.equals(VERSION_44)) { + result = MigrationV43V44.class; } return result; } @@ -87,7 +90,7 @@ */ @Override public Version[] getAvailableVersions() { - Version[] result = new Version[] { VERSION_32, VERSION_33, VERSION_40, VERSION_41, VERSION_421, VERSION_43}; + Version[] result = new Version[] { VERSION_32, VERSION_33, VERSION_40, VERSION_41, VERSION_421, VERSION_43, VERSION_44}; return result; } Copied: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV43V44.java (from rev 4135, trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV41V421.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV43V44.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV43V44.java 2014-12-03 14:04:24 UTC (rev 4138) @@ -0,0 +1,65 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Ifremer, Codelutin, Chatellier Eric + * %% + * 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>. + * #L% + */ + +package fr.ifremer.isisfish.datastore.migration; + +import java.util.List; + +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.migration.TopiaMigrationCallbackByClass; +import org.nuiton.topia.migration.TopiaMigrationCallbackByClass.MigrationCallBackForVersion; +import org.nuiton.util.Version; + +/** + * Migration between version 4.3 and 4.4. + * + * @author poussin + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class MigrationV43V44 extends MigrationCallBackForVersion { + + /** + * Constructor. + * + * @param version version + * @param callback callback + */ + public MigrationV43V44(Version version, TopiaMigrationCallbackByClass callback) { + super(version, callback); + } + + /* + * @see org.nuiton.topia.migration.TopiaMigrationCallbackByClass.MigrationCallBackForVersion#prepareMigrationScript(org.nuiton.topia.framework.TopiaContextImplementor, java.util.List, boolean, boolean) + */ + @Override + protected void prepareMigrationScript(TopiaContextImplementor tx, + List<String> queries, boolean showSql, boolean showProgression) + throws TopiaException { + + queries.add("alter table POPULATION add column IF NOT EXISTS reproductionEquationIsRecruitment boolean default false"); + } +} Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java 2014-12-03 13:59:09 UTC (rev 4137) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/PopulationMonitor.java 2014-12-03 14:04:24 UTC (rev 4138) @@ -199,24 +199,26 @@ * @param pop */ public void applyReproductionMortality(Population pop) { - for (MatrixND reproduction : reproductions.get(pop).values()) { - if (log.isTraceEnabled()) { - log.trace("Matrix repro before mortality: " + reproduction); - } + if (!pop.isReproductionEquationIsRecruitment()){ + for (MatrixND reproduction : reproductions.get(pop).values()) { + if (log.isTraceEnabled()) { + log.trace("Matrix repro before mortality: " + reproduction); + } - for (MatrixIterator mi = reproduction.iteratorNotZero(); mi.next();) { - Object[] sems = mi.getSemanticsCoordinates(); - Zone z = (Zone) sems[0]; - double coeff = pop.getNaturalDeathBirth(z); + for (MatrixIterator mi = reproduction.iteratorNotZero(); mi.next();) { + Object[] sems = mi.getSemanticsCoordinates(); + Zone z = (Zone) sems[0]; + double coeff = pop.getNaturalDeathBirth(z); + if (log.isTraceEnabled()) { + log.trace("NaturalDeath zone " + z + "=" + coeff); + } + mi.setValue(mi.getValue() + * Math.exp(-coeff / Month.NUMBER_OF_MONTH)); + } if (log.isTraceEnabled()) { - log.trace("NaturalDeath zone " + z + "=" + coeff); + log.trace("Matrix repro after mortality: " + reproduction); } - mi.setValue(mi.getValue() - * Math.exp(-coeff / Month.NUMBER_OF_MONTH)); } - if (log.isTraceEnabled()) { - log.trace("Matrix repro after mortality: " + reproduction); - } } } @@ -286,7 +288,7 @@ } } - if (pop.getSpecies().isAgeGroupType()) { + if (pop.getSpecies().isAgeGroupType() && !pop.isReproductionEquationIsRecruitment()) { // conversion et retour de la matrice en vecteur MatrixND N = pop.N2DToN1D(result); // on applique les migrations et le changement d'age sur le resultat @@ -314,7 +316,8 @@ for (PopulationSeasonInfo info : usedSeasons) { Month month = info.getFirstMonth(); MatrixND CA = info.getGroupChangeMatrix(month); - MatrixND MI = info.getMigrationMatrix(month, result); + // poussin 20141203 never applicate migration (S.Mahevas, S.Lehuta) +// MatrixND MI = info.getMigrationMatrix(month, result); MatrixND tmp0 = N.mult(CA); MatrixND tmp2 = tmp0.mult(MI); N = tmp2; Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationRecruitmentUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationRecruitmentUI.jaxx 2014-12-03 13:59:09 UTC (rev 4137) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationRecruitmentUI.jaxx 2014-12-03 14:04:24 UTC (rev 4138) @@ -89,6 +89,25 @@ <cell fill='both' weightx='1.0' weighty='1.0'> <Table> <row> + <cell fill='horizontal' weightx='0.5'> + <JRadioButton id="radioPopulationRecruitmentEquationIsReproduction" + buttonGroup="radioPopulationRecruitmentEquationType" + selected='{getBean().isReproductionEquationIsRecruitment()}' + enabled='{isActive()}' + text="isisfish.populationRecruitment.reproductionEquationIsReproduction" + onActionPerformed='getBean().setReproductionEquationIsRecruitment(!radioPopulationRecruitmentEquationIsRecruitment.isSelected())' + decorator='boxed' /> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JRadioButton id="radioPopulationRecruitmentEquationIsRecruitment" + buttonGroup="radioPopulationRecruitmentEquationType" + selected='{getBean().isReproductionEquationIsRecruitment()}' + enabled='{isActive()}' + text="isisfish.populationRecruitment.reproductionEquationIsRecruitment" + onActionPerformed='getBean().setReproductionEquationIsRecruitment(radioPopulationRecruitmentEquationIsRecruitment.isSelected())' + decorator='boxed' /> + </cell> + <cell columns='2' fill='both' weightx='1.0' weighty='0.5'> <InputOneEquationUI id='reproductionEquation' constructorParams='this' text='isisfish.populationRecruitment.reproductionEquation' active="{isActive()}" Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java 2014-12-03 13:59:09 UTC (rev 4137) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/input/check/CheckRegion.java 2014-12-03 14:04:24 UTC (rev 4138) @@ -315,7 +315,10 @@ check(group, result); } } - if (pop.getMonthGapBetweenReproRecrutement() < 0) { + int gap = pop.getMonthGapBetweenReproRecrutement(); + List<PopulationGroup> groups = pop.getPopulationGroup(); + if (gap < 0 || (pop.getSpecies().isAgeGroupType() && !groups.isEmpty() + && gap <= groups.get(0).getAge() * Month.NUMBER_OF_MONTH )) { result.addWarning(pop, t("isisfish.error.invalid.interval.reproduction.recruitment")); } if (isNullMatrix(pop.getMappingZoneReproZoneRecru())) {