diff --git a/data/input/northeastamerica/RIO_obs_NEA.xml b/data/input/northeastamerica/RIO_obs_NEA.xml index edb3efbbc333bd2a3eb6422c460511d4fdfc2be2..8e241cba58bc342a3735662fc9edc2cfc573b412 100644 --- a/data/input/northeastamerica/RIO_obs_NEA.xml +++ b/data/input/northeastamerica/RIO_obs_NEA.xml @@ -1,11 +1,16 @@ <hashtable> <entry> - <java-class>fr.cemagref.simaqualife.kernel.AquaticWorld</java-class> + <!-- + + <java-class>fr.cemagref.simaqualife.kernel.AquaticWorld</java-class>--> + <java-class>environment.RIOBasinNetworkWithContinent</java-class> + <fr.cemagref.observation.kernel.ObservablesHandler> <observers> <environment.RIOBasinNetworkObserverWithContinent> <title>North East America</title> <threshold>1000000</threshold> + <colorScaleEnum>RedsScale</colorScaleEnum> </environment.RIOBasinNetworkObserverWithContinent> <environment.RIOBasinNetworkObserverPresence> diff --git a/src/main/java/environment/RIOBasinNetwork.java b/src/main/java/environment/RIOBasinNetwork.java index 9a7d5981011f84dcbb0fabd115262f3a4d212712..382149f89d152c08835748388410de6a89654c9f 100644 --- a/src/main/java/environment/RIOBasinNetwork.java +++ b/src/main/java/environment/RIOBasinNetwork.java @@ -36,6 +36,7 @@ public abstract class RIOBasinNetwork extends BasinNetwork { @InitTransientParameters public void initTransientParameters(Pilot pilot) { time = new Time(); + } diff --git a/src/main/java/environment/RIOBasinNetworkObserverWithContinent.java b/src/main/java/environment/RIOBasinNetworkObserverWithContinent.java index 26bcb8c9b528375ca162fc2c6be453123daa66db..75bed1b8d06b1faa2e9f455143b3ba8121a30f7c 100644 --- a/src/main/java/environment/RIOBasinNetworkObserverWithContinent.java +++ b/src/main/java/environment/RIOBasinNetworkObserverWithContinent.java @@ -41,7 +41,7 @@ public class RIOBasinNetworkObserverWithContinent extends ObserverListener private double threshold = 13000000.; @Description(name = "Color scale", tooltip = "") - public ColorScaleEnum colorScaleEnum = ColorScaleEnum.RedsScale; + private ColorScaleEnum colorScaleEnum = ColorScaleEnum.RedsScale; // a basin network private transient RIOBasinNetworkWithContinent bn; @@ -299,7 +299,9 @@ public class RIOBasinNetworkObserverWithContinent extends ObserverListener for (DiadromousFishGroup group : basin.getGroups()) { abundance += basin.getEffective(group); } - // System.out.println(basin.getName()+ "-->"+abundance); + if (basin instanceof RiverBasin & abundance > 0) + System.out.println(" " + basin.getName() + " (" + basin.getClass().getSimpleName() + ") -->" + abundance); + if (abundance == 0.) { g.setColor(Color.WHITE); } else { diff --git a/src/main/java/environment/RIOBasinNetworkWithContinent.java b/src/main/java/environment/RIOBasinNetworkWithContinent.java index c8fa15064c85db77c7977f94053c93d7088fd145..990a67f83422532404809eb7a73fec1d7805a58e 100644 --- a/src/main/java/environment/RIOBasinNetworkWithContinent.java +++ b/src/main/java/environment/RIOBasinNetworkWithContinent.java @@ -24,6 +24,7 @@ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import environment.OffshoreBasin.OffshoreBasinFunction; +import fr.cemagref.observation.kernel.ObservablesHandler; import fr.cemagref.simaqualife.kernel.util.TransientParameters.InitTransientParameters; import fr.cemagref.simaqualife.pilot.Pilot; import miscellaneous.QueueMemoryMap; @@ -55,6 +56,13 @@ public class RIOBasinNetworkWithContinent extends RIOBasinNetwork { private transient Map<String, Path2D.Double> mapContinent; + protected transient ObservablesHandler cobservable; + + + public ObservablesHandler getCobservable() { + return cobservable; + } + class Record implements Comparable<Record> { private int order; @@ -215,6 +223,10 @@ public class RIOBasinNetworkWithContinent extends RIOBasinNetwork { super.initTransientParameters(pilot); + if (cobservable == null) { + cobservable = pilot.addObservable(this.getClass()); + } + FileReader reader; Scanner scanner; @@ -382,13 +394,13 @@ public class RIOBasinNetworkWithContinent extends RIOBasinNetwork { System.out.println(" " + fields[i] + " \t<-> " + headers[i]); while (scanner.hasNextLine()) { - fields = scanner.nextLine().split(","); - + fields = scanner.nextLine().split(","); + basin_id = Integer.valueOf(fields[0]); // gid name = fields[1]; function = fields[2]; - //System.out.println(basin_id + " " + name); - + // System.out.println(basin_id + " " + name); + OffshoreBasin offshorebasin = new OffshoreBasin(basin_id, name, OffshoreBasinFunction.valueOf(function)); if (mapOffshoreBasin != null) { diff --git a/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java b/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java index b3d01bd71ba5a71af719753fcc2f0aa0a5268149..f231f1ababdec40a0a87c3a96396c6ba25148cab 100644 --- a/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java +++ b/src/main/java/species/DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin.java @@ -11,10 +11,10 @@ import org.openide.util.lookup.ServiceProvider; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; -import environment.RIOBasinNetwork; -import environment.RiverBasin; import environment.InshoreBasin; import environment.RIOBasinNetwork; +import environment.RIOBasinNetworkWithContinent; +import environment.RiverBasin; import environment.Time; import environment.Time.Season; import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; @@ -142,7 +142,7 @@ public class DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin extends Di for (InshoreBasin departure : group.getEnvironment().getSeaBasins()) { - RiverBasin homingDestination = (RiverBasin) bn.getAssociatedRiverBasin(departure); + RiverBasin homingDestination = bn.getAssociatedRiverBasin(departure); List<DiadromousFish> fishes = departure.getFishs(group); if (fishes != null) { @@ -248,10 +248,16 @@ public class DisperseAndMigrateToRiverWithMultiNomDistriAndDeathBasin extends Di } } } + System.out.println(this.getClass().getSimpleName()); System.out.println(" total abundance in river basins: " + group.getFishEffective()); - System.out.println( - "female spawners: " + group.getFemaleSpawnerEffective() + " \tmale spawners: " + group.getMaleSpawnerEffective()); + System.out.println(" female spawners: " + group.getFemaleSpawnerEffective() + " \tmale spawners: " + + group.getMaleSpawnerEffective()); + + // -------------------------------------------------------------------------------------------------- + // update the observers + // ------------------------------------------------------------------------------------------------------ + ((RIOBasinNetworkWithContinent) group.getEnvironment()).getCobservable().fireChanges((group.getEnvironment()), + pilot.getCurrentTime()); } } } - diff --git a/src/main/java/species/MigrateBetweenOffshores.java b/src/main/java/species/MigrateBetweenOffshores.java index d804ad0ed5b296282b05f598874d85ee88d232a9..b2425034c638162172211fff1bc9ad607991cfbc 100644 --- a/src/main/java/species/MigrateBetweenOffshores.java +++ b/src/main/java/species/MigrateBetweenOffshores.java @@ -1,51 +1,46 @@ package species; +import java.util.List; +import java.util.ListIterator; + +import org.openide.util.lookup.ServiceProvider; + import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import environment.Basin; import environment.OffshoreBasin; +import environment.RIOBasinNetworkWithContinent; import environment.RiverBasin; -import environment.Time; -import environment.OffshoreBasin.OffshoreBasinFunction; import environment.Time.Season; import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; -import species.DiadromousFish.Stage; - -import java.util.List; -import java.util.ListIterator; - -import org.geotools.data.FeatureEvent.Type; -import org.openide.util.lookup.ServiceProvider; @ServiceProvider(service = AquaNismsGroupProcess.class) public class MigrateBetweenOffshores extends AquaNismsGroupProcess<DiadromousFish, DiadromousFishGroup> { - /** * Season to migrate from summering to winteringOffshoreBasin */ - private Season migrationSeasonToReachWinteringOffshore = Season.AUTOMN; + private Season migrationSeasonToReachWinteringOffshore = Season.AUTOMN; /** - * Season to migrate from wintering to summeringOffshoreBasin + * Season to migrate from wintering to summeringOffshoreBasin */ - private Season migrationSeasonToReachSummeringOffshore = Season.SPRING; + private Season migrationSeasonToReachSummeringOffshore = Season.SPRING; public static void main(String[] args) { - System.out.println((new XStream(new DomDriver())) - .toXML(new MigrateBetweenOffshores())); + System.out.println((new XStream(new DomDriver())).toXML(new MigrateBetweenOffshores())); } + @Override public void doProcess(DiadromousFishGroup group) { - Basin destination = null; + Basin destination = null; if (group.getEnvironment().getTime().getSeason(group.getPilot()) == migrationSeasonToReachWinteringOffshore) { - for (OffshoreBasin summeringOffshoreBasin : group.getEnvironment().getSummeringOffshoreBasins()) { List<DiadromousFish> fishInSummeringOffshoreBasin = summeringOffshoreBasin.getFishs(group); @@ -56,7 +51,8 @@ public class MigrateBetweenOffshores extends AquaNismsGroupProcess<DiadromousFis DiadromousFish fish = fishIterator.next(); - //TODO find a more generic way to memorized a basin which differs from riverBasin (i.e. catadromous fish) + // TODO find a more generic way to memorized a basin which differs from riverBasin (i.e. + // catadromous fish) destination = ((RiverBasin) fish.getMemorisedBasin()).getConnectedWinteringOffshoreBasin(); fish.setPosition(destination); @@ -66,8 +62,14 @@ public class MigrateBetweenOffshores extends AquaNismsGroupProcess<DiadromousFis } } } - } - else if (group.getEnvironment().getTime().getSeason(group.getPilot()) == migrationSeasonToReachSummeringOffshore) { + + // -------------------------------------------------------------------------------------------------- + // update the observers + // ------------------------------------------------------------------------------------------------------ + ((RIOBasinNetworkWithContinent) group.getEnvironment()).getCobservable().fireChanges((group.getEnvironment()), + pilot.getCurrentTime()); + + } else if (group.getEnvironment().getTime().getSeason(group.getPilot()) == migrationSeasonToReachSummeringOffshore) { for (OffshoreBasin winteringOffshoreBasin : group.getEnvironment().getWinteringOffshoreBasins()) { @@ -79,7 +81,8 @@ public class MigrateBetweenOffshores extends AquaNismsGroupProcess<DiadromousFis DiadromousFish fish = fishIterator.next(); - //TODO find a more generic way to memorized a basin which differs from riverBasin (i.e. catadromous fish) + // TODO find a more generic way to memorized a basin which differs from riverBasin (i.e. + // catadromous fish) destination = ((RiverBasin) fish.getMemorisedBasin()).getConnectedSummeringOffshoreBasin(); // add fish with its new position to destination basin @@ -90,6 +93,11 @@ public class MigrateBetweenOffshores extends AquaNismsGroupProcess<DiadromousFis } } } + // -------------------------------------------------------------------------------------------------- + // update the observers + // ------------------------------------------------------------------------------------------------------ + ((RIOBasinNetworkWithContinent) group.getEnvironment()).getCobservable().fireChanges((group.getEnvironment()), + pilot.getCurrentTime()); } } } \ No newline at end of file