<?xml version="1.0" encoding="ISO-8859-15"?>
<dbobjects version='2.3'>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1148989930335#0.9235871808434286'>
    <attribute name='actionApres'>p.CalculTac=false;
p.CaptureCumulee=0;
writeln(&quot;*$*$*$* TAC.actionApres:&quot;+p.date+&quot; metapop:&quot;+p.metapop+&quot; metier:&quot;+p.metier);
if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)){
  writeln (&quot;affectation &quot;+p.affectation);    
  if (!p.affectation){
        writeln(&quot;*$*$*$* ok affect capture au rejet&quot;);
  // ATTENTION        
  // les captures pour cette metapop ne sont plus du qu&apos;au metier pour qui 
  // l&apos;espece est secondaire: elles sont affectees aux rejets

  //pb : ne se fait pas par metier
  //il faut une matrice pour chaques pas de temps qui stocke les rejets 
  //par metier, par metapop et par classes d&apos;age (comme pour les captures)
  //////
        Regle_action_lib.affecterCaptureRejet(p.date, p.metapop, p.suivie, p.metier);

  //on a affecte une fois cette meta pop au rejet il ne faut pas le refaire
	p.affectation=true;
  }
}

return p.gestionMetier;
</attribute>
    <attribute name='actionAvant'>var Chaine=Packages.java.lang.String;

p.affectation=false;
writeln(&quot;Action avant&quot;);
var metier=p.metier;
writeln(&quot;le metier vise par le tac : &quot;+metier);

if(Regle_libUtil.isCapturePrincipaleDate(p.date,p.metapop, p.metier)){
	// recupere tous les metiers qui ont l&apos;espece en capture principale =&gt;metiers vises
	var ListeMetiersVises = Regle_libUtil.getMetiersVises(p.date,p.metapop);


	writeln(&quot;le m�tier a l&apos;esp�ce en capture principale&quot;);
	MetiersInterdits.put(new Chaine(p.metier.getNom()),true);
		//r�cupere toutes les strat�gies pratiquant le m�tier et pour lesquelles la proportion !=0
	var ListeStrat=new Packages.org.codelutin.dbobject.DBCollection(StrategyFactory);
	var AllStrat=SiMatrice.getListStrategies();
	for (var str=0; str&lt;AllStrat.size();str++){
		var strat=AllStrat.get(str);
		var vessels=strat.getSetOfVessels();
		if (vessels.getMetiers().contains(p.metier)){
			var proportion=strat.getStrategyMonthInfo(p.date.getMois()).getProportionMetier(p.metier) //on recupere la proportion d&apos;effort attribue au metier
			if (proportion!=0){
				ListeStrat.add(strat);//permet d&apos;obtenir une liste sans doublon
			}
		}
	}

	for (var str=0;str&lt;ListeStrat.size();str++){
		var Strat=ListeStrat.get(str);
		var StratMonthInfo=Strat.getStrategyMonthInfo(p.date.getMois());
 //1er cas de figure: l&apos;effort est reporte sur un metier de la meme strategie, n&apos;ayant pas l&apos;espece comme capture principale et pechant avec le meme engin
		var MetiersPossibles=Regle_libUtil.MetierSubstStratEnginNonvisePrat(Strat,StratMonthInfo,ListeMetiersVises,p.metier);
  
  //on repartit maintenant l&apos;effort entre les differents metiers possibles dans la meme strategie si un metier possible existe bien
  // la repartion est proportionnelle e l&apos;effort deje allouer dans la strategie
		if (MetiersPossibles.size()!=0){
			Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);			
		}
///////////////////////////////
// second cas de figure: on cherche un metier de substitution sans condition sur les engins, mais qui soit pratique
		else{
			MetiersPossibles=Regle_libUtil.MetierSubstStratNonvisePrat(Strat,StratMonthInfo,ListeMetiersVises);
  // on repartit l&apos;effort entre les eventuels metiers de substitution,
  // la repartion est proportionnelle e l&apos;effort deje allouer dans la strategie
			if (MetiersPossibles.size()!=0){
				Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);
			}
  
///////3 eme cas de figure: on cherche des metiers non vises, sans consideration sur les engins, et pour lesquels la proportion peut etre nulle

			else {
				MetiersPossibles=Regle_libUtil.MetierSubstStratNonvise(Strat,ListeMetiersVises);
			// les eventuels metiers de substitution ayant des proportions nulles, on repartit l&apos;effort uniformement
				if (MetiersPossibles.size()!=0){
					Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);
				}

/////sinon on met tout dans le metier nonActivite
				else{
					var matNonActivite=nonActivite.get(p.date);
					var nonactivite=matNonActivite!=null;
					if (!nonactivite){
						matNonActivite=MatrixFactory.create(&quot;nonActivite&quot;,new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
						,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
						nonActivite.put(p.date,matNonActivite);
					}
				       matNonActivite.setValue(Strat,p.metier,InfoMois.getProportionMetier(p.metier));
     				       StratMonthInfo.setProportionMetier(p.metier,new Packages.java.lang.Float(0));
				}
			}
		}
	}
}
       
    
return p.gestionMetier;
</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>//on fait le calcul du tac si n�cessaire
if (p.CalculTac==false &amp;&amp; p.date.getMois().getNumMois==0){
	p.TACAn=Regle_libUtil.CalculBiomasse(p.suivie,metapop)*proportion;
	p.CalculTac=true;
}	


// si oldValue existe on est dans la condition pour actionApres.
// il faut donc reprendre oldValue comme valeur de retour
writeln(&quot;Recherche si le tac s&apos;applique (oldValue=&quot;+oldValue);
var result = false;
if(oldValue != undefined)
  result = oldValue;
else if(p.date.before(p.dateDeb))
  result = false;
else if(p.date.after(p.dateFin))
  result = false;
else if(p.CaptureCumulee==0 &amp;&amp; p.date.getMois().getNumMois()!=0){
	p.CaptureCumulee=Regle_action_lib.totalCcumpoids(p.suivie,p.metapop);
	if (p.CaptureCumulee&gt;= p.TACAn){
		writeln(&quot;Tac atteind&quot;);
		if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)) result = true;
	}
}
else if (p.CaptureCumulee&gt;= p.TACAn){
	writeln(&quot;Tac atteind&quot;);
	if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)) result = true;
}
		
		



writeln(&quot;fin de condition TAC:&quot;+result);
return result;
</attribute>
    <attribute name='constructor'>this.param = param;

this.p = new Object();

writeln(&quot;Init du TAC&quot;);
//objet comprenant: TACAn,metapop,dateDeb,dateFin
this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);
this.p.proportion = this.param.getValue(&quot;proportion&quot;);
this.p.CaptureCumulee=0; //permet de v�rifier si le calcul de la capture cumul�e a d�j� �t� fait
writeln(&quot;recuperation de la meta pop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.affectation=false; //controle si les captures ont bien ete mises au rejet
this.p.CalculTac=false; //savoir si le calcul du TAC a ete fait ou non
this.p.TACAn=0;
writeln(&quot;TAC de :&quot;+this.p.dateDeb+&quot;-&quot;+this.p.dateFin+&quot; &quot;+this.p.TACAn+&quot; sur &quot;+this.p.metapop);
</attribute>
    <attribute name='nom'>TACpropBiomasse</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;metapop&quot; type=&quot;MetaPopulationFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;119&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;proportion&quot; type=&quot;Double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.1&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1148910010317#0.248111742656404'>
    <attribute name='actionApres'>p.CaptureCumulee=0;
writeln(&quot;*$*$*$* TAC.actionApres:&quot;+p.date+&quot; metapop:&quot;+p.metapop+&quot; metier:&quot;+p.metier);
if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)){
  writeln (&quot;affectation &quot;+p.affectation);    
  if (!p.affectation){
        writeln(&quot;*$*$*$* ok affect capture au rejet&quot;);
  // ATTENTION        
  // les captures pour cette metapop ne sont plus du qu&apos;au metier pour qui 
  // l&apos;espece est secondaire: elles sont affectees aux rejets

  //pb : ne se fait pas par metier
  //il faut une matrice pour chaques pas de temps qui stocke les rejets 
  //par metier, par metapop et par classes d&apos;age (comme pour les captures)
  //////
        Regle_action_lib.affecterCaptureRejetSurvie(p.date, p.metapop, p.suivie, p.metier);

  //on a affecte une fois cette meta pop au rejet il ne faut pas le refaire
	p.affectation=true;
  }
}

return p.gestionMetier;
</attribute>
    <attribute name='actionAvant'>var Chaine=Packages.java.lang.String;

p.affectation=false;
writeln(&quot;Action avant&quot;);
var metier=p.metier;
writeln(&quot;le metier vise par le tac : &quot;+metier);

if(Regle_libUtil.isCapturePrincipaleDate(p.date,p.metapop, p.metier)){
	// recupere tous les metiers qui ont l&apos;espece en capture principale =&gt;metiers vises
	var ListeMetiersVises = Regle_libUtil.getMetiersVises(p.date,p.metapop);


	writeln(&quot;le m�tier a l&apos;esp�ce en capture principale&quot;);
	MetiersInterdits.put(new Chaine(p.metier.getNom()),true);
		//r�cupere toutes les strat�gies pratiquant le m�tier et pour lesquelles la proportion !=0
	var ListeStrat=new Packages.org.codelutin.dbobject.DBCollection(StrategyFactory);
	var AllStrat=SiMatrice.getListStrategies();
	for (var str=0; str&lt;AllStrat.size();str++){
		var strat=AllStrat.get(str);
		var vessels=strat.getSetOfVessels();
		if (vessels.getMetiers().contains(p.metier)){
			var proportion=strat.getStrategyMonthInfo(p.date.getMois()).getProportionMetier(p.metier) //on recupere la proportion d&apos;effort attribue au metier
			if (proportion!=0){
				ListeStrat.add(strat);//permet d&apos;obtenir une liste sans doublon
			}
		}
	}

	for (var str=0;str&lt;ListeStrat.size();str++){
		var Strat=ListeStrat.get(str);
		var StratMonthInfo=Strat.getStrategyMonthInfo(p.date.getMois());
 //1er cas de figure: l&apos;effort est reporte sur un metier de la meme strategie, n&apos;ayant pas l&apos;espece comme capture principale et pechant avec le meme engin
		var MetiersPossibles=Regle_libUtil.MetierSubstStratEnginNonvisePrat(Strat,StratMonthInfo,ListeMetiersVises,p.metier);
  
  //on repartit maintenant l&apos;effort entre les differents metiers possibles dans la meme strategie si un metier possible existe bien
  // la repartion est proportionnelle e l&apos;effort deje allouer dans la strategie
		if (MetiersPossibles.size()!=0){
			Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);			
		}
///////////////////////////////
// second cas de figure: on cherche un metier de substitution sans condition sur les engins, mais qui soit pratique
		else{
			MetiersPossibles=Regle_libUtil.MetierSubstStratNonvisePrat(Strat,StratMonthInfo,ListeMetiersVises);
  // on repartit l&apos;effort entre les eventuels metiers de substitution,
  // la repartion est proportionnelle e l&apos;effort deje allouer dans la strategie
			if (MetiersPossibles.size()!=0){
				Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);
			}
  
///////3 eme cas de figure: on cherche des metiers non vises, sans consideration sur les engins, et pour lesquels la proportion peut etre nulle

			else {
				MetiersPossibles=Regle_libUtil.MetierSubstStratNonvise(Strat,ListeMetiersVises);
			// les eventuels metiers de substitution ayant des proportions nulles, on repartit l&apos;effort uniformement
				if (MetiersPossibles.size()!=0){
					Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);
				}

/////sinon on met tout dans le metier nonActivite
				else{
					var matNonActivite=nonActivite.get(p.date);
					var nonactivite=matNonActivite!=null;
					if (!nonactivite){
						matNonActivite=MatrixFactory.create(&quot;nonActivite&quot;,new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
						,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
						nonActivite.put(p.date,matNonActivite);
					}
				       matNonActivite.setValue(Strat,p.metier,InfoMois.getProportionMetier(p.metier));
     				       StratMonthInfo.setProportionMetier(p.metier,new Packages.java.lang.Float(0));
				}
			}
		}
	}
}
       
    
return p.gestionMetier;
</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>// si oldValue existe on est dans la condition pour actionApres.
// il faut donc reprendre oldValue comme valeur de retour
writeln(&quot;Recherche si le tac s&apos;applique (oldValue=&quot;+oldValue);
var result = false;
if(oldValue != undefined)
  result = oldValue;
else if(p.date.before(p.dateDeb))
  result = false;
else if(p.date.after(p.dateFin))
  result = false;
else if(p.CaptureCumulee==0 &amp;&amp; p.date.getMois().getNumMois()!=0){
	p.CaptureCumulee=Regle_action_lib.totalCcumpoids(p.suivie,p.metapop);
	if (p.CaptureCumulee&gt;= p.TACAn){
		writeln(&quot;Tac atteind&quot;);
		if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)) result = true;
	}
}
else if (p.CaptureCumulee&gt;= p.TACAn){
	writeln(&quot;Tac atteind&quot;);
	if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)) result = true;
}
		
		



writeln(&quot;fin de condition TAC:&quot;+result);
return result;
</attribute>
    <attribute name='constructor'>this.param = param;

this.p = new Object();

writeln(&quot;Init du TAC&quot;);
//objet comprenant: TACAn,metapop,dateDeb,dateFin
this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);
this.p.TACAn = this.param.getValue(&quot;TAC(tonnes)&quot;);
this.p.CaptureCumulee=0; //permet de v�rifier si le calcul de la capture cumul�e a d�j� �t� fait
writeln(&quot;recuperation de la meta pop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.affectation=false; //contr��le si les captures ont bien ��t�� mises au rejet

writeln(&quot;TAC de :&quot;+this.p.dateDeb+&quot;-&quot;+this.p.dateFin+&quot; &quot;+this.p.TACAn+&quot; sur &quot;+this.p.metapop);
</attribute>
    <attribute name='nom'>TACpoidsSurvieRejet</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;metapop&quot; type=&quot;MetaPopulationFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;119&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propSurvie&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.5&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;Tac(tonnes)&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;1000.0&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1148905827026#0.34948287615519347'>
    <attribute name='actionApres'>


writeln(&quot;*$*$*$* TailleMin.actionApres:&quot;+p.date+&quot; metapop:&quot;+p.metapop+&quot; metier:&quot;+p.metier);
if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)){    
  writeln(&quot;*$*$*$* ok affecte capture inf��rieure �� TailleMin au rejet&quot;);
  // ATTENTION        
  // les captures pour cette metapop ne sont plus du qu&apos;au metier pour qui 
  // l&apos;espece est secondaire: elles sont affectees aux rejets

  //pb : ne se fait pas par metier
  //il faut une matrice pour chaques pas de temps qui stocke les rejets 
  //par metier, par metapop et par classes d&apos;age (comme pour les captures)
  //////
Regle_action_lib.affecterCaptureRejetTailleMinSurvie(p.date, p.metapop, p.suivie, p.metier,p.TailleMin,p.propSurvie);


  //on a affecte une fois cette meta pop au rejet il ne faut pas le refaire
}

return p.gestionMetier;


</attribute>
    <attribute name='actionAvant'>


writeln(&quot;Action avant&quot;);

writeln(&quot;le metier vise par la tailleMin : &quot;+p.metier);
return p.gestionMetier;

</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>
writeln(&quot;Recherche si la taille Minimale s&apos;applique (oldValue=&quot;+oldValue);
var metier=p.metier;
var result = true;
if(oldValue != undefined)
  result = oldValue;
else if (Regle_libUtil.isCaptureDate(p.date,p.metapop, metier)!=true)
	result=false;
else if(p.date.before(p.dateDeb))
  result = false;
else if(p.date.after(p.dateFin))
  result = false;

writeln(&quot;fin de condition TailleMin:&quot;+result);
return result;


</attribute>
    <attribute name='constructor'>this.param = param;

this.p = new Object();

writeln(&quot;Init du TAC&quot;);
//objet comprenant: TACAn,metapop,dateDeb,dateFin
this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);
this.p.TailleMin = this.param.getValue(&quot;TailleMin&quot;);
writeln(&quot;recuperation de la meta pop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.propSurvie=this.param.getValue(&quot;propSurvie&quot;);



</attribute>
    <attribute name='nom'>TailleMinSurvieRejet</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;metapop&quot; type=&quot;MetaPopulationFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;TailleMin&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;27.0&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;119&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propSurvie&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.5&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1127143985486#0.5024464473252701'>
    <attribute name='actionApres'>writeln(&quot;Action apres&quot;);
p.SommeCPUEstrat.clear();
p.SommeProp.clear();
p.CalculCatch=false;
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>writeln(&quot;Gravite Action avant metier:&quot;+p.metier+ &quot;date:&quot;+ p.date);
var Chaine=Packages.java.lang.String;



var month=p.date.getMois();
var allStr = SiMatrice.getListStrategies();
var newPropDiv=0.0;

if (!p.CalculCatch){
	var resultmanager=control.getResultatManager();

	//on commence par creer une matrice de capture par strategie met
	var ListePopulation=SiMatrice.getListPopulations();
	pop=ListePopulation.get(0);
	var CaptureParStrMet=resultmanager.getMatrix(new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12),pop,&quot;matriceCatchWeightPerStrategyMet&quot;);
	CaptureParStrMet=CaptureParStrMet.sumOverDim(3);
	CaptureParStrMet=CaptureParStrMet.sumOverDim(2);
	writeln(CaptureParStrMet);
	for (var ipop=1;ipop&lt;ListePopulation.size();ipop++){
		var pop=ListePopulation.get(ipop);
		var temp=resultmanager.getMatrix(new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12),pop,&quot;matriceCatchWeightPerStrategyMet&quot;);
		temp=temp.sumOverDim(3);
		temp=temp.sumOverDim(2);
		writeln(temp);
		CaptureParStrMet.add(temp);
		writeln(CaptureParStrMet);
	}
			
	var Effort=resultmanager.getMatrix(new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12),&quot;matriceEffortPerStrategyMet&quot;);
	writeln(&quot;on r�cup�re la matrice d&apos;effort&quot;);
	for (var iStrategie=allStr.iterator();iStrategie.hasNext();){
		var Strategie=iStrategie.next();
		var listeMet=Strategie.getSetOfVessels().getMetiers();
		for (imetier=listeMet.iterator();imetier.hasNext();){
			var metier=imetier.next();
			var effort=Effort.getValue(Strategie,metier);
			if (effort&gt;0){
				var effortdesc=Strategie.getSetOfVessels().getEffort(metier);
				var nombreop=effortdesc.getFishingOperation();
				var nombregear=effortdesc.getGearsNumberPerOperation();
				var param=metier.getValeurParamControlable();
				var facteur=metier.getValeurParamControlable()*nombreop*nombregear/24.0;	
				//on restandardise l&apos;effort
				effort/=facteur;
				//on recupere la capture tot
				var dim3=new Packages.java.util.ArrayList(CaptureParStrMet.getSemantics(3));
				var dim2=new Packages.java.util.ArrayList(CaptureParStrMet.getSemantics(2));
				
				var capture=CaptureParStrMet.getValue(Strategie,metier,dim2.get(0),dim3.get(0));
				
				p.CatchperUnitOfEffort.setValue(Strategie,metier,capture/effort);
			}
		}
	}
	p.CalculCatch=true;
}



for(var i=0; i&lt;allStr.size(); i++){
	var str = allStr.get(i);
	var strMonthInfo = str.getStrategyMonthInfo(month);
	var propStrMet = strMonthInfo.getPropStrMetier(p.metier);

	if(str.getSetOfVessels().getMetiers().contains(p.metier)){
//on verifie que le metier est bien un metier possible
		var CPUE=null;
		if (!p.SommeCPUEstrat.containsKey(new Chaine(str.getName()))){
			if (GravityModel.getEffortPerStrategyMet(str, p.metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12))&gt;0){
				CPUE=p.CatchperUnitOfEffort.getValue(str,p.metier);
			}
		}
		if (CPUE!=null){
			writeln(&quot;on a une CPUE l&apos;ann�e n-1, on la met dans l&apos;historique&quot;);
			writeln(strMonthInfo+&quot; &quot;+p.metier);
			p.HistoriqueCPUE.put(new Chaine(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()),CPUE);
		}
		else{
			writeln (&quot;ou calcul d�j� fait ou pas de CPUE � l&apos;ann�e n-1&quot;);
			CPUE=p.HistoriqueCPUE.get(new Chaine(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()));
			if (CPUE!=null){
				writeln (&quot;on a une CPUE dans le pass�: &quot;+CPUE);
			}
			else{
				writeln (&quot;on a pas de CPUE dans le pass�, on remet donc la poportion initiale&quot;);
			}
		}
		if (CPUE!=null) {
//si on a une CPUE, il faut aller voir l&apos;attractivite des autres metiers: 2 cas de figure:
// soit on en retrouve une dans le passe qui est son attractivite
// soit on en retrouve pas et dans ce cas le, la proportion d&apos;effort sera celle initiale de la db
//on a alors newProp=(1-sum(pmet1))*CPUE/somme(CPUEmet2)
//avec pmet1 la proprtion initiale pour les metiers pour lesquels on a pas retrouve de CPUE, CPUEmet2, la CPUE pour les 
//metiers qui ont eu une CPUE dans le passe, et CPUE la CPUE du metier courant
			if (!p.SommeCPUEstrat.containsKey(str.getName())){
				var SommeCPUE=0;
				var PropTot=0;
				var metiers=str.getSetOfVessels().getMetiers();
				for (var imetiers=metiers.iterator();imetiers.hasNext();){
					var metier=imetiers.next();
					var temp=null;
					if (GravityModel.getEffortPerStrategyMet(str, metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12))&gt;0){
						temp=p.CatchperUnitOfEffort.getValue(str,metier);
					}	
					if (temp!=null){
						writeln(&quot;on a une CPUE l&apos;ann�e n-1, on l&apos;ajoute � p.SommeCPUEstrat&quot;);
						p.HistoriqueCPUE.put(new Chaine(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()),CPUE);
						SommeCPUE+=temp;	
					}
					else{
						writeln (&quot;on a pas de CPUE l&apos;ann�e n-1, on regarde si il y en a dans le pass�&quot;);
						temp=p.HistoriqueCPUE.get(new Chaine(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()));
						if (temp!=null){
							writeln (&quot;on a une CPUE dans le pass�: &quot;+temp);
							SommeCPUE+=temp;
						}
						else{
							writeln (&quot;on a pas de CPUE dans le pass�, on l&apos;ajoute donc � p.SommeProp&quot;);
							PropTot+=strMonthInfo.getProportionMetier(metier);
						}
					}
				}
				p.SommeCPUEstrat.put(new Chaine(str.getName()),SommeCPUE);
				p.SommeProp.put(new Chaine(str.getName()),PropTot);
			}
			if (p.SommeCPUEstrat.get(new Chaine(str.getName()))&gt;0){
				newPropDiv = (p.SommePropInitial.get(new Chaine(str.getName()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()))-p.SommeProp.get(new Chaine(str.getName())))*CPUE/ p.SommeCPUEstrat.get(new Chaine(str.getName()));
				writeln(&quot;newpropdiv: &quot;+newPropDiv);
				strMonthInfo.setProportionMetier(p.metier, new Packages.java.lang.Float(newPropDiv));
			}
			else { // c&apos;est le cas e priori quasi impossible oe y a toujours eu une CPUE nulle quelquesoit le metier, dans ce cas le on remet aussi la prop iniitiale
				writeln(&quot;aucun metier n&apos;a d&apos;attractivite, on remet la prop initiale&quot;);
			}
		}
	}
}

writeln(&quot;fin Gravite CPUEAction avant&quot;);
return p.gestionMetier;







</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>// Il faut etre au moins au deuxieme pas de temps.
return p.date.getAnnee() &gt; 0;
</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;
var Chaine=Packages.java.lang.String;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;
this.p.SommeCPUEstrat=new Packages.java.util.HashMap();/*va permettre de stocker a chaque pas de temps la somme des attractivite
							cle:str.getName()*/

this.p.SommeProp=new Packages.java.util.HashMap();/*va permettre de stocker a chaque pas de temps la somme des proportions pour
les metiers n&apos;ayant pas d&apos;attractivite cle:str.getName()*/

this.p.SommePropInitial=new Packages.java.util.HashMap(); //stocke la somme des prop initiales cle:NomStrat-NomMet-NumMois

var allStr = SiMatrice.getListStrategies();

for(var i=0; i&lt;allStr.size(); i++){
	var str=allStr.get(i);
	var metiers=str.getSetOfVessels().getMetiers();
	var ListeStrMonthInfos=str.getStrategyMonthInfos();
	for (var j=0; j&lt;ListeStrMonthInfos.size();j++){
		var somme=0;
		var StrMonthInfo=ListeStrMonthInfos.get(j);
		for (var k=0;k&lt;metiers.size();k++){
			var metier=metiers.get(k);
			somme+=StrMonthInfo.getProportionMetier(metier);
		}
		this.p.SommePropInitial.put(new Chaine(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+StrMonthInfo.getMonth().getNumMois()),somme);
	}
}


this.p.HistoriqueCPUE=new Packages.java.util.HashMap(); //stocke par strat*met, la derni�re attractivite pour chaque mois
							//cle:NomStrat-NomMet-NumMois
this.p.CatchperUnitOfEffort=MatrixFactory.create(&quot;ValuePerUnitOfEffort&quot;,new Array(allStr,SiMatrice.getListMetiers()),new Array(&quot;Strategies&quot;,&quot;Metiers&quot;));
	//permet de stocker les CPUE standardiser
this.p.CalculCatch=false; //permet de savoir si le calcul de la CPUE standardis�e a �t� fait
							</attribute>
    <attribute name='nom'>GraviteCPUE</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;/&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1127478287754#0.036572169278903166'>
    <attribute name='actionApres'>writeln(&quot;Action apres&quot;);
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>var Chaine=Packages.java.lang.String;
writeln(&quot;Action avant&quot;);
var metier=p.metier;
writeln(&quot;le metier vise par l&apos;interdiction : &quot;+metier);


MetiersInterdits.put(new Chaine(p.metier.getNom(),true));
//r�cup�re toutes les strat�gies pratiquant le m�tier et pour lesquelles la proportion !=0
var ListeStrat=new Packages.org.codelutin.dbobject.DBCollection(StrategyFactory);
var Vessels=SetOfVesselsFactory.findAllByRegion(p.metier.getRegion());
for (var ves=0; ves&lt;Vessels.size();ves++){
	if (Vessels.get(ves).getMetiers().contains(p.metier)){
		var listestrattemp=StrategyFactory.findAllBySetOfVessels(Vessels.get(ves)).copy();
		for (var strat=0;strat&lt;listestrattemp.size();strat++){
			var proportion=listestrattemp.get(strat).getStrategyMonthInfo(p.date.getMois()).getProportionMetier(p.metier) //on recupere la proportion d&apos;effort attribue au metier
			if (proportion!=0){
				listestrattemp.removeAll(ListeStrat);
				ListeStrat.addAll(listestrattemp);//permet d&apos;obtenir une liste sans doublon
			}
		}
	}
}



for (iStrat=ListeStrat.iterator();iStrat.hasNext();){
	var Strat=iStrat.next();
	var StratMonthInfo=Strat.getStrategyMonthInfo(p.date.getMois());
  //1er cas:l&apos;effort est reporte sur un metier de la meme strategie, n&apos;ayant pas l&apos;espece comme capture principale et pechant avec le meme engin
	var MetiersPossibles=Strat.getSetOfVessels().getMetiers().copy();
  
    //on verifie que les metiers sont bien pratiques au mois courant, qu&apos;ils n&apos;ont pas le meme ont le meme engin et qu&apos;ils ne sont pas interdits par ailleurs
	for (var imet=MetiersPossibles.iterator();imet.hasNext();){
		var met=imet.next();
		if (StratMonthInfo.getProportionMetier(met)==0 || met.getEngin().equals(p.metier.getEngin()) || met.getNom()==&quot;nonActivite&quot; || MetiersInterdits.containsKey(new Chaine(met.getNom())) || MetiersInterditsPresimu.containsKey(new Chaine(met.getNom()+&quot;-&quot;+p.date.getMois().getNumMois()))){
			MetiersPossibles.remove(met);
		}
	}	
  
  //on repartit maintenant l&apos;effort entre les differents metiers possibles dans la meme strategie si un metier possible existe bien
	if (MetiersPossibles.size()!=0){
		var NbMetier=MetiersPossibles.size();
		for (imet=MetiersPossibles.iterator();imet.hasNext();){
			met=imet.next();
			var NouvelleProportion=StratMonthInfo.getProportionMetier(met)+(StratMonthInfo.getProportionMetier(p.metier)/NbMetier);
			StratMonthInfo.setProportionMetier(met, new Packages.java.lang.Float(NouvelleProportion))
		}
		StratMonthInfo.setProportionMetier(p.metier, new Packages.java.lang.Float(0)) //le metier vise a alors une proportion nulle
	}
//s&apos;il n&apos;y a pas de metier alternatif, on passe a nonActivite
	else{
		var matNonActivite=nonActivite.get(p.date);
		var nonactivite=matNonActivite!=null;
		  if (!nonactivite){
   			 matNonActivite=MatrixFactory.create(&quot;nonActivite&quot;,new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
			,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
			nonActivite.put(p.date,matNonActivite);
		  }
     
	       matNonActivite.setValue(Strat,p.metier,InfoMois.getProportionMetier(p.metier));
		StratMonthInfo.setProportionMetier(p.metier,new Packages.java.lang.Float(0));
	}
}
return p.gestionMetier;</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>writeln(&quot;condition fermeture zone&quot;);
var result=true;
var mois = p.date.getMois().getNumMois();
writeln(&quot;mois:&quot;+mois);
if(!(p.moisDeb&lt;=mois &amp;&amp; mois&lt;=p.moisFin))
  return false;
writeln(&quot;on est dans l&apos;espace des mois possible&quot;);
//on est dans l&apos;espace des mois possible
if(p.date.before(p.dateDeb))
  return false;
if(p.date.after(p.dateFin))
  return false;
if (!p.metier.getEngin().equals(p.engin)) 
  return false;


return result;
</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;

this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);
this.p.moisDeb=this.param.getValue(&quot;moisDeb&quot;);
this.p.moisFin=this.param.getValue(&quot;moisFin&quot;);
this.p.engin=this.param.getValue(&quot;engin&quot;);
</attribute>
    <attribute name='nom'>InterdictionEngin</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;119&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;engin&quot; type=&quot;EnginFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisFin&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;11&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisDeb&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;0&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1124286008624#0.46314236480544235'>
    <attribute name='actionApres'>


writeln(&quot;*$*$*$* TailleMin.actionApres:&quot;+p.date+&quot; metapop:&quot;+p.metapop+&quot; metier:&quot;+p.metier);
if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)){    
  writeln(&quot;*$*$*$* ok affecte capture inf��rieure �� TailleMin au rejet&quot;);
  // ATTENTION        
  // les captures pour cette metapop ne sont plus du qu&apos;au metier pour qui 
  // l&apos;espece est secondaire: elles sont affectees aux rejets

  //pb : ne se fait pas par metier
  //il faut une matrice pour chaques pas de temps qui stocke les rejets 
  //par metier, par metapop et par classes d&apos;age (comme pour les captures)
  //////
Regle_action_lib.affecterCaptureRejetTailleMin(p.date, p.metapop, p.suivie, p.metier,p.TailleMin);


  //on a affecte une fois cette meta pop au rejet il ne faut pas le refaire
}

return p.gestionMetier;


</attribute>
    <attribute name='actionAvant'>


writeln(&quot;Action avant&quot;);

writeln(&quot;le metier vise par la tailleMin : &quot;+p.metier);
return p.gestionMetier;

</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>
writeln(&quot;Recherche si la taille Minimale s&apos;applique (oldValue=&quot;+oldValue);
var metier=p.metier;
var result = true;
if(oldValue != undefined)
  result = oldValue;
else if (Regle_libUtil.isCaptureDate(p.date,p.metapop, metier)!=true)
	result=false;
else if(p.date.before(p.dateDeb))
  result = false;
else if(p.date.after(p.dateFin))
  result = false;

writeln(&quot;fin de condition TailleMin:&quot;+result);
return result;


</attribute>
    <attribute name='constructor'>this.param = param;

this.p = new Object();

writeln(&quot;Init du TAC&quot;);
//objet comprenant: TACAn,metapop,dateDeb,dateFin
this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);
this.p.TailleMin = this.param.getValue(&quot;TailleMin&quot;);
writeln(&quot;recuperation de la meta pop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);



</attribute>
    <attribute name='nom'>TailleMin</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;metapop&quot; type=&quot;MetaPopulationFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;TailleMin&quot; type=&quot;Double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;27.0&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;11&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1127143976693#0.9728342854418929'>
    <attribute name='actionApres'>writeln(&quot;Action apres&quot;);
p.SommeLPUEstrat.clear();
p.SommeProp.clear();
p.CalculLandings=false;
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>writeln(&quot;Gravite Action avant metier:&quot;+p.metier+ &quot;date:&quot;+ p.date);
var Chaine= Packages.java.lang.String;



var month=p.date.getMois();
var allStr = SiMatrice.getListStrategies();
var newPropDiv=0.0;

if (!p.CalculLandings){
	var resultmanager=control.getResultatManager();
	var Effort=resultmanager.getMatrix(new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12),&quot;matriceEffortPerStrategyMet&quot;);
	writeln(&quot;on r�cup�re la matrice d&apos;effort&quot;);
	for (var iStrategie=allStr.iterator();iStrategie.hasNext();){
		var Strategie=iStrategie.next();
		var listeMet=Strategie.getSetOfVessels().getMetiers();
		for (imetier=listeMet.iterator();imetier.hasNext();){
			var metier=imetier.next();
			var effort=Effort.getValue(Strategie,metier);
			if (effort&gt;0){
				var effortdesc=Strategie.getSetOfVessels().getEffort(metier);
				var nombreop=effortdesc.getFishingOperation();
				var nombregear=effortdesc.getGearsNumberPerOperation();
				var param=metier.getValeurParamControlable();
				var facteur=metier.getValeurParamControlable()*nombreop*nombregear/24.0;	
				//on restandardise l&apos;effort
				p.LandingsperUnitOfEffort.setValue(Strategie,metier,facteur*GravityModel.landingPerUnitFishingEffort(Strategie, metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12)));
			}
		}
	}
	p.CalculLandings=true;
}



for(var i=0; i&lt;allStr.size(); i++){
	var str = allStr.get(i);
	var strMonthInfo = str.getStrategyMonthInfo(month);
	var propStrMet = strMonthInfo.getPropStrMetier(p.metier);

	if(str.getSetOfVessels().getMetiers().contains(p.metier)){
//on verifie que le metier est bien un metier possible
		var LPUE=null;
		if (!p.SommeLPUEstrat.containsKey(str.getName())){
			if (GravityModel.getEffortPerStrategyMet(str, p.metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12))&gt;0){
				LPUE=p.LandingsperUnitOfEffort.getValue(str,p.metier);
			}
		}
		if (LPUE!=null){
			writeln(&quot;on a une LPUE l&apos;ann�e n-1, on la met dans l&apos;historique&quot;);
			writeln(strMonthInfo+&quot; &quot;+p.metier);
			p.HistoriqueLPUE.remove(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois());
			p.HistoriqueLPUE.put(new Chaine(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()),LPUE);
		}
		else{
			writeln (&quot;ou calcul d�j� fait ou pas de LPUE � l&apos;ann�e n-1&quot;);
			LPUE=p.HistoriqueLPUE.get(new Chaine(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()));
			if (LPUE!=null){
				writeln (&quot;on a une LPUE dans le pass�: &quot;+LPUE);
			}
			else{
				writeln (&quot;on a pas de LPUE dans le pass�, on remet donc la poportion initiale&quot;);
			}
		}
		if (LPUE!=null) {
//si on a une LPUE, il faut aller voir l&apos;attractivite des autres metiers: 2 cas de figure:
// soit on en retrouve une dans le passe qui est son attractivite
// soit on en retrouve pas et dans ce cas le, la proportion d&apos;effort sera celle initiale de la db
//on a alors newProp=(1-sum(pmet1))*LPUE/somme(LPUEmet2)
//avec pmet1 la proprtion initiale pour les metiers pour lesquels on a pas retrouve de LPUE, LPUEmet2, la LPUE pour les 
//metiers qui ont eu une LPUE dans le passe, et LPUE la LPUE du metier courant
			if (!p.SommeLPUEstrat.containsKey(str.getName())){
				var SommeLPUE=0;
				var PropTot=0;
				var metiers=str.getSetOfVessels().getMetiers();
				for (var imetiers=metiers.iterator();imetiers.hasNext();){
					var metier=imetiers.next();
					var temp=null;
					if (GravityModel.getEffortPerStrategyMet(str, metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12))&gt;0){
						temp=p.LandingsperUnitOfEffort.getValue(str,metier);
					}	
					if (temp!=null){
						writeln(&quot;on a une LPUE l&apos;ann�e n-1, on l&apos;ajoute � p.SommeLPUEstrat&quot;);
						p.HistoriqueLPUE.remove(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois());
						p.HistoriqueLPUE.put(new Chaine(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()),LPUE);
						SommeLPUE+=temp;	
					}
					else{
						writeln (&quot;on a pas de LPUE l&apos;ann�e n-1, on regarde si il y en a dans le pass�&quot;);
						temp=p.HistoriqueLPUE.get(new Chaine(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()));
						if (temp!=null){
							writeln (&quot;on a une LPUE dans le pass�: &quot;+temp);
							SommeLPUE+=temp;
						}
						else{
							writeln (&quot;on a pas de LPUE dans le pass�, on l&apos;ajoute donc � p.SommeProp&quot;);
							PropTot+=strMonthInfo.getProportionMetier(metier);
						}
					}
				}
				p.SommeLPUEstrat.put(new Chaine(str.getName()),SommeLPUE);
				p.SommeProp.put(new Chaine(str.getName()),PropTot);
			}
			if (p.SommeLPUEstrat.get(new Chaine(str.getName()))&gt;0){
				newPropDiv = (p.SommePropInitial.get(new Chaine(str.getName()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()))-p.SommeProp.get(new Chaine(str.getName())))*LPUE/ p.SommeLPUEstrat.get(new Chaine(str.getName()));
				writeln(&quot;newpropdiv: &quot;+newPropDiv);
				strMonthInfo.setProportionMetier(p.metier, new Packages.java.lang.Float(newPropDiv));
			}
			else { // c&apos;est le cas e priori quasi impossible oe y a toujours eu une LPUE nulle quelquesoit le metier, dans ce cas le on remet aussi la prop iniitiale
				writeln(&quot;aucun metier n&apos;a d&apos;attractivite, on remet la prop initiale&quot;);
			}
		}
	}
}

writeln(&quot;fin Gravite LPUEAction avant&quot;);
return p.gestionMetier;







</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>// Il faut etre au moins au deuxieme pas de temps.
return p.date.getAnnee() &gt; 0;
</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;
this.p.SommeLPUEstrat=new Packages.java.util.HashMap();/*va permettre de stocker a chaque pas de temps la somme des attractivite
							cle:str.getName()*/

this.p.SommeProp=new Packages.java.util.HashMap();/*va permettre de stocker a chaque pas de temps la somme des proportions pour
les metiers n&apos;ayant pas d&apos;attractivite cle:str.getName()*/

this.p.SommePropInitial=new Packages.java.util.HashMap(); //stocke la somme des prop initiales cle:NomStrat-NomMet-NumMois

var allStr = SiMatrice.getListStrategies();

for(var i=0; i&lt;allStr.size(); i++){
	var str=allStr.get(i);
	var metiers=str.getSetOfVessels().getMetiers();
	var ListeStrMonthInfos=str.getStrategyMonthInfos();
	for (var j=0; j&lt;ListeStrMonthInfos.size();j++){
		var somme=0;
		var StrMonthInfo=ListeStrMonthInfos.get(j);
		for (var k=0;k&lt;metiers.size();k++){
			var metier=metiers.get(k);
			somme+=StrMonthInfo.getProportionMetier(metier);
		}
		this.p.SommePropInitial.put(new Packages.java.lang.String(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+StrMonthInfo.getMonth().getNumMois()),somme);
	}
}


this.p.HistoriqueLPUE=new Packages.java.util.HashMap(); //stocke par strat*met, la derni�re attractivite pour chaque mois
							//cle:NomStrat-NomMet-NumMois
this.p.LandingsperUnitOfEffort=MatrixFactory.create(&quot;ValuePerUnitOfEffort&quot;,new Array(allStr,SiMatrice.getListMetiers()),new Array(&quot;Strategies&quot;,&quot;Metiers&quot;));
	//permet de stocker les LPUE standardiser
this.p.CalculLandings=false; //permet de savoir si le calcul de la LPUE standardis�e a �t� fait
							</attribute>
    <attribute name='nom'>GraviteLPUE</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;/&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1127477926428#0.32436494465978793'>
    <attribute name='actionApres'>writeln(&quot;Action apres&quot;);
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>writeln(&quot;Cantonnement zone Action avant metier:&quot;+p.metier);
writeln(&quot;Les mailles fermees sont:&quot;+p.mailles);

var zoneMetier = p.metier.getSecteurMois(p.date.getMois());
var mailleMetier = zoneMetier.getMaille().copy();
mailleMetier.removeAll(p.mailles);
writeln(&quot;inter maille:&quot;+mailleMetier.size());
// test pour savoir si toute la zone de pratique du metier
// (reunion de toutes les zones metiers  de metier a date)
// est totalement incluse dans la zone Cantonnement
if (mailleMetier.size() != 0){ //le cas intersection.length==mailleMetier est dans condition
  // si toute la zone de pratique du metier n&apos;est pas incluse dans zone Cantonnement

  //creation du nouveau secteur de metier
  //on v�rifie si le secteur a pas d�j� �t� modifi� par une autre r�gle afin de ne pas avoir de probl�me d&apos;ID
  var ListeSecteur=MetaSecteurFactory.findAllByKey(&quot;MetaCantonnement-&quot;+p.metier.getNom()+&quot;-&quot;+date.getDate(),p.metier.getRegion());
  if (ListeSecteur.size()!=0){
	var secteurResult = MetaSecteurFactory.create(zoneMetier.getNom()+&quot;Modif&quot;, p.metier.getRegion(), &quot;Secteur creer durant la simulation.&quot;);
  }
  else{
	var secteurResult = MetaSecteurFactory.create(&quot;MetaCantonnement-&quot;+p.metier.getNom()+&quot;-&quot;+date.getDate(), p.metier.getRegion(), &quot;Secteur creer durant la simulation.&quot;);
  }
  writeln(&quot;nouveau secteur cree:&quot;+secteurResult);
  var zonesMetier = zoneMetier.getAllSecteur();
  writeln(&quot;zonesMetier:&quot;+zonesMetier);
  writeln(&quot;zonesMetier.size:&quot;+zonesMetier.size());

  for(var i=0; i&lt;zonesMetier.size(); i++){
    var zonemet = zonesMetier.get(i);
    writeln(&quot;zonemet:&quot;+zonemet);
    // intersection entre la zeme zone metier a date et zone de Cantonnement
    var listemailleszonemetier = zonemet.getMaille().copy();
    var nbMailleZoneMetier = listemailleszonemetier.size();
    writeln(&quot;maille metier:&quot;+listemailleszonemetier);
    writeln(&quot;maille Cantonnement:&quot;+p.mailles);
    listemailleszonemetier.removeAll(p.mailles);
    if(0==listemailleszonemetier.size()){
      //si completement inclus on le supprime
      //donc on ne le met pas dans le nouveau
      writeln(&quot;on supprime la zone&quot;+zonemet);
    }
    else if (listemailleszonemetier.size() != nbMailleZoneMetier) {
      // si la zone metier n&apos;est pas totalement incluse dans zone de Cantonnement
      // on reduit  la zeme zone metier de cette intersection
      // pas de modif de la matrice de proportion strmet
      writeln(&quot;on cree une nouvelle zone a partir de:&quot;+zonemet+&quot; avec &quot;+listemailleszonemetier);
      var simpleSecteur = SecteurSimpleFactory.create(&quot;Cantonnement-&quot;+p.metier.getNom()+&quot;-&quot;+zonemet+&quot;-&quot;+date.getDate(), p.metier.getRegion(), &quot;Secteur creer durant la simulation.&quot;);
      simpleSecteur.addAllMaille(listemailleszonemetier);
      secteurResult.addSecteur(simpleSecteur);
     writeln(&quot;apres addSecteur&quot;);  
  }else {
      //sinon on le met dans le nouveau
      writeln(&quot;On remet tel quelle la zone:&quot;+zonemet);
      secteurResult.addSecteur(zonemet);
    }
  }// fin du for sur les zone metier de la zone de pratique du metier
  writeln(&quot;Zone metier avant&quot;+zoneMetier.getMaille());
  writeln(&quot;Zone metier apres&quot;+secteurResult);
  writeln(&quot;Zone metier apres&quot;+secteurResult.getMaille());
  p.metier.setSecteurMois(secteurResult, p.date.getMois());
}  
else {
  writeln(&quot;Toute la zone metier est ferme&quot;);
  // sinon toute la zone de pratique du metier est incluse dans zone Cantonnement
  // alors metier devient metier-nonactivite
      
  //listes des strategies contenant ce metier et tel que strmet(metier,date)!=0
  MetiersInterdits.put(new Packages.java.lang.String(p.metier.getNom()),true);
  var listestrategies=StrategyFactory.findAllByRegion(p.metier.getRegion());

   //on regarde si la matrice nonActivite a �t� cr�e, sinon on la cr�e
  var matNonActivite=nonActivite.get(p.date);
  var nonactivite=matNonActivite!=null;
  if (!nonactivite){
    matNonActivite=MatrixFactory.create(&quot;nonActivite&quot;,new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
				,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
	nonActivite.put(p.date,matNonActivite);
  }
  for(var i=0; i&lt;listestrategies.size(); i++){
     var SetOfBateau=listestrategies.get(i).getSetOfVessels();
     var MetiersPosibles=SetOfBateau.getMetiers();

     if (MetiersPosibles.contains(p.metier) ){
	     var InfoMois=listestrategies.get(i).getStrategyMonthInfo(p.date.getMois());
	     if (InfoMois.getProportionMetier(p.metier)!=0){
	       matNonActivite.setValue(listestrategies.get(i),p.metier,InfoMois.getProportionMetier(p.metier));
	       InfoMois.setProportionMetier(p.metier,new Packages.java.lang.Float(0));
             }
    }
  }
}// fin du else passage a metier-nonactivite
writeln(&quot;fin Cantonnement zone action avant&quot;);
return p.gestionMetier;
</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>writeln(&quot;condition fermeture zone&quot;);
var mois = p.date.getMois().getNumMois();
writeln(&quot;mois:&quot;+mois);
if(!(p.moisDeb&lt;=mois &amp;&amp; mois&lt;=p.moisFin))
  return false;
writeln(&quot;on est dans l&apos;espace des mois possible&quot;);
//on est dans l&apos;espace des mois possible
if(p.date.before(p.dateDeb))
  return false;
if(p.date.after(p.dateFin))
  return false;
if (!p.metier.getEngin().equals(p.engin)) 
  return false;

var mailleMetier = p.metier.getSecteurMois(p.date.getMois()).getMaille();

// s&apos;il y a une intersection avec la zone ferme, alors la regle s&apos;applique
mailleMetier.retainAll(p.mailles);
var result = mailleMetier.size() != 0;

if(result)
  writeln(&quot;===== Fermeture Zone s&apos;applique ======&quot;);
return result;
</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;
//la zone de fermeture
this.p.zone= this.param.getValue(&quot;zone&quot;);
writeln(&quot;zone:&quot;+this.p.zone);
//les mailles du secteur de fermeture
this.p.mailles = this.p.zone.getMaille();

this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);

this.p.moisDeb=this.param.getValue(&quot;moisDeb&quot;);
this.p.moisFin=this.param.getValue(&quot;moisFin&quot;);
this.p.engin=this.param.getValue(&quot;engin&quot;);
</attribute>
    <attribute name='nom'>CantonnementEngin</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;zone&quot; type=&quot;SecteurFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;120&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;engin&quot; type=&quot;EnginFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisDeb&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;0&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisFin&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;11&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1088521109848#0.4030954188162612'>
    <attribute name='actionApres'>p.CaptureCumulee=0;
writeln(&quot;*$*$*$* TAC.actionApres:&quot;+p.date+&quot; metapop:&quot;+p.metapop+&quot; metier:&quot;+p.metier);
if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)){
  writeln (&quot;affectation &quot;+p.affectation);    
  if (!p.affectation){
        writeln(&quot;*$*$*$* ok affect capture au rejet&quot;);
  // ATTENTION        
  // les captures pour cette metapop ne sont plus du qu&apos;au metier pour qui 
  // l&apos;espece est secondaire: elles sont affectees aux rejets

  //pb : ne se fait pas par metier
  //il faut une matrice pour chaques pas de temps qui stocke les rejets 
  //par metier, par metapop et par classes d&apos;age (comme pour les captures)
  //////
        Regle_action_lib.affecterCaptureRejet(p.date, p.metapop, p.suivie, p.metier);

  //on a affecte une fois cette meta pop au rejet il ne faut pas le refaire
	p.affectation=true;
  }
}

return p.gestionMetier;
</attribute>
    <attribute name='actionAvant'>var Chaine=Packages.java.lang.String;

p.affectation=false;
writeln(&quot;Action avant&quot;);
var metier=p.metier;
writeln(&quot;le metier vise par le tac : &quot;+metier);

if(Regle_libUtil.isCapturePrincipaleDate(p.date,p.metapop, p.metier)){
	// recupere tous les metiers qui ont l&apos;espece en capture principale =&gt;metiers vises
	var ListeMetiersVises = Regle_libUtil.getMetiersVises(p.date,p.metapop);


	writeln(&quot;le m�tier a l&apos;esp�ce en capture principale&quot;);
	MetiersInterdits.put(new Chaine(p.metier.getNom()),true);
		//r�cupere toutes les strat�gies pratiquant le m�tier et pour lesquelles la proportion !=0
	var ListeStrat=new Packages.org.codelutin.dbobject.DBCollection(StrategyFactory);
	var AllStrat=SiMatrice.getListStrategies();
	for (var str=0; str&lt;AllStrat.size();str++){
		var strat=AllStrat.get(str);
		var vessels=strat.getSetOfVessels();
		if (vessels.getMetiers().contains(p.metier)){
			var proportion=strat.getStrategyMonthInfo(p.date.getMois()).getProportionMetier(p.metier) //on recupere la proportion d&apos;effort attribue au metier
			if (proportion!=0){
				ListeStrat.add(strat);//permet d&apos;obtenir une liste sans doublon
			}
		}
	}

	for (var str=0;str&lt;ListeStrat.size();str++){
		var Strat=ListeStrat.get(str);
		var StratMonthInfo=Strat.getStrategyMonthInfo(p.date.getMois());
 //1er cas de figure: l&apos;effort est reporte sur un metier de la meme strategie, n&apos;ayant pas l&apos;espece comme capture principale et pechant avec le meme engin
		var MetiersPossibles=Regle_libUtil.MetierSubstStratEnginNonvisePrat(Strat,StratMonthInfo,ListeMetiersVises,p.metier);
  
  //on repartit maintenant l&apos;effort entre les differents metiers possibles dans la meme strategie si un metier possible existe bien
  // la repartion est proportionnelle e l&apos;effort deje allouer dans la strategie
		if (MetiersPossibles.size()!=0){
			Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);			
		}
///////////////////////////////
// second cas de figure: on cherche un metier de substitution sans condition sur les engins, mais qui soit pratique
		else{
			MetiersPossibles=Regle_libUtil.MetierSubstStratNonvisePrat(Strat,StratMonthInfo,ListeMetiersVises);
  // on repartit l&apos;effort entre les eventuels metiers de substitution,
  // la repartion est proportionnelle e l&apos;effort deje allouer dans la strategie
			if (MetiersPossibles.size()!=0){
				Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);
			}
  
///////3 eme cas de figure: on cherche des metiers non vises, sans consideration sur les engins, et pour lesquels la proportion peut etre nulle

			else {
				MetiersPossibles=Regle_libUtil.MetierSubstStratNonvise(Strat,ListeMetiersVises);
			// les eventuels metiers de substitution ayant des proportions nulles, on repartit l&apos;effort uniformement
				if (MetiersPossibles.size()!=0){
					Regle_action_lib.RepartirEffort(MetiersPossibles,StratMonthInfo,metier);
				}

/////sinon on met tout dans le metier nonActivite
				else{
					var matNonActivite=nonActivite.get(p.date);
					var nonactivite=matNonActivite!=null;
					if (!nonactivite){
						matNonActivite=MatrixFactory.create(&quot;nonActivite&quot;,new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
						,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
						nonActivite.put(p.date,matNonActivite);
					}
				       matNonActivite.setValue(Strat,p.metier,InfoMois.getProportionMetier(p.metier));
     				       StratMonthInfo.setProportionMetier(p.metier,new Packages.java.lang.Float(0));
				}
			}
		}
	}
}
       
    
return p.gestionMetier;
</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>// si oldValue existe on est dans la condition pour actionApres.
// il faut donc reprendre oldValue comme valeur de retour
writeln(&quot;Recherche si le tac s&apos;applique (oldValue=&quot;+oldValue);
var result = false;
if(oldValue != undefined)
  result = oldValue;
else if(p.date.before(p.dateDeb))
  result = false;
else if(p.date.after(p.dateFin))
  result = false;
else if(p.CaptureCumulee==0 &amp;&amp; p.date.getMois().getNumMois()!=0){
	p.CaptureCumulee=Regle_action_lib.totalCcumpoids(p.suivie,p.metapop);
	if (p.CaptureCumulee&gt;= p.TACAn){
		writeln(&quot;Tac atteind&quot;);
		if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)) result = true;
	}
}
else if (p.CaptureCumulee&gt;= p.TACAn){
	writeln(&quot;Tac atteind&quot;);
	if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)) result = true;
}
		
		



writeln(&quot;fin de condition TAC:&quot;+result);
return result;
</attribute>
    <attribute name='constructor'>this.param = param;

this.p = new Object();

writeln(&quot;Init du TAC&quot;);
//objet comprenant: TACAn,metapop,dateDeb,dateFin
this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);
this.p.TACAn = this.param.getValue(&quot;TAC(tonnes)&quot;);
this.p.CaptureCumulee=0; //permet de v�rifier si le calcul de la capture cumul�e a d�j� �t� fait
writeln(&quot;recuperation de la meta pop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.affectation=false; //contr��le si les captures ont bien ��t�� mises au rejet

writeln(&quot;TAC de :&quot;+this.p.dateDeb+&quot;-&quot;+this.p.dateFin+&quot; &quot;+this.p.TACAn+&quot; sur &quot;+this.p.metapop);
</attribute>
    <attribute name='nom'>TACpoids</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;metapop&quot; type=&quot;MetaPopulationFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;22&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;TAC(tonnes)&quot; type=&quot;Double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.0&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1126885726813#0.06888309997337272'>
    <attribute name='actionApres'>writeln(&quot;Action apres&quot;);
p.SommeVPUEstrat.clear();
p.SommeProp.clear();
p.CalculValue=false;
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>writeln(&quot;Gravite Action avant metier:&quot;+p.metier+ &quot;date:&quot;+ p.date);
var Chaine = Packages.java.lang.String;



var month=p.date.getMois();
var allStr = SiMatrice.getListStrategies();
var newPropDiv=0.0;

if (!p.CalculValue){
	var resultmanager=control.getResultatManager();
	var Effort=resultmanager.getMatrix(new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12),&quot;matriceEffortPerStrategyMet&quot;);
	writeln(&quot;on r�cup�re la matrice d&apos;effort&quot;);
	for (var iStrategie=allStr.iterator();iStrategie.hasNext();){
		var Strategie=iStrategie.next();
		var listeMet=Strategie.getSetOfVessels().getMetiers();
		for (imetier=listeMet.iterator();imetier.hasNext();){
			var metier=imetier.next();
			var effort=Effort.getValue(Strategie,metier);
			if (effort&gt;0){
				var effortdesc=Strategie.getSetOfVessels().getEffort(metier);
				var nombreop=effortdesc.getFishingOperation();
				var nombregear=effortdesc.getGearsNumberPerOperation();
				var param=metier.getValeurParamControlable();
				var facteur=metier.getValeurParamControlable()*nombreop*nombregear/24.0;	
				//on restandardise l&apos;effort
				p.ValueperUnitOfEffort.setValue(Strategie,metier,facteur*GravityModel.valuePerUnitFishingEffort(Strategie, metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12)));
			}
		}
	}
	p.CalculValue=true;
}



for(var i=0; i&lt;allStr.size(); i++){
	var str = allStr.get(i);
	var strMonthInfo = str.getStrategyMonthInfo(month);
	var propStrMet = strMonthInfo.getPropStrMetier(p.metier);

	if(str.getSetOfVessels().getMetiers().contains(p.metier)){
//on verifie que le metier est bien un metier possible
		var VPUE=null;
		if (!p.SommeVPUEstrat.containsKey(str.getName())){
			if (GravityModel.getEffortPerStrategyMet(str, p.metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12))&gt;0){
				VPUE=p.ValueperUnitOfEffort.getValue(str,p.metier);
			}
		}
		if (VPUE!=null){
			writeln(&quot;on a une VPUE l&apos;ann�e n-1, on la met dans l&apos;historique&quot;);
			writeln(strMonthInfo+&quot; &quot;+p.metier);
			p.HistoriqueVPUE.remove(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois());
			p.HistoriqueVPUE.put(new Chaine(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()),VPUE);
		}
		else{
			writeln (&quot;ou calcul d�j� fait ou pas de VPUE � l&apos;ann�e n-1&quot;);
			VPUE=p.HistoriqueVPUE.get(new Chaine(str.getName()+&quot;-&quot;+p.metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()));
			if (VPUE!=null){
				writeln (&quot;on a une VPUE dans le pass�: &quot;+VPUE);
			}
			else{
				writeln (&quot;on a pas de VPUE dans le pass�, on remet donc la poportion initiale&quot;);
			}
		}
		if (VPUE!=null) {
//si on a une VPUE, il faut aller voir l&apos;attractivite des autres metiers: 2 cas de figure:
// soit on en retrouve une dans le passe qui est son attractivite
// soit on en retrouve pas et dans ce cas le, la proportion d&apos;effort sera celle initiale de la db
//on a alors newProp=(1-sum(pmet1))*VPUE/somme(VPUEmet2)
//avec pmet1 la proprtion initiale pour les metiers pour lesquels on a pas retrouve de VPUE, VPUEmet2, la VPUE pour les 
//metiers qui ont eu une VPUE dans le passe, et VPUE la VPUE du metier courant
			if (!p.SommeVPUEstrat.containsKey(str.getName())){
				var SommeVPUE=0;
				var PropTot=0;
				var metiers=str.getSetOfVessels().getMetiers();
				for (var imetiers=metiers.iterator();imetiers.hasNext();){
					var metier=imetiers.next();
					var temp=null;
					if (GravityModel.getEffortPerStrategyMet(str, metier, new Packages.fr.ifremer.nodb.Date(p.date.getDate()-12))&gt;0){
						temp=p.ValueperUnitOfEffort.getValue(str,metier);
					}	
					if (temp!=null){
						writeln(&quot;on a une VPUE l&apos;ann�e n-1, on l&apos;ajoute � p.SommeVPUEstrat&quot;);
						p.HistoriqueVPUE.remove(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois());
						p.HistoriqueVPUE.put(new Chaine(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()),VPUE);
						SommeVPUE+=temp;	
					}
					else{
						writeln (&quot;on a pas de VPUE l&apos;ann�e n-1, on regarde si il y en a dans le pass�&quot;);
						temp=p.HistoriqueVPUE.get(new Chaine(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()));
						if (temp!=null){
							writeln (&quot;on a une VPUE dans le pass�: &quot;+temp);
							SommeVPUE+=temp;
						}
						else{
							writeln (&quot;on a pas de VPUE dans le pass�, on l&apos;ajoute donc � p.SommeProp&quot;);
							PropTot+=strMonthInfo.getProportionMetier(metier);
						}
					}
				}
				p.SommeVPUEstrat.put(new Chaine(str.getName()),SommeVPUE);
				p.SommeProp.put(new Chaine(str.getName()),PropTot);
			}
			if (p.SommeVPUEstrat.get(new Chaine(str.getName()))&gt;0){
				newPropDiv = (p.SommePropInitial.get(new Chaine(str.getName()+&quot;-&quot;+strMonthInfo.getMonth().getNumMois()))-p.SommeProp.get(new Chaine(str.getName())))*VPUE/ p.SommeVPUEstrat.get(new Chaine(str.getName()));
				writeln(&quot;newpropdiv: &quot;+newPropDiv);
				strMonthInfo.setProportionMetier(p.metier, new Packages.java.lang.Float(newPropDiv));
			}
			else { // c&apos;est le cas e priori quasi impossible oe y a toujours eu une VPUE nulle quelquesoit le metier, dans ce cas le on remet aussi la prop iniitiale
				writeln(&quot;aucun metier n&apos;a d&apos;attractivite, on remet la prop initiale&quot;);
			}
		}
	}
}

writeln(&quot;fin Gravite VPUEAction avant&quot;);
return p.gestionMetier;







</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>// Il faut etre au moins au deuxieme pas de temps.
return p.date.getAnnee() &gt; 0;
</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;
this.p.SommeVPUEstrat=new Packages.java.util.HashMap();/*va permettre de stocker a chaque pas de temps la somme des attractivite
							cle:str.getName()*/

this.p.SommeProp=new Packages.java.util.HashMap();/*va permettre de stocker a chaque pas de temps la somme des proportions pour
les metiers n&apos;ayant pas d&apos;attractivite cle:str.getName()*/

this.p.SommePropInitial=new Packages.java.util.HashMap(); //stocke la somme des prop initiales cle:NomStrat-NomMet-NumMois

var allStr = SiMatrice.getListStrategies();

for(var i=0; i&lt;allStr.size(); i++){
	var str=allStr.get(i);
	var metiers=str.getSetOfVessels().getMetiers();
	var ListeStrMonthInfos=str.getStrategyMonthInfos();
	for (var j=0; j&lt;ListeStrMonthInfos.size();j++){
		var somme=0;
		var StrMonthInfo=ListeStrMonthInfos.get(j);
		for (var k=0;k&lt;metiers.size();k++){
			var metier=metiers.get(k);
			somme+=StrMonthInfo.getProportionMetier(metier);
		}
		this.p.SommePropInitial.put(new Packages.java.lang.String(str.getName()+&quot;-&quot;+metier.getNom()+&quot;-&quot;+StrMonthInfo.getMonth().getNumMois()),somme);
	}
}


this.p.HistoriqueVPUE=new Packages.java.util.HashMap(); //stocke par strat*met, la derni�re attractivite pour chaque mois
							//cle:NomStrat-NomMet-NumMois
this.p.ValueperUnitOfEffort=MatrixFactory.create(&quot;ValuePerUnitOfEffort&quot;,new Array(allStr,SiMatrice.getListMetiers()),new Array(&quot;Strategies&quot;,&quot;Metiers&quot;));
	//permet de stocker les VPUE standardiser
this.p.CalculValue=false; //permet de savoir si le calcul de la VPE standardis�e a �t� fait
							</attribute>
    <attribute name='nom'>GraviteVPUE</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;/&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1127478037900#0.4488993950108007'>
    <attribute name='actionApres'>writeln(&quot;Action apres&quot;);
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>writeln(&quot;Cantonnement zone Action avant metier:&quot;+p.metier);
writeln(&quot;Les mailles fermees sont:&quot;+p.mailles);

var zoneMetier = p.metier.getSecteurMois(p.date.getMois());
var mailleMetier = zoneMetier.getMaille().copy();
mailleMetier.removeAll(p.mailles);
writeln(&quot;inter maille:&quot;+mailleMetier.size());
// test pour savoir si toute la zone de pratique du metier
// (reunion de toutes les zones metiers  de metier a date)
// est totalement incluse dans la zone Cantonnement
if (mailleMetier.size() != 0){ //le cas intersection.length==mailleMetier est dans condition
  // si toute la zone de pratique du metier n&apos;est pas incluse dans zone Cantonnement

  //creation du nouveau secteur de metier
  //on v�rifie si le secteur a pas d�j� �t� modifi� par une autre r�gle afin de ne pas avoir de probl�me d&apos;ID
  var ListeSecteur=MetaSecteurFactory.findAllByKey(&quot;MetaCantonnement-&quot;+p.metier.getNom()+&quot;-&quot;+date.getDate(),p.metier.getRegion());
  if (ListeSecteur.size()!=0){
	var secteurResult = MetaSecteurFactory.create(zoneMetier.getNom()+&quot;Modif&quot;, p.metier.getRegion(), &quot;Secteur creer durant la simulation.&quot;);
  }
  else{
	var secteurResult = MetaSecteurFactory.create(&quot;MetaCantonnement-&quot;+p.metier.getNom()+&quot;-&quot;+date.getDate(), p.metier.getRegion(), &quot;Secteur creer durant la simulation.&quot;);
  }
  writeln(&quot;nouveau secteur cree:&quot;+secteurResult);
  var zonesMetier = zoneMetier.getAllSecteur();
  writeln(&quot;zonesMetier:&quot;+zonesMetier);
  writeln(&quot;zonesMetier.size:&quot;+zonesMetier.size());

  for(var i=0; i&lt;zonesMetier.size(); i++){
    var zonemet = zonesMetier.get(i);
    writeln(&quot;zonemet:&quot;+zonemet);
    // intersection entre la zeme zone metier a date et zone de Cantonnement
    var listemailleszonemetier = zonemet.getMaille().copy();
    var nbMailleZoneMetier = listemailleszonemetier.size();
    writeln(&quot;maille metier:&quot;+listemailleszonemetier);
    writeln(&quot;maille Cantonnement:&quot;+p.mailles);
    listemailleszonemetier.removeAll(p.mailles);
    if(0==listemailleszonemetier.size()){
      //si completement inclus on le supprime
      //donc on ne le met pas dans le nouveau
      writeln(&quot;on supprime la zone&quot;+zonemet);
    }
    else if (listemailleszonemetier.size() != nbMailleZoneMetier) {
      // si la zone metier n&apos;est pas totalement incluse dans zone de Cantonnement
      // on reduit  la zeme zone metier de cette intersection
      // pas de modif de la matrice de proportion strmet
      writeln(&quot;on cree une nouvelle zone a partir de:&quot;+zonemet+&quot; avec &quot;+listemailleszonemetier);
      var simpleSecteur = SecteurSimpleFactory.create(&quot;Cantonnement-&quot;+p.metier.getNom()+&quot;-&quot;+zonemet+&quot;-&quot;+date.getDate(), p.metier.getRegion(), &quot;Secteur creer durant la simulation.&quot;);
      simpleSecteur.addAllMaille(listemailleszonemetier);
      secteurResult.addSecteur(simpleSecteur);
     writeln(&quot;apres addSecteur&quot;);  
  }else {
      //sinon on le met dans le nouveau
      writeln(&quot;On remet tel quelle la zone:&quot;+zonemet);
      secteurResult.addSecteur(zonemet);
    }
  }// fin du for sur les zone metier de la zone de pratique du metier
  writeln(&quot;Zone metier avant&quot;+zoneMetier.getMaille());
  writeln(&quot;Zone metier apres&quot;+secteurResult);
  writeln(&quot;Zone metier apres&quot;+secteurResult.getMaille());
  p.metier.setSecteurMois(secteurResult, p.date.getMois());
}  
else {
  writeln(&quot;Toute la zone metier est ferme&quot;);
  // sinon toute la zone de pratique du metier est incluse dans zone Cantonnement
  // alors metier devient metier-nonactivite

  //on regarde si la matrice nonActivite a �t� cr�e, sinon on la cr�e
  var matNonActivite=nonActivite.get(p.date);
  var nonactivite=matNonActivite!=null;
  if (!nonactivite){
    matNonActivite=MatrixFactory.create(&quot;nonActivite&quot;,new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
				,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
	nonActivite.put(p.date,matNonActivite);
  }
      
  //listes des strategies contenant ce metier et tel que strmet(metier,date)!=0
  MetiersInterdits.put(new Packages.java.lang.String(p.metier.getNom()),true);
  var listestrategies=StrategyFactory.findAllByRegion(p.metier.getRegion());

  for(var i=0; i&lt;listestrategies.size(); i++){
     var SetOfBateau=listestrategies.get(i).getSetOfVessels();
     var MetiersPosibles=SetOfBateau.getMetiers();

     if (MetiersPosibles.contains(p.metier) ){
	     var InfoMois=listestrategies.get(i).getStrategyMonthInfo(p.date.getMois());
	     if (InfoMois.getProportionMetier(p.metier)!=0){
	       matNonActivite.setValue(listestrategies.get(i),p.metier,InfoMois.getProportionMetier(p.metier));
	       InfoMois.setProportionMetier(p.metier,new Packages.java.lang.Float(0));
             }
    }
  }
}// fin du else passage a metier-nonactivite
writeln(&quot;fin Cantonnement zone action avant&quot;);
return p.gestionMetier;
</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>writeln(&quot;condition fermeture zone&quot;);
var mois = p.date.getMois().getNumMois();
writeln(&quot;mois:&quot;+mois);
if(p.moisDeb&gt;mois || p.moisFin&lt;mois)
  return false;
writeln(&quot;on est dans l&apos;espace des mois possible&quot;);
//on est dans l&apos;espace des mois possible
if(p.date.before(p.dateDeb))
  return false;
if(p.date.after(p.dateFin))
  return false;


var mailleMetier = p.metier.getSecteurMois(p.date.getMois()).getMaille();

// s&apos;il y a une intersection avec la zone ferme, alors la regle s&apos;applique
mailleMetier.retainAll(p.mailles);
var result = mailleMetier.size() != 0;

if(result)
  writeln(&quot;===== Fermeture Zone s&apos;applique ======&quot;);
return result;
</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;
//la zone de fermeture
this.p.zone= this.param.getValue(&quot;zone&quot;);
writeln(&quot;zone:&quot;+this.p.zone);
//les mailles du secteur de fermeture
this.p.mailles = this.p.zone.getMaille();

this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);

this.p.moisDeb=this.param.getValue(&quot;moisDeb&quot;);
this.p.moisFin=this.param.getValue(&quot;moisFin&quot;);

</attribute>
    <attribute name='nom'>Cantonnement</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;zone&quot; type=&quot;SecteurFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;119&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisDeb&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;0&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisFin&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;11&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1131639060365#0.053149950140429'>
    <attribute name='actionApres'>p.affectNonActivite=false;
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>p.affectNonActivite=true;
var mat=p.tableNonActivite.get(p.date.getMois());
var matNonActivite=nonActivite.get(p.date);
var nonactivite=matNonActivite!=null;
if (!nonactivite){
	nonActivite.put(p.date,mat);
}
else{
	matNonActivite=matNonActivite.add(mat);
}
return p.gestionMetier;
</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>var mat=p.tableNonActivite.get(p.date.getMois());
writeln(p.affectNonActivite);
if(oldValue != undefined)
  return oldValue;
else if (mat!=null &amp;&amp; p.affectNonActivite==false){
	return true;
}
else {return false;}</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;
var Chaine=Packages.java.lang.String;




this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;
this.p.tableNonActivite=new Packages.java.util.HashMap();
this.p.affectNonActivite=false;

//attention: cette r�gle de gestion ne fonctionne que si le changement a lieu pour toutes
//les ann�es de simulation


var moisDeb=this.param.getValue(&quot;moisDeb&quot;); //entrez le mois debut de fermeture
var moisFin=this.param.getValue(&quot;moisFin&quot;);//entrez le mois de fin de fermeture
var EnginInterdit=this.param.getValue(&quot;engin&quot;);

writeln(&quot;nom de l&apos;engin interdit &quot;+EnginInterdit.getNom());
var RegionSimu=EnginInterdit.getRegion();
var ListeMetiers=MetierFactory.findAllByRegion(RegionSimu);

for (var imetier=ListeMetiers.iterator();imetier.hasNext();){
	var metier=imetier.next();
	if (metier.getEngin().equals(EnginInterdit)){
		//r�cup�re toutes les strat�gies pratiquant le m�tier et pour lesquelles la proportion !=0
		var ListeStrat=SiMatrice.getListStrategies();
		for (iStrat=ListeStrat.iterator();iStrat.hasNext();){
			var Strat=iStrat.next();
			var vessels=Strat.getSetOfVessels();
			if (vessels.getMetiers().contains(metier)){
				for (var imois=moisDeb; imois&lt;=moisFin;imois++){
					var mois=new Packages.fr.ifremer.nodb.Mois(imois);
					var StratMonthInfo=Strat.getStrategyMonthInfo(mois);
					MetiersInterditsPresimu.put(new Chaine(metier.getNom()+&quot;-&quot;+mois.getNumMois()),true);
					//1er cas:l&apos;effort est reporte sur un metier de la meme strategie, n&apos;ayant pas l&apos;espece comme capture principale et pechant avec le meme engin
					var MetiersPossibles=Strat.getSetOfVessels().getMetiers().copy();
					//on verifie que les metiers sont bien pratiques au mois courant, qu&apos;ils n&apos;ont pas le meme ont le meme engin et qu&apos;ils ne sont pas interdits par ailleurs
					for (var imet=MetiersPossibles.iterator();imet.hasNext();){
						var met=imet.next();
						if (StratMonthInfo.getProportionMetier(met)==0 || met.getEngin().equals(metier.getEngin()) || met.getNom()==&quot;nonActivite&quot; || MetiersInterditsPresimu.containsKey(new Chaine(met.getNom()+&quot;-&quot;+mois.getNumMois()))){
							MetiersPossibles.remove(met);
						}
					}	
  
					//on repartit maintenant l&apos;effort entre les differents metiers possibles dans la meme strategie si un metier possible existe bien
					if (MetiersPossibles.size()!=0){
						var NbMetier=MetiersPossibles.size();
						for (imet=MetiersPossibles.iterator();imet.hasNext();){
							met=imet.next();
							var NouvelleProportion=StratMonthInfo.getProportionMetier(met)+(StratMonthInfo.getProportionMetier(metier)/NbMetier);
							StratMonthInfo.setProportionMetier(met, new Packages.java.lang.Float(NouvelleProportion))
						}
						StratMonthInfo.setProportionMetier(metier, new Packages.java.lang.Float(0)) //le metier vise a alors une proportion nulle
					}
					//s&apos;il n&apos;y a pas de metier alternatif, on passe e nonActivite
					else{
						p.tableNonActivite=Regle_action_lib.reportNonActivite(p.tableNonActivite, Strat, metier, mois, StratMonthInfo.getProportionMetier(metier));
						StratMonthInfo.setProportionMetier(metier,new Packages.java.lang.Float(0));
					}
				}
			}
		}
	}
}</attribute>
    <attribute name='nom'>InterdictionEnginPresimu</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;engin&quot; type=&quot;EnginFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisDeb&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;0&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisFin&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;11&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1131632871504#0.6279350341949079'>
    <attribute name='actionApres'>p.affectNonActivite=false;
return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>p.affectNonActivite=true;
var mat=p.tableNonActivite.get(p.date.getMois());
var matNonActivite=nonActivite.get(p.date);
var nonactivite=matNonActivite!=null;
if (!nonactivite){
	nonActivite.put(p.date,mat);
}
else{
	matNonActivite=matNonActivite.add(mat);
}
return p.gestionMetier;
</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>var mat=p.tableNonActivite.get(p.date.getMois());
writeln(p.affectNonActivite);
if(oldValue != undefined)
  return oldValue;
else if (mat!=null &amp;&amp; p.affectNonActivite==false){
	return true;
}
else {return false;}</attribute>
    <attribute name='constructor'>var Chaine=Packages.java.lang.String;
var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;
this.p.tableNonActivite=new Packages.java.util.HashMap();
this.p.affectNonActivite=false;


var enginselectif=this.param.getValue(&quot;EnginSelective&quot;);//entrez le nom de l&apos;engin ferm�e ou non si pas de s�lection sur engin
var moisDeb=this.param.getValue(&quot;moisDeb&quot;); //entrez le mois debut de fermeture
var moisFin=this.param.getValue(&quot;moisFin&quot;);//entrez le mois de fin de fermeture



var ZoneFermee=this.param.getValue(&quot;zone&quot;);
writeln(&quot;bla&quot;);
if (enginselectif) {var EnginInterdit=this.param.getValue(&quot;engin&quot;);} else {var EnginInterdit=MetierFactory.findByNom(&quot;nonActivite&quot;).getEngin();}
var RegionSimu=ZoneFermee.getRegion();
var ListeMetiers=MetierFactory.findAllByRegion(RegionSimu);
var MoisDeb=new Packages.fr.ifremer.nodb.Mois(moisDeb);
var MoisFin=new Packages.fr.ifremer.nodb.Mois(moisFin);
var SaisonFermee= new Packages.fr.ifremer.nodb.Saison(moisDeb,moisFin);



for (var imetier = ListeMetiers.iterator() ; imetier.hasNext();){
	var metier=imetier.next();
	writeln (&quot;metier examin� &quot;+metier.getNom());
	if ((!metier.getEngin().equals(EnginInterdit)) &amp;&amp; enginselectif){
		writeln(&quot;l engin du m�tier n est pas concern�&quot;);
	}
	else {
		writeln(&quot;l engin du m�tier est bien concern�&quot;);
		var ListeSaisons = metier.getInfoSaison();
		for (var isaisonmetier = ListeSaisons.iterator() ; isaisonmetier.hasNext();){
			var saisonmetier=isaisonmetier.next();
			var maillefermee=ZoneFermee.getMaille();
			var MailleMetier=saisonmetier.getSecteur().getMaille().copy();
			MailleMetier.retainAll(maillefermee);
			
			if (MailleMetier.size()!=0){
				MailleMetier=saisonmetier.getSecteur().getMaille().copy();
				var saison=saisonmetier.getSaison();
				if (saison.contains(SaisonFermee)){
					writeln(&quot;il y a bien intersection entre la zone m�tier et le cantonnement pour la saison &quot;+saison.toString());
// calcule de la zone restante:		
					var ToutFerme=false;
					var DebInclus=saison.contains(MoisDeb);
					var FinInclus=saison.contains(MoisFin);
					MailleMetier.removeAll(maillefermee);
					writeln(&quot;inter maille:&quot;+MailleMetier.size());
					// test pour savoir si toute la zone de pratique du metier
					// (reunion de toutes les zones metiers  de metier a date)
					// est totalement incluse dans la zone Cantonnement
					
					if (MailleMetier.size() != 0){ //le cas intersection.length==mailleMetier est dans condition
					  // si toute la zone de pratique du metier n&apos;est pas incluse dans zone Cantonnement
	
						ToutFerme=false;

						//creation du nouveau secteur de metier
						//on v�rifie si le secteur a pas d�j� �t� modifi� par une autre r�gle afin de ne pas avoir de probl�me d&apos;ID
						var ListeSecteur=MetaSecteurFactory.findAllByKey(&quot;MetaCantonnement-&quot;+metier.getNom()+saison.toString(), RegionSimu);
						if (ListeSecteur.size()!=0){
							var secteurResult = MetaSecteurFactory.create(saisonmetier.getSecteur().getNom()+&quot;Modif&quot;, RegionSimu, &quot;Secteur cr�� durant la simulation.&quot;);
						}
						else{
							var secteurResult = MetaSecteurFactory.create(&quot;MetaCantonnement-&quot;+metier.getNom()+saison.toString(),RegionSimu, &quot;Secteur cr�� durant la simulation.&quot;);
						}
						
						writeln(&quot;nouveau secteur cree:&quot;+secteurResult);
						var zonesMetier = saisonmetier.getSecteur().getAllSecteur();
						writeln(&quot;zonesMetier:&quot;+zonesMetier);
						writeln(&quot;zonesMetier.size:&quot;+zonesMetier.size());

						for(var i=0; i&lt;zonesMetier.size(); i++){
							var zonemet = zonesMetier.get(i);
							writeln(&quot;zonemet:&quot;+zonemet);
							// intersection entre la zeme zone metier a date et zone de Cantonnement
							var listemailleszonemetier = zonemet.getMaille().copy();
							var nbMailleZoneMetier = listemailleszonemetier.size();
							writeln(&quot;maille metier:&quot;+listemailleszonemetier);
							writeln(&quot;maille Cantonnement:&quot;+maillefermee);
							listemailleszonemetier.removeAll(maillefermee);
							if(0==listemailleszonemetier.size()){
								//si completement inclus on le supprime
								//donc on ne le met pas dans le nouveau
								writeln(&quot;on supprime la zone&quot;+zonemet);
							}
							else if (listemailleszonemetier.size() != nbMailleZoneMetier) {
								// si la zone metier n&apos;est pas totalement incluse dans zone de Cantonnement
								// on reduit  la zeme zone metier de cette intersection
								// pas de modif de la matrice de proportion strmet
								writeln(&quot;on cree une nouvelle zone a partir de:&quot;+zonemet+&quot; avec &quot;+listemailleszonemetier);
								var simpleSecteur = SecteurSimpleFactory.create(&quot;Cantonnement-&quot;+metier.getNom()+&quot;-&quot;+zonemet+saison.toString(), RegionSimu, &quot;Secteur creer durant la simulation.&quot;);
								simpleSecteur.addAllMaille(listemailleszonemetier);
								secteurResult.addSecteur(simpleSecteur);
								writeln(&quot;apres addSecteur&quot;);  
							}
							else {
								//sinon on le met dans le nouveau
								writeln(&quot;On remet tel quelle la zone:&quot;+zonemet);
								secteurResult.addSecteur(zonemet);
							}
						}// fin du for sur les zone metier de la zone de pratique du metier
					}  
	
					else {
						var secteurResult=saisonmetier.getSecteur().getAllSecteur();
						writeln(&quot;Toute la zone metier est ferme&quot;);
						ToutFerme=true;
					}

//1er cas: la saison m�tier est identique (ou totalement incluse dans la saison ferm�e, dans ce cas l�, on change juste
//le secteur
					if (SaisonFermee.toListMois().containsAll(saison.toListMois())){
						writeln(&quot;toute la saison metier est incluse dans la saison de fermeture&quot;);
						//si tout est ferm�, on met le metier au ch�mage
						
						if (ToutFerme==true){
							writeln (&quot;toute la zone est ferm�e, le metier passe donc � ch�mage pour cette saison&quot;);
							var listestrategies=StrategyFactory.findAllByRegion(RegionSimu);
							var ListeMois=saison.toListMois();
							for(var i=0; i&lt;listestrategies.size(); i++){
								var SetOfBateau=listestrategies.get(i).getSetOfVessels();
								var MetiersPosibles=SetOfBateau.getMetiers();
								if (MetiersPosibles.contains(metier)){
									for (imois=ListeMois.iterator();imois.hasNext();){
										var mois=imois.next();
										var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois);
										this.p.tableNonActivite=Regle_action_lib.reportNonActivite(this.p.tableNonActivite, listestrategies.get(i), metier, mois, InfoMois.getProportionMetier(metier));
										InfoMois.setProportionMetier(metier,new Packages.java.lang.Float(0));
										MetiersInterditsPresimu.put(new Chaine(metier.getNom()+&quot;-&quot;+mois.getNumMois()),true);
									}
								}
							}
						}
						else {
							writeln(&quot;tout n&apos;est pas ferm�e, le secteur de p�che devient &quot;+secteurResult);
							var ListeMois=SaisonFermee.toListMois();
							for (imois=ListeMois.iterator();imois.hasNext();){
								mois=imois.next();
								metier.setSecteurMois(secteurResult, mois);
							}
						}
					}

//2�me cas de figure: moisDeb est inclus mais pas moisFin (ou alors c&apos;est le dernier mois)
					else if (DebInclus &amp;&amp; ((!FinInclus) || moisFin==saison.getLastMois().getNumMois())){
						writeln (&quot;il y a intersection de la saison de fermeture avec la saison m�tier de &quot;+moisDeb+&quot; � &quot;+saison.getLastMois().getNumMois());
						//si tout est ferm� on met les proportions � 0 pour les mois fermes
						if (ToutFerme==true){
							writeln (&quot;toute la zone m�tier est ferm�e&quot;);
							var listestrategies=StrategyFactory.findAllByRegion(RegionSimu);
							var ListeMois=SaisonFermee.toListMois().retainAll(saison.toListMois());
							writeln (&quot;de &quot;+ListeMois.get(0)+&quot; a &quot;+ ListeMois.get(ListeMois.size())+ &quot;, le metier est donc mis au chomage&quot;);
							for(var i=0; i&lt;listestrategies.size(); i++){
								var SetOfBateau=listestrategies.get(i).getSetOfVessels();
								var MetiersPosibles=SetOfBateau.getMetiers();
								if (MetiersPosibles.contains(metier)){
									for (imois=ListeMois.iterator();imois.hasNext();){
										var mois=imois.next();
										var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois);
										this.p.tableNonActivite=Regle_action_lib.reportNonActivite(this.p.tableNonActivite, listestrategies.get(i), metier, mois, InfoMois.getProportionMetier(metier));
										InfoMois.setProportionMetier(metier,new Packages.java.lang.Float(0));
										MetiersInterditsPresimu.put(new Chaine(metier.getNom()+&quot;-&quot;+mois.getNumMois()),true);
									}
								}
							}
						}
						else {
							//on commence par cr�e les nouvelles saisons
							var NouvelleSaison2= new Packages.fr.ifremer.nodb.Saison(moisDeb,saison.getLastMois().getNumMois());		
							var NouvelleSaison1= new Packages.fr.ifremer.nodb.Saison(saison.getFirstMois().getNumMois(),moisDeb-1);
							saisonmetier.setSaison(NouvelleSaison1);		
							//on cr�e un nouveau  infoSaisonMetier
							var NouvelInfoSaison=InfoSaisonMetierFactory.create(metier, NouvelleSaison2, secteurResult, &quot;saison cr�e pendant la simulation&quot;) ;
							metier.addInfoSaison(NouvelInfoSaison);
							writeln (&quot;de &quot;+saison.getFirstMois().getNumMois()+&quot; � &quot;+moisDeb-1+&quot; le metier peche en &quot;+saisonmetier.getSecteur());
							writeln (&quot;de &quot;+moisDeb+&quot; � &quot;+saison.getLastMois().getNumMois()+&quot; le metier peche en &quot;+secteurResult);
						}
					}
//3�me cas de figure: moisFin est inclus mais pas moisDeb (ou alors il est �gal au premier mois)
					else if (((!DebInclus) || moisDeb==saison.getFirstMois().getNumMois()) &amp;&amp; FinInclus){
						writeln (&quot;il y a intersection de la saison de fermeture avec la saison m�tier de &quot;+moisDeb+&quot; � &quot;+saison.getLastMois().getNumMois());
						//si tout est ferm� on met les proportions � 0 pour les mois fermes
						if (ToutFerme==true){
							writeln (&quot;toute la zone est fermee&quot;);
							var listestrategies=StrategyFactory.findAllByRegion(RegionSimu);
							var ListeMois=SaisonFermee.toListMois().retainAll(saison.toListMois());
							writeln (&quot;de &quot;+ListeMois.get(0)+&quot; a &quot;+ ListeMois.get(ListeMois.size())+ &quot;, le metier est donc mis au chomage&quot;);
							for(var i=0; i&lt;listestrategies.size(); i++){
								var SetOfBateau=listestrategies.get(i).getSetOfVessels();
								var MetiersPosibles=SetOfBateau.getMetiers();
								if (MetiersPosibles.contains(metier) ){
									for (imois=ListeMois.iterator();imois.hasNext();){
										var mois=imois.next();
										var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois);
										this.p.tableNonActivite=Regle_action_lib.reportNonActivite(this.p.tableNonActivite, listestrategies.get(i), metier, mois, InfoMois.getProportionMetier(metier));
										InfoMois.setProportionMetier(metier,new Packages.java.lang.Float(0));
										MetiersInterditsPresimu.put(new Chaine(metier.getNom()+&quot;-&quot;+mois.getNumMois()),true);
									}
								}
							}
						}
						else {
							//on commence par cr�e les nouvelles saisons 
							var NouvelleSaison1= new Packages.fr.ifremer.nodb.Saison(saison.getFirstMois().getNumMois(),moisFin);		
							var NouvelleSaison2= new Packages.fr.ifremer.nodb.Saison(moisFin+1,saison.getLastMois.getNumMois());
							saisonmetier.setSaison(NouvelleSaison2);		
							//on cr�e un nouveau  infoSaisonMetier
							var NouvelInfoSaison=InfoSaisonMetierFactory.create(metier, NouvelleSaison1, secteurResult, &quot;saison cr�e pendant la simulation&quot;) ;
							metier.addInfoSaison(NouvelInfoSaison);
							writeln (&quot;de &quot;+saison.getFirstMois().getNumMois()+&quot; � &quot;+moisFin+&quot; le metier peche en &quot;+secteurResult);
							writeln (&quot;de &quot;+moisFin+1+&quot; � &quot;+saison.getLastMois().getNumMois()+&quot; le metier peche en &quot;+saisonmetier.getSecteur());
						}
					}

//dernier cas de figure: les deux sont inclus et sont diff�rents des bornes
					else {
						//si tout est ferm� on met les proportions � 0 pour les mois fermes
						if (ToutFerme==true){
							writeln(&quot;toute la zone m�tier est ferm�e&quot;);
							var listestrategies=StrategyFactory.findAllByRegion(metier.getRegion());
							var ListeMois=SaisonFermee.toListMois();
							writeln(&quot;le m�tier passe � ch�mage de &quot;+moisDeb+&quot; � &quot;+moidFin);
							for(var i=0; i&lt;listestrategies.size(); i++){
								var SetOfBateau=listestrategies.get(i).getSetOfVessels();
								var MetiersPosibles=SetOfBateau.getMetiers();
								if (MetiersPosibles.contains(metier) ){
									for (imois=ListeMois.iterator();imois.hasNext();){
										var mois=imois.next();
										var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois);
										this.p.tableNonActivite=Regle_action_lib.reportNonActivite(this.p.tableNonActivite, listestrategies.get(i), metier, mois, InfoMois.getProportionMetier(metier));
										InfoMois.setProportionMetier(metier,new Packages.java.lang.Float(0));
										MetiersInterditsPresimu.put(new Chaine(metier.getNom()+&quot;-&quot;+mois.getNumMois()),true);
									}
								}
							}
						}
						else {
							//on commence par cr�e les nouvelles saisons
							var NouvelleSaison1= new Packages.fr.ifremer.nodb.Saison(saison.getFirstMois().getNumMois(),moisDeb-1);		
							var NouvelleSaison2= new Packages.fr.ifremer.nodb.Saison(moisDeb,moisFin);
							var NouvelleSaison3=new Packages.fr.ifremer.nodb.Saison(moisFin+1,saison.getLastMois().getNumMois());
							saisonmetier.setSaison(NouvelleSaison1);		
							//on cr�e 2 nouveau  infoSaisonMetier
							var NouvelInfoSaison2=InfoSaisonMetierFactory.create(metier, NouvelleSaison2, secteurResult, &quot;saison cr�e pendant la simulation&quot;) ;
							var NouvelInfoSaison3=InfoSaisonMetierFactory.create(metier, NouvelleSaison3, saisonmetier.getSecteur(), &quot;saison cr�e pendant la simulation&quot;) ;
							metier.addInfoSaison(NouvelInfoSaison2);
							metier.addInfoSaison(NouvelInfoSaison3);							
							writeln (&quot;de &quot;+saison.getFirstMois().getNumMois()+&quot; � &quot;+(moisDeb-1)+&quot; le metier peche en &quot;+saisonmetier.getSecteur());
							writeln (&quot;de &quot;+moisDeb+&quot; � &quot;+moisFin+&quot; le metier peche en &quot;+secteurResult);
							writeln (&quot;de &quot;+(moisFin+1)+&quot; � &quot;+saison.getLastMois().getNumMois()+&quot; le metier peche en &quot;+saisonmetier.getSecteur());
						}
					}
				}
			}
		}
	}
}</attribute>
    <attribute name='nom'>CantonnementPresimu</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;zone&quot; type=&quot;SecteurFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;EnginSelective&quot; type=&quot;boolean&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Boolean&quot;&gt;&lt;boolean&gt;true&lt;/boolean&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;engin&quot; type=&quot;EnginFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisFin&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;11&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisDeb&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;0&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1131636208308#0.9162835699267807'>
    <attribute name='actionApres'>return p.gestionMetier;</attribute>
    <attribute name='actionAvant'>return p.gestionMetier;</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>return false;</attribute>
    <attribute name='constructor'>var StringBuffer = Packages.java.lang.StringBuffer;
var Date = Packages.fr.ifremer.nodb.Date;
var XMLUtil = Packages.org.codelutin.xml.XMLUtil;

this.param = param;

//construction de p
this.p = new Object();
this.p.paramRegle = this.param;


//attention: cette r�gle de gestion ne fonctionne que si le changement a lieu pour toutes
//les ann�es de simulation


var zoneselective=this.param.getValue(&quot;ZoneSelective&quot;); //entrez le nom de la zone concern�e, non si pas de s�lection sur zone
var moisDeb=this.param.getValue(&quot;moisDeb&quot;); //entrez le mois debut de fermeture
var moisFin=this.param.getValue(&quot;moisFin&quot;);//entrez le mois de fin de fermeture
var nouvelleValeurParam=this.param.getValue(&quot;nouvelleValeurParam&quot;);//entrez la valeur du param�tre contr�lable


if (zoneselective!=&quot;non&quot;) {
	var ZoneFermee=this.param.getValue(&quot;zone&quot;);
}
var EnginInterdit=this.param.getValue(&quot;engin&quot;);
writeln(&quot;nom de l&apos;engin interdit &quot;+EnginInterdit.getNom());
var RegionSimu=EnginInterdit.getRegion();
var ListeMetiers=MetierFactory.findAllByRegion(RegionSimu);
var MoisDeb=new Packages.fr.ifremer.nodb.Mois(moisDeb);
var MoisFin=new Packages.fr.ifremer.nodb.Mois(moisFin);
var SaisonFermee= new Packages.fr.ifremer.nodb.Saison(moisDeb,moisFin);




for (var imetier = ListeMetiers.iterator() ; imetier.hasNext();){
    var metier=imetier.next();
    writeln (&quot;metier examin� &quot;+metier.getNom()+&quot;son engin &quot;+metier.getEngin().getNom());
    if (!metier.getEngin().equals(EnginInterdit)){
        writeln(&quot;l engin du m�tier n est pas concern�&quot;);
    }
    else {
        writeln(&quot;l engin du m�tier est bien concern�&quot;);
        if (zoneselective==false &amp;&amp; moisDeb==0 &amp;&amp; moisFin==11){
            //aucun crit�re spatio-temporel il suffit donc de mettre
            //le param controlable � la nouvelle valeur
            metier.setValeurParamControlable(nouvelleValeurParam);
            writeln(&quot;aucune spatialisation ni saisonnalit�, on passe le Param Controlable a &quot;+nouvelleValeurParam);
        }
        else {   
            var ListeSaisons = metier.getInfoSaison();
            for (var isaisonmetier = ListeSaisons.iterator() ; isaisonmetier.hasNext();){
                var saisonmetier=isaisonmetier.next();
		var saison=saisonmetier.getSaison();
		var taille=0;
                if (zoneselective){
                    var maillefermee=ZoneFermee.getMaille();
                    var MailleMetier=saisonmetier.getSecteur().getMaille().copy();
                    MailleMetier.retainAll(maillefermee);
                    taille=MailleMetier.size();
                }
    		else {
			writeln (&quot;pas de s�lection de zone, toute la zone d&apos;�tude est donc concern�e&quot;);
		}
                if (zoneselective==false || taille!=0){
                    if (saison.contains(SaisonFermee)){
                        writeln (&quot;il y a intersection de la zone metier au cours de la saison&quot;+saison.toString());
                        var moisconcerne=saison.copy().toListMois();
                        moisconcerne.retainAll(SaisonFermee.toListMois());
                        var NouveauMetier=MetierFactory.create(metier.getNom()+&quot; Mois &quot;+moisconcerne.get(0).getNumMois()+&quot; a &quot;+moisconcerne.get(moisconcerne.size()-1).getNumMois()+&quot; ValeurParam &quot;+nouvelleValeurParam, RegionSimu, EnginInterdit,nouvelleValeurParam, &quot;m�tier cr�� pendant la simu pour le changement de param�tre contr�lable&quot;);
                        for (var iinfsais=metier.getInfoSaison().iterator();iinfsais.hasNext();){
				var infsais=iinfsais.next();
				var sais=infsais.getSaison();
				var NouveauInfoSaison=InfoSaisonMetierFactory.create(NouveauMetier, sais, infsais.getSecteur(), &quot;cr�� durant la simulation&quot;)
				NouveauMetier.addInfoSaison(NouveauInfoSaison);
			}

                        //On ajoute aux strategies qui pratiquent le m�tier le nouveau m�tier
                        var listestrategies=StrategyFactory.findAllByRegion(RegionSimu);
                        for(var i=0; i&lt;listestrategies.size(); i++){
                            var strategie=listestrategies.get(i);
                            var SetOfBateau=strategie.getSetOfVessels();
                            var MetiersPosibles=SetOfBateau.getMetiers();
                            if (MetiersPosibles.contains(metier)){
                                var AncienEffort=SetOfBateau.getEffort(metier);
                                var DescriptionEffort=EffortDescriptionFactory.create(NouveauMetier, SetOfBateau, AncienEffort.getFishingOperation(), AncienEffort.getFishingOperationDuration(), AncienEffort.getGearsNumberPerOperation(), AncienEffort.getCrewSize(), AncienEffort.getUnitCostOfFishing(), AncienEffort.getFixedCrewSalary(), AncienEffort.getCrewShareRate(), AncienEffort.getCrewFoodCost(), AncienEffort.getRepairAndMaintenanceGearCost(), AncienEffort.getLandingCosts(), AncienEffort.getOtherRunningCosts(), &quot;effort description cr�� durant la simulation&quot;);

				SetOfBateau.addPossibleMetiers(DescriptionEffort);

                    //on a ajout� le nouveau m�tier au set of vessels, maintenant, on va report� l&apos;effort du m�tier ancien vers le nouveau pour les mois concern�s
                                for (var intmois=0; intmois&lt;=11;intmois++){
                                    var mois=new Packages.fr.ifremer.nodb.Mois(intmois);
                                    var PropStratMois=strategie.getStrategyMonthInfo(mois);
                                    var NouveauStrMet=PropStrMetFactory.create(PropStratMois, NouveauMetier, 0, &quot;cr�� durant la simulation&quot;);
				    PropStratMois.addPropStrMet(NouveauStrMet);
				    if (moisconcerne.contains(mois) &amp;&amp; PropStratMois.getProportionMetier(metier)!=0){
                                        //on cr�� un nouveau PropStrMet
                                        writeln (&quot;la strat�gie &quot;+strategie.getName()+&quot; pratique bien le metier &quot;+metier.getNom()+&quot; au mois &quot;+mois.getNumMois());
                                        PropStratMois.setProportionMetier(NouveauMetier,new Packages.java.lang.Float(PropStratMois.getProportionMetier(metier))); 
                                        PropStratMois.setProportionMetier(metier,new Packages.java.lang.Float(0));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
} 

</attribute>
    <attribute name='nom'>ChangementParamControlablePresimu</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;zone&quot; type=&quot;SecteurFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;ZoneSelective&quot; type=&quot;boolean&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Boolean&quot;&gt;&lt;boolean&gt;true&lt;/boolean&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;engin&quot; type=&quot;EnginFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;nouvelleValeurParam&quot; type=&quot;String&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.String&quot;&gt;&lt;string&gt;80&lt;/string&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisFin&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;11&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;moisDeb&quot; type=&quot;int&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Integer&quot;&gt;&lt;int&gt;0&lt;/int&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='RegleGestion' __id__='fr.ifremer.db.RegleGestionFactory#1149845777362#0.25006634881580714'>
    <attribute name='actionApres'>


writeln(&quot;*$*$*$* TailleMin.actionApres:&quot;+p.date+&quot; metapop:&quot;+p.metapop+&quot; metier:&quot;+p.metier);
if(Regle_libUtil.isCaptureDate(p.date,p.metapop, p.metier)){    
  writeln(&quot;*$*$*$* ok affecte capture inf��rieure �� TailleMin au rejet&quot;);
  // ATTENTION        
  // les captures pour cette metapop ne sont plus du qu&apos;au metier pour qui 
  // l&apos;espece est secondaire: elles sont affectees aux rejets

  //pb : ne se fait pas par metier
  //il faut une matrice pour chaques pas de temps qui stocke les rejets 
  //par metier, par metapop et par classes d&apos;age (comme pour les captures)
  //////
Regle_action_lib.affecterCaptureSurvieRejetClasses(p.date, p.metapop, p.suivie, p.propSurvie, p.propRejet56_71, p.propRejet71_84, p.propRejet84_95, p.propRejet95_101, p.propRejet101_110, p.propRejet110_117);


  //on a affecte une fois cette meta pop au rejet il ne faut pas le refaire
}

return p.gestionMetier;


</attribute>
    <attribute name='actionAvant'>


writeln(&quot;Action avant&quot;);

writeln(&quot;le metier vise par la tailleMin : &quot;+p.metier);
return p.gestionMetier;

</attribute>
    <attribute name='commentaire'></attribute>
    <attribute name='condition'>
writeln(&quot;Recherche si la taille Minimale s&apos;applique (oldValue=&quot;+oldValue);
var metier=p.metier;
var result = true;
if(oldValue != undefined)
  result = oldValue;
else if (Regle_libUtil.isCaptureDate(p.date,p.metapop, metier)!=true)
	result=false;
else if(p.date.before(p.dateDeb))
  result = false;
else if(p.date.after(p.dateFin))
  result = false;

writeln(&quot;fin de condition TailleMin:&quot;+result);
return result;


</attribute>
    <attribute name='constructor'>this.param = param;

this.p = new Object();

writeln(&quot;Init du TAC&quot;);
//objet comprenant: TACAn,metapop,dateDeb,dateFin
this.p.dateDeb=this.param.getValue(&quot;dateDeb&quot;);
this.p.dateFin=this.param.getValue(&quot;dateFin&quot;);
//this.p.TailleMin = this.param.getValue(&quot;TailleMin&quot;);
writeln(&quot;recuperation de la meta pop&quot;);
this.p.metapop= this.param.getValue(&quot;metapop&quot;);
this.p.propSurvie=this.param.getValue(&quot;propSurvie&quot;);
this.p.propRejet56_71=this.param.getValue(&quot;propRejet56_71&quot;);
this.p.propRejet71_84=this.param.getValue(&quot;propRejet71_84&quot;);
this.p.propRejet84_95=this.param.getValue(&quot;propRejet84_95&quot;);
this.p.propRejet95_101=this.param.getValue(&quot;propRejet95_101&quot;);
this.p.propRejet101_110=this.param.getValue(&quot;propRejet101_110&quot;);
this.p.propRejet110_117=this.param.getValue(&quot;propRejet110_117&quot;);

writeln(&quot;j&apos;ai param ok&quot;);
</attribute>
    <attribute name='nom'>SurvieRejetClasses</attribute>
    <attribute name='param'>&lt;object type=&quot;fr.ifremer.nodb.RegleGestionParameter&quot;&gt;&lt;regleGestionParameter encodingVersion=&quot;1&quot;&gt;&lt;p name=&quot;propRejet71_84&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.75&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;metapop&quot; type=&quot;MetaPopulationFactory&quot;&gt;&lt;value&gt;&lt;null/&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propRejet95_101&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.07&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propRejet110_117&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.01&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propRejet56_71&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.96&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateFin&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;11&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propSurvie&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.3&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;dateDeb&quot; type=&quot;Date&quot;&gt;&lt;value&gt;&lt;object type=&quot;fr.ifremer.nodb.Date&quot;&gt;&lt;date encodingVersion=&quot;1&quot;&gt;0&lt;/date&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propRejet84_95&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.28&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;p name=&quot;propRejet101_110&quot; type=&quot;double&quot;&gt;&lt;value&gt;&lt;object type=&quot;java.lang.Double&quot;&gt;&lt;double&gt;0.04&lt;/double&gt;&lt;/object&gt;&lt;/value&gt;&lt;/p&gt;&lt;/regleGestionParameter&gt;&lt;/object&gt;</attribute>
    <attribute name='parametre'>this.p.metier = metier;
this.p.date = date;
this.p.suivie = suivie;
this.p.gestionMetier = gestionMetier;
</attribute>
  </dbobject>
  <dbobject type ='ScriptObject' __id__='fr.ifremer.db.ScriptObjectFactory#1030616086126#0.4404618778148415'>
    <attribute name='description'>SimulateurES</attribute>
    <attribute name='instancier'>false</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616090469#0.09967439367828224</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1032170615832#0.34366679411551526</attribute>
    <attribute name='nom'>SimulateurES</attribute>
  </dbobject>
  <dbobject type ='ScriptObject' __id__='fr.ifremer.db.ScriptObjectFactory#1030616086120#0.2853775210438779'>
    <attribute name='description'>Simulation utilisant complement 
le simulateur en java</attribute>
    <attribute name='instancier'>true</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616090234#0.6115821396609552</attribute>
    <attribute name='nom'>Simul</attribute>
  </dbobject>
  <dbobject type ='ScriptObject' __id__='fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635'>
    <attribute name='description'></attribute>
    <attribute name='instancier'>false</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087417#0.6022343215516021</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087637#0.44004198560035535</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087626#0.6613163025194861</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087614#0.5489953153045608</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087565#0.7553470108830392</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087545#0.3321003780879992</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087533#0.16715191656399897</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087598#0.6244740949695219</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087505#0.8306109285774604</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087490#0.7840258656868058</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087450#0.5950319217120895</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087521#0.6476308488548411</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087425#0.36065658135521106</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087400#0.3096148730789895</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087368#0.048597990672362146</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087320#0.3615551917557245</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087250#2.83635305223906E-4</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087441#0.59184052113772</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087201#0.9639291153189607</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087219#0.7359885845810413</attribute>
    <attribute name='nom'>GestionLicenceMetier_interdits</attribute>
  </dbobject>
  <dbobject type ='ScriptObject' __id__='fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968'>
    <attribute name='description'>Regle_action_lib</attribute>
    <attribute name='instancier'>true</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1088520995714#0.4078370116547927</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616088307#0.2115671261303843</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1124286086955#0.18377913873833862</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1140190410896#0.08016411335162299</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1148906322596#0.7448118532968023</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1148909759728#0.5722061694030962</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1148981230629#0.6689621358189822</attribute>
    <attribute name='nom'>Regle_action_lib</attribute>
  </dbobject>
  <dbobject type ='ScriptObject' __id__='fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597'>
    <attribute name='description'>Regle_libUtil
</attribute>
    <attribute name='instancier'>true</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616089722#0.26417420492711297</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616089243#0.6436019081490708</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616089533#0.5848873946536534</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616089737#0.5109664268275419</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1148978809932#0.4970214374255384</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1148981355352#0.9066752286865637</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1148981554190#0.02177998477017362</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1148990240552#0.5422215003898844</attribute>
    <attribute name='nom'>Regle_libUtil</attribute>
  </dbobject>
  <dbobject type ='ScriptObject' __id__='fr.ifremer.db.ScriptObjectFactory#1030616086020#0.8273487790096247'>
    <attribute name='description'>Global</attribute>
    <attribute name='instancier'>true</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616087703#0.1962801530985394</attribute>
    <attribute name='nom'>Global</attribute>
  </dbobject>
  <dbobject type ='ScriptObject' __id__='fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211'>
    <attribute name='description'>Object ou l&apos;on peut creer des filtres d&apos;export qui apparaitront dans
le menu de ResultatEdit</attribute>
    <attribute name='instancier'>true</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1126798366776#0.9348996038124956</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1129222047550#0.9289749781634259</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616086630#0.05168264476792184</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1140518555638#0.940120008064025</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1140518425336#0.3427013443559901</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1129222078580#0.1941903789844418</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1129222121430#0.5662309258561612</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1030616086777#0.614056900247323</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1139566933934#0.056079255962955266</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1139566900980#0.03800346222983464</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1139567170937#0.4418705344455688</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1139567283454#0.6770470423779626</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1156436950843#0.20593815364205093</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1156437046286#0.3593760024700621</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1126798983063#0.22360838299619745</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1129222103460#0.759841499266446</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1126798491306#0.38569601406189347</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1129222092750#0.48382026371696274</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1126799302182#0.2715882257521902</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1129222220950#0.9607620539832165</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1126799343241#0.6522372747840206</attribute>
    <attribute name='methodes' cardinalite='n'>fr.ifremer.db.ScriptMethodFactory#1129222236110#0.6519289967310241</attribute>
    <attribute name='nom'>Export</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1156437046286#0.3593760024700621'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var PDate=Packages.fr.ifremer.nodb.Date;
var finsimu=resultats.getLastDate().getDate();


var result=&quot;&quot;;
writeln(&quot;debut export GrossValueOfLandings&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));


for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date, &quot;	matriceGrossValueOfLandingsPerStrategyMet&quot;);
	for(var iiterateur=matrice.iterator(); iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var str=coordonnees[0];
                var met=coordonnees[1];
		result+=str.getName()+&quot;;&quot;+met.getNom()+&quot;;&quot;+idate+&quot;;&quot;+iiterateur.getValue()+&quot;\n&quot;;
	}
}
writeln(&quot;fin export GrossValueOfLandings&quot;);

return &quot;&quot;+result;</attribute>
    <attribute name='description'>GrossValueOfLandings
tableau avec des lignes
strat;met;date;value</attribute>
    <attribute name='name'>GrossValueOfLandings</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1156436950843#0.20593815364205093'>
    <attribute name='attributs'>resultats, buffer</attribute>
    <attribute name='corps'>writeln(&quot;debut export GrossValueOfLandings&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var PDate=Packages.fr.ifremer.nodb.Date;



var finsimu=resultats.getLastDate().getDate();

for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date,&quot;matriceGrossValueOfLandingsPerStrategyMet&quot;);
	for(var ic=matrice.iterator(); ic.next();){
		var coordonnees=ic.getSemanticsCoordinates();
		var str=coordonnees[0];
		var met=coordonnees[1];
		buffer.write(str.getName()+&quot;;&quot;+met.getNom()+&quot;;&quot;+idate+&quot;;&quot;+ic.getValue()+&quot;\n&quot;);
	}
}
writeln(&quot;fin export GrossValueOfLandings&quot;);

return 0;</attribute>
    <attribute name='description'>Export les GrossValueOfLandings
tableau avec des lignes
strat;met;date;value</attribute>
    <attribute name='name'>GrossValueOfLandingsSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1148990240552#0.5422215003898844'>
    <attribute name='attributs'>suivie, metapop</attribute>
    <attribute name='corps'>var biomasse=0
for(var i=0; i&lt; suivie.size(); i++){
    if(suiviePop.get(i).getPop().getMetaPopulation().equals(metapop)){
        suivi = suiviePop.get(i);
        effectifs=suivi.getN();
	effectifs=effectifs.sumOverDim(1);
	for (var iiterateur=effectifs.iterator();iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var classe=coordonnees[0];
		biomasse+=iiterateur.getValue()*classe.getPoidsMoyen();
	}
    }
}

return biomasse;</attribute>
    <attribute name='description'>calcule la biomasse courante de la pop</attribute>
    <attribute name='name'>CalculBiomasse</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1148981554190#0.02177998477017362'>
    <attribute name='attributs'>Strat,StratMonthInfo,ListeMetiersVises</attribute>
    <attribute name='corps'>var Chaine=Packages.java.lang.String;
var MetiersPossibles=Strat.getSetOfVessels().getMetiers().copy();
//on verifie que les metiers sont bien pratiques au mois courant, qu&apos;ils ne sont pas vises et qu&apos;ils ont le meme engin, et qu&apos;ils ne sont pqs interdits
for (var imet=MetiersPossibles.iterator();imet.hasNext();){
	var met=imet.next();
	if (ListeMetiersVises.contains(met) || StratMonthInfo.getProportionMetier(met)==0 || met.getNom()==&quot;nonActivite&quot; || MetiersInterdits.containsKey(new Chaine(met.getNom())) || MetiersInterditsPresimu.containsKey(new Chaine(met.getNom()+&quot;-&quot;+StratMonthInfo.getMonth().getNumMois()))){
		MetiersPossibles.remove(met);
	}
}
return MetiersPossibles;</attribute>
    <attribute name='description'>renvoie une liste de m�tier de la strat�gie, non vis� par le tac et pratiqu�</attribute>
    <attribute name='name'>MetierSubstStratNonvise</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1148981230629#0.6689621358189822'>
    <attribute name='attributs'>MetiersPossibles,StratMonthInfo,metier</attribute>
    <attribute name='corps'>var NbMetier=MetiersPossibles.size();
var somme=0;
for (imet=MetiersPossibles.iterator();imet.hasNext();){
	met=imet.next();
	somme+=StratMonthInfo.getProportionMetier(met);
}
for (imet=MetiersPossibles.iterator();imet.hasNext();){
	met=imet.next();
	var NouvelleProportion=StratMonthInfo.getProportionMetier(met)+(StratMonthInfo.getProportionMetier(metier)*StratMonthInfo.getProportionMetier(met)/somme);
	StratMonthInfo.setProportionMetier(met, new Packages.java.lang.Float(NouvelleProportion))
}
StratMonthInfo.setProportionMetier(metier, new Packages.java.lang.Float(0)) //le metier vise a alors une proportion nulle</attribute>
    <attribute name='description'>reparti l&apos;effort du m�tier sur la liste des m�tiers possibles</attribute>
    <attribute name='name'>RepartirEffort</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1148981355352#0.9066752286865637'>
    <attribute name='attributs'>Strat,StratMonthInfo,ListeMetiersVises</attribute>
    <attribute name='corps'>var Chaine=Packages.java.lang.String;
var MetiersPossibles=Strat.getSetOfVessels().getMetiers().copy();
//on verifie que les metiers sont bien pratiques au mois courant, qu&apos;ils ne sont pas vises et qu&apos;ils ont le meme engin, et qu&apos;ils ne sont pqs interdits
for (var imet=MetiersPossibles.iterator();imet.hasNext();){
	var met=imet.next();
	if (ListeMetiersVises.contains(met) || StratMonthInfo.getProportionMetier(met)==0 || met.getNom()==&quot;nonActivite&quot; || MetiersInterdits.containsKey(new Chaine(met.getNom())) || MetiersInterditsPresimu.containsKey(new Chaine(met.getNom()+&quot;-&quot;+StratMonthInfo.getMonth().getNumMois()))){
		MetiersPossibles.remove(met);
	}
}
return MetiersPossibles;</attribute>
    <attribute name='description'>renvoie une liste de m�tier de la strat�gie, non vis� par le tac et pratiqu�</attribute>
    <attribute name='name'>MetierSubstStratNonvisePrat</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1148978809932#0.4970214374255384'>
    <attribute name='attributs'>Strat,StratMonthInfo,ListeMetiersVises,metier</attribute>
    <attribute name='corps'>var Chaine=Packages.java.lang.String;
var MetiersPossibles=Strat.getSetOfVessels().getMetiers().copy();
//on verifie que les metiers sont bien pratiques au mois courant, qu&apos;ils ne sont pas vises et qu&apos;ils ont le meme engin, et qu&apos;ils ne sont pqs interdits
for (var imet=MetiersPossibles.iterator();imet.hasNext();){
	var met=imet.next();
	if (ListeMetiersVises.contains(met) || StratMonthInfo.getProportionMetier(met)==0 || met.getEngin().equals(metier.getEngin())==false || met.getNom()==&quot;nonActivite&quot; || MetiersInterdits.containsKey(new Chaine(met.getNom())) || MetiersInterditsPresimu.containsKey(new Chaine(met.getNom()+&quot;-&quot;+StratMonthInfo.getMonth().getNumMois()))){
		MetiersPossibles.remove(met);
	}
}
return MetiersPossibles;</attribute>
    <attribute name='description'>renvoie une liste de m�tier de la strat�gie, p�chant avec le m�me engin, non vis� par le tac et pratiqu�</attribute>
    <attribute name='name'>MetierSubstStratEnginNonvisePrat</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1148909759728#0.5722061694030962'>
    <attribute name='attributs'>date,metapop,suiviePop, metier, proportion</attribute>
    <attribute name='corps'>writeln(&quot;deb de affecterCaptureREJET&quot;);
var suivi = null;
var resManager = control.getResultatManager();
var Info = Packages.fr.ifremer.simulation.Info;
var InfoDim = Packages.fr.ifremer.simulation.InfoDim;

//recherche du suivi pour les pop qui ont une certainte meta pop
for(var i=0; i&lt; suiviePop.size(); i++){
    if(suiviePop.get(i).getPop().getMetaPopulation().equals(metapop)){
        suivi = suiviePop.get(i);
        var populations=suivi.getPop();



    //si on a deja une matrice rejet on le vide (elle vient forc��Sment de la reSgle taille minimale or si le tac est atteint, tout va dorenavant dans les
    //rejets et on mais TOUTES les captures dans les rejets
        var matRejet = suivi.getRejet(date);
	var eff=suiviePop.getN();

        if (matRejet!=null){
            suivi.getRejet(date).mults(0);
        }
        var matRejetBis= MatrixFactory.create(suivi.getCapture());
	//on r�ajoute les survivants aux effectifs
	for (var iiterateur=matRejetBis.iterator();iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		eff.setValue(coordonnees[2],coordonnees[3],eff.getValue(coordonnees[2],coordonnees[3])+iiterateur.getValue()*proportion);
	}
        suivi.addRejet(date,matRejetBis);
        suivi.getRejet(date).setName(&quot;Rejet par metier&quot;);
    }
}

writeln(&quot;fin de affecterCaptureRejet&quot;);

</attribute>
    <attribute name='description'>met les captures au rejet et fait survivre une certaine proportion</attribute>
    <attribute name='name'>affecterCaptureRejetSurvie</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1148906322596#0.7448118532968023'>
    <attribute name='attributs'>date,metapop,suiviePop, metier,TailleMin,proportion</attribute>
    <attribute name='corps'>writeln(&quot;deb de affecterCaptureREJETTailleMin&quot;);
var suivi = null;

//recherche du suivi pour les pop qui ont une certaine meta pop
for(var i=0; i&lt; suiviePop.size(); i++){
	if(suiviePop.get(i).getPop().getMetaPopulation().equals(metapop)){
		suivi = suiviePop.get(i);
		var populations=suivi.getPop();

    //si on a pas deja creer le rejet on le cree et on en fait un resultat
		var matRejet = suivi.getRejet(date);
		if (matRejet==null){      
			var matRejetBis = MatrixFactory.create(suivi.getCapture());
			var  eff=suivi.getN();
//on encapsule les objets des 4 dimensions de la matrice capture
			for (var iiterateur=matRejetBis.iterator();iiterateur.next();){
				var coordonnees=iiterateur.getSemanticsCoordinates();
				var classe=coordonnees[2];
				if (classe.getLongueur()&gt;=TailleMin){
					iiterateur.setValue(0);
				}
				else{
					eff.setValue(coordonnees[2],coordonnees[3],eff.getValue(coordonnees[2],coordonnees[3])+iiterateur.getValue()*proportion);
				}
			}
			matRejetBis.setName(&quot;Rejet par metier&quot;);		
			suivi.addRejet(date,matRejetBis);
		}	
	}
}


writeln(&quot;fin de affecterCaptureRejetTailleMin&quot;);
</attribute>
    <attribute name='description'>Regle_action_lib
Met les captures inf�rieures � TailleMin dans rejet, 
et rajoute aux effectifs la proportion qui survit
</attribute>
    <attribute name='name'>affecterCaptureRejetTailleMinSurvie</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1140190410896#0.08016411335162299'>
    <attribute name='attributs'>table, strategie, metier, mois, proportion</attribute>
    <attribute name='corps'>writeln(&quot;debut reportNonActivite&quot;);
//on regarde si on a d�j� une entr�e pour le mois courant
var matNonActiviteMois=table.get(mois);
var nonactivite=matNonActiviteMois!=null;

if (!nonactivite){
	matNonActiviteMois=MatrixFactory.create(&quot;nonActivite&quot;,new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
	,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
	table.put(mois,matNonActiviteMois);
}

matNonActiviteMois.setValue(strategie,metier,proportion);

writeln(&quot;fin reportNonActivite&quot;);
return table;


</attribute>
    <attribute name='description'>stocke la proportion d&apos;effort du metier dans strategie qui devra etre report� vers nonActivite tous les mois</attribute>
    <attribute name='name'>reportNonActivite</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087219#0.7359885845810413'>
    <attribute name='attributs'>metier,nbLicences,moisDeb,moisFin</attribute>
    <attribute name='corps'>writeln(&quot;addLicences&quot;);
writeln(metier+nbLicences+moisDeb+moisFin);
if(!this.isLimitedPeriode(metier,moisDeb,moisFin)){
  var o =new Object();
  o.nbLicences=nbLicences;
  o.proportionMaxTotale=this.calculProportionMaxTotale(metier,nbLicences);
  o.proportionsMois= new Packages.java.util.Hashtable();

  var m = moisDeb.getNumMois();
  for(m; m!= moisFin.getNumMois()+1;m++){
    o.proportionsMois.put(this.Mois.getMois(m).toString(),
                          this.calculProportionMois(metier,this.Mois.getMois(m)));

  }
  var a = new Array(metier,moisDeb,moisFin,o);
  this.list.push(a);

}
else{
  writeln(&quot;il existe deja une licence touchant le metier:&quot;+metier)
  writeln(&quot; sur la periode:&quot;+ moisDeb.toString()+&quot;  _  &quot;+moisFin.toString());
}

writeln(&quot;fin addLicence&quot;);</attribute>
    <attribute name='description'>constructeur
ajoute le metier a la this.list et remplit les divers champs
@param metier
@param nbLicences
@param moisDeb
@param moisFin</attribute>
    <attribute name='name'>addLicence</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087201#0.9639291153189607'>
    <attribute name='attributs'></attribute>
    <attribute name='corps'>var Vector=Packages.java.util.Vector;
this.Mois = Packages.fr.ifremer.noejb.Mois;
//on cree un array de taille n qui contiendra des tableaux ayant pour champ:
// le metierKey, la moisDeb, le moisFin et un object ayant pour attribut:
//proportionMaxTotale,nbLicences, une hashtable proportionsMois

this.list = new Array();
this.METIER=0;
this.MOISDEB=1;
this.MOISFIN=2;
this.OBJECT=3;
//list des metiersInterdits
this.metiersInterdits = new Array();
</attribute>
    <attribute name='description'>constructeur</attribute>
    <attribute name='name'>GestionLicenceMetier_interdits</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087441#0.59184052113772'>
    <attribute name='attributs'></attribute>
    <attribute name='corps'>writeln(&quot;getMetiersInterdits&quot;);

return this.metiersInterdits;
prinln(&quot;fin getMetiersInterdits&quot;);</attribute>
    <attribute name='description'>constructeur
retourne le array des metiers interdits</attribute>
    <attribute name='name'>getMetiersInterdits</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087250#2.83635305223906E-4'>
    <attribute name='attributs'>metier</attribute>
    <attribute name='corps'>writeln(&quot;addMetierInterdit&quot;);
if(!this.isInterdit(metier))
	this.metiersInterdits.push(metier);
writeln(&quot;fin addMetierInterdit&quot;);</attribute>
    <attribute name='description'>constructeur
ajoute le metierInterdit a this.metiersInterdits
@param metierKey
</attribute>
    <attribute name='name'>addMetierInterdit</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087320#0.3615551917557245'>
    <attribute name='attributs'>metiers</attribute>
    <attribute name='corps'>writeln(&quot;addMetiersInterdits&quot;);
for(var i=0; i&lt;metiers.length; i++)
if(!this.isInterdit(metiers[i]))
	this.metiersInterdits.push(metiers[i]);
writeln(&quot;fin addMetiersInterdits&quot;);</attribute>
    <attribute name='description'>constructeur
ajoute les metiersInterdits a this.metiersInterdits
@param un array de metiers
</attribute>
    <attribute name='name'>addMetiersInterdits</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087368#0.048597990672362146'>
    <attribute name='attributs'>metier,nbLicences</attribute>
    <attribute name='corps'>writeln(&quot;deb calculProportionMaxTotal&quot;);
var nbBateau = 0;
writeln(&quot;0&quot;);
var strategies=Regle_libUtil.getStrategiesMetier(metier);
writeln(&quot;1&quot;);
for(var i=0; i&lt; strategies.length;i++){
  var res = StrFloFactory.findAllByStrategie(strategies[i]);
  for(var j=0; j&lt;res.size();j++){
    nbBateau = nbBateau + res.get(j).getNombre();
  }
  writeln(&quot;3&quot;);
}
var result=nbLicences/nbBateau;

writeln(&quot;fin de calculProportionMaxTotale&quot;);
return result;

</attribute>
    <attribute name='description'>constructeur
retourne le proportionMaxTotal que le metier peut atteindre 
sans depasser le nombre de licences autorisees
@param metier
@param nbLicences
</attribute>
    <attribute name='name'>calculProportionMaxTotale</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087400#0.3096148730789895'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;calculProportionMois&quot;);
var prop = 0;

var res = db.oql(&quot;select * from fr.ifremer.db.StrMetFactory where mois=? and metier=?&quot;,
                 (new DBArgument()).add(mois.getNumMois()).add(metier));

for(var i=0; i&lt;res.size();i++){
  prop = prop + res.get(i).getProportion();
}

writeln(&quot;fin de calculProportionMois&quot;);
return prop;

</attribute>
    <attribute name='description'>constructeur
retourne la proportion totale du metier pour le mois. (calculer a partir de StrMetTable.
@param metier
@param mois</attribute>
    <attribute name='name'>calculProportionMois</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087425#0.36065658135521106'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;deb getProportionMaxTotale&quot;);
var obj = this.getObject(metier,mois);
if(obj!=null){
  var propMax = obj.proportionMaxTotale;
  var prop = obj.proportionsMois.get(mois.toString());

  if(propMax&lt;prop)
    return prop-propMax;
}
return 0;</attribute>
    <attribute name='description'>constructeur
retourne true si le metier depasse son nombre de licence.
@param metier
@param mois</attribute>
    <attribute name='name'>getDepassementLicence</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087521#0.6476308488548411'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>
for(var i=0;i&lt;this.list.length;i++){
  if(this.list[i][this.METIER].equals(metier))
    if(this.list[i][this.MOISDEB].getNumMois()&lt;=mois.getNumMois())
      if(this.list[i][this.MOISFIN].getNumMois()&gt;=mois.getNumMois())
        return this.list[i][this.OBJECT];
}
return null;</attribute>
    <attribute name='description'>constructeur</attribute>
    <attribute name='name'>getObject</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087450#0.5950319217120895'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;deb getProportionMaxTotale&quot;);
var obj=this.getObject(metier,mois);
if(obj!=null)
  return obj.nbLicences;
else 
  return null;</attribute>
    <attribute name='description'>constructeur
retourne le nombre de licences
@param metier
@param mois</attribute>
    <attribute name='name'>getNbLicences</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087490#0.7840258656868058'>
    <attribute name='attributs'></attribute>
    <attribute name='corps'>
return this.metiersInterdits.length;

</attribute>
    <attribute name='description'>retourne le nombre de metier touche par les licences</attribute>
    <attribute name='name'>getNbMetiersInterdits</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087505#0.8306109285774604'>
    <attribute name='attributs'></attribute>
    <attribute name='corps'>writeln(&quot;getNbMetiersLicences&quot;);
return this.list.length;

writeln(&quot;fin getNbMetiersLicences&quot;);</attribute>
    <attribute name='description'>retourne le nombre de metier touche par les licences</attribute>
    <attribute name='name'>getNbMetiersLicences</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087598#0.6244740949695219'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;deb getProportionMaxTotale&quot;);
var obj= this.getObject(metier,mois);
if(obj != null){
  var propMax = obj.proportionMaxTotale;
  var prop = obj.proportionsMois.get(mois.toString());

  if(propMax&lt;prop)
    return true;
  else 
    return false;
}
else
  return false;</attribute>
    <attribute name='description'>constructeur
retourne true si le metier depasse son nombre de licence.
@param metierKey
@param mois</attribute>
    <attribute name='name'>isDepassementLicence</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087533#0.16715191656399897'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;deb getProportionCourante&quot;);
var obj=this.getObject(metier,mois);
if(obj!=null)
  return obj.proportionsMois.get(mois.toString());
else 
  return null;</attribute>
    <attribute name='description'>constructeur
retourne la proportion occupee par le metierKey pour le mois
@param metier
@param mois</attribute>
    <attribute name='name'>getProportionCourante</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1139567283454#0.6770470423779626'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var PDate=Packages.fr.ifremer.nodb.Date;
var finsimu=resultats.getLastDate().getDate();


var result=&quot;&quot;;
writeln(&quot;debut export vesselmargin&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));


for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date, &quot;matriceVesselMarginOverVariableCostsPerStrategyPerVessel&quot;);
	for(var iiterateur=matrice.iterator(); iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var str=coordonnees[0];
		result+=str.getName()+&quot;;&quot;+idate+&quot;;&quot;+iiterateur.getValue()+&quot;\n&quot;;
	}
}
writeln(&quot;fin export vesselmargin&quot;);

return &quot;&quot;+result;</attribute>
    <attribute name='description'>Export les VesselMargin
tableau avec des lignes
strat;date;value</attribute>
    <attribute name='name'>VesselMargin</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1139567170937#0.4418705344455688'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var PDate=Packages.fr.ifremer.nodb.Date;
var finsimu=resultats.getLastDate().getDate();


var result=&quot;&quot;;
writeln(&quot;debut export ownermargin&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));


for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date, &quot;matriceOwnerMarginOverVariableCostsPerStrategyPerVessel&quot;);
	for(var iiterateur=matrice.iterator(); iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var str=coordonnees[0];
		result+=str.getName()+&quot;;&quot;+idate+&quot;;&quot;+iiterateur.getValue()+&quot;\n&quot;;
	}
}
writeln(&quot;fin export ownermargin&quot;);

return &quot;&quot;+result;</attribute>
    <attribute name='description'>Export les OwnerMargin
tableau avec des lignes
strat;date;value</attribute>
    <attribute name='name'>OwnerMargin</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1139566900980#0.03800346222983464'>
    <attribute name='attributs'>resultats, buffer</attribute>
    <attribute name='corps'>writeln(&quot;debut export abondances&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var PDate=Packages.fr.ifremer.nodb.Date;



var finsimu=resultats.getLastDate().getDate();

for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date,&quot;matriceOwnerMarginOverVariableCostsPerStrategyPerVessel&quot;);
	for(var ic=matrice.iterator(); ic.next();){
		var coordonnees=ic.getSemanticsCoordinates();
		var str=coordonnees[0];
		buffer.write(str.getName()+&quot;;&quot;+idate+&quot;;&quot;+ic.getValue()+&quot;\n&quot;);
	}
}
writeln(&quot;fin export OwnerMargin&quot;);

return 0;</attribute>
    <attribute name='description'>Export les OwnerMargin
tableau avec des lignes
strat;date;value</attribute>
    <attribute name='name'>OwnerMarginSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087545#0.3321003780879992'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;deb getProportionMaxTotale&quot;);
var obj= this.getObject(metier,mois);
if(obj!=null)
  return obj.proportionMaxTotale;
else
  return null;</attribute>
    <attribute name='description'>constructeur
retourne la proportion occupe par le metierKey pour le mois
@param metier
@param mois</attribute>
    <attribute name='name'>getProportionMaxTotale</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087565#0.7553470108830392'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;deb getProportionRestante&quot;);
if(this.isLimited(metier,mois)){
  var diff= this.getProportionMaxTotale(metier,mois) -
            this.getProportionCourante(metier,mois);

  if(diff&gt;0)
    return diff;
  else 
    return 0;
}
else
  return null;</attribute>
    <attribute name='description'>constructeur
retourne la proportion non occupe par le metierKey pour le mois
@param metier
@param mois</attribute>
    <attribute name='name'>getProportionRestante</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087614#0.5489953153045608'>
    <attribute name='attributs'>metier</attribute>
    <attribute name='corps'>writeln(&quot;isInterdit&quot;);
for(var i=0; i&lt;this.metiersInterdits.length;i++)
  if(this.metiersInterdits[i].equals(metier))
    return true;

return false;
</attribute>
    <attribute name='description'>constructeur
retourne true si le metier est interdit
@param metier</attribute>
    <attribute name='name'>isInterdit</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087626#0.6613163025194861'>
    <attribute name='attributs'>metier,mois</attribute>
    <attribute name='corps'>writeln(&quot;deb isLimited&quot;);
var obj= this.getObject(metier,mois);
if(obj!=null){
  return true;
}
else{
  writeln(&quot;fin de isLimited&quot;);
  return false;
}</attribute>
    <attribute name='description'>constructeur
retourne true si le metier est limite par une licence
@param metier
@param mois</attribute>
    <attribute name='name'>isLimited</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087637#0.44004198560035535'>
    <attribute name='attributs'>metier,mois1,mois2</attribute>
    <attribute name='corps'>writeln(&quot;deb isLimitedPeriode&quot;);

for(var m= mois1.getNumMois();m&lt;mois2.getNumMois()+1;m++)
  if(this.isLimited(metier, this.Mois.getMois(m)))
    return true;
return false;
</attribute>
    <attribute name='description'>constructeur
retourne true si le metier est limite par une licence
@param metier
@param mois1
@param mois2</attribute>
    <attribute name='name'>isLimitedPeriode</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1124286086955#0.18377913873833862'>
    <attribute name='attributs'>date,metapop,suiviePop, metier,TailleMin</attribute>
    <attribute name='corps'>writeln(&quot;deb de affecterCaptureREJETTailleMin&quot;);
var suivi = null;

//recherche du suivi pour les pop qui ont une certaine meta pop
for(var i=0; i&lt; suiviePop.size(); i++){
	if(suiviePop.get(i).getPop().getMetaPopulation().equals(metapop)){
		suivi = suiviePop.get(i);
		var populations=suivi.getPop();

    //si on a pas deja creer le rejet on le cree et on en fait un resultat
		var matRejet = suivi.getRejet(date);
		if (matRejet==null){      
			var matRejetBis = MatrixFactory.create(suivi.getCapture());
//on encapsule les objets des 4 dimensions de la matrice capture
			for (var iiterateur=matRejetBis.iterator();iiterateur.next();){
				var coordonnees=iiterateur.getSemanticsCoordinates();
				var classe=coordonnees[2];
				if (classe.getLongueur()&gt;=TailleMin){
					iiterateur.setValue(0);
				}
			}
			matRejetBis.setName(&quot;Rejet par metier&quot;);		
			suivi.addRejet(date,matRejetBis);
		}	
	}
}


writeln(&quot;fin de affecterCaptureRejetTailleMin&quot;);
</attribute>
    <attribute name='description'>Regle_action_lib
modifit la matrice 2D rejet(classes, populations) en affectant les captures au rejet.
A utiliser par le TAC dans actionApres</attribute>
    <attribute name='name'>affecterCaptureRejetTailleMin</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1139566933934#0.056079255962955266'>
    <attribute name='attributs'>resultats, buffer</attribute>
    <attribute name='corps'>writeln(&quot;debut export vesselmargin&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var PDate=Packages.fr.ifremer.nodb.Date;



var finsimu=resultats.getLastDate().getDate();

for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date,&quot;matriceVesselMarginOverVariableCostsPerStrategyPerVessel&quot;);
	for(var ic=matrice.iterator(); ic.next();){
		var coordonnees=ic.getSemanticsCoordinates();
		var str=coordonnees[0];
		buffer.write(str.getName()+&quot;;&quot;+idate+&quot;;&quot;+ic.getValue()+&quot;\n&quot;);
	}
}
writeln(&quot;fin export vesselMargin&quot;);

return 0;</attribute>
    <attribute name='description'>Export les VesselMargin
tableau avec des lignes
strat;date;value</attribute>
    <attribute name='name'>VesselMarginSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616089737#0.5109664268275419'>
    <attribute name='attributs'>date,metapop,metier</attribute>
    <attribute name='corps'>// on recupere la listes des especes capturables a cette date par ce metier
writeln(&quot;deb isCapturePrincipaleDate\n&quot;);
var result = false;
var eC= this.getEspecesCapturablesDate(date,metier);
writeln(&quot;EspecesCapturablesDate: &quot;+eC);
//eC=arrayList d&apos;especes capurable
for(var iec=eC.iterator(); iec.hasNext();){
  var espcapt=iec.next();
  if(metapop.equals(espcapt.getMetaPopulation())){
    result = result || espcapt.getCapturePrimaire(); 
    //bool qui dit si la pop est principale
  }	
}
writeln(&quot;fin de isCapturePrincipaleDate: &quot;+result);
return result;</attribute>
    <attribute name='description'>Regle_libUtil
correction 14/6/01
retourne  vrai si metapop est une espece capturable a date par le metier et en plus est une capture primaire
retourne faux sinon
@param date
@param metapop
@param metier

</attribute>
    <attribute name='name'>isCapturePrincipaleDate</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616089533#0.5848873946536534'>
    <attribute name='attributs'>date, metapop</attribute>
    <attribute name='corps'>writeln(&quot;deb de getMetiersVises&quot;);
var result = new Packages.java.util.ArrayList();
var e = MetierFactory.findAll().iterator();
while(e.hasNext()){
  var metier = e.next();
  if (this.isCapturePrincipaleDate(date,metapop,metier) &amp;&amp; (!result.contains(metier)))
        result.add(metier);
}

writeln(&quot;fin de metiersvises&quot;);
return result;</attribute>
    <attribute name='description'>Regle_libUtil
retourne un tableau des metiers qui ont metapop comme especescapturables a date
ce tableau est sans doublon
@param date
@param metapop</attribute>
    <attribute name='name'>getMetiersVises</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616089243#0.6436019081490708'>
    <attribute name='attributs'>date,metier</attribute>
    <attribute name='corps'>//retourne un array d&apos;especescapturables
// pour toutes les saisons comprenant la date et le metier
writeln(&quot;deb de getEspecesCapturablesDate:&quot;+metier);

var infos = metier.getInfoSaison();
for(var i=0; i&lt;infos.size();i++){
  var info = infos.get(i);
  var saison = info.getSaison();
  if(saison.contains(date.getMois())){
    var especesCaptu = new Packages.java.util.ArrayList(info.getEspecesCaptu());
    writeln(&quot;trouve - fin de getEspecesCapturablesDate&quot;);
    return especesCaptu;
  }
}
writeln(&quot;fin de getEspecesCapturablesDate&quot;);
return new Packages.java.util.ArrayList();
</attribute>
    <attribute name='description'>Regle_libUtil
retourne le tableau des especes capturables par metier a date
@param date
@param metier
correction le 14/6/01</attribute>
    <attribute name='name'>getEspecesCapturablesDate</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087417#0.6022343215516021'>
    <attribute name='attributs'></attribute>
    <attribute name='corps'>writeln(&quot;clear&quot;);
this.list=new Array();
this.metiersInterdits = new Array();
</attribute>
    <attribute name='description'>constructeur
met a 0 les tableaux de donnees</attribute>
    <attribute name='name'>clear</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086008#0.39396444139619635</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616088307#0.2115671261303843'>
    <attribute name='attributs'>date,metapop,suiviePop, metier</attribute>
    <attribute name='corps'>writeln(&quot;deb de affecterCaptureREJET&quot;);
var suivi = null;
var resManager = control.getResultatManager();
var Info = Packages.fr.ifremer.simulation.Info;
var InfoDim = Packages.fr.ifremer.simulation.InfoDim;

//recherche du suivi pour les pop qui ont une certainte meta pop
for(var i=0; i&lt; suiviePop.size(); i++){
    if(suiviePop.get(i).getPop().getMetaPopulation().equals(metapop)){
        suivi = suiviePop.get(i);
        var populations=suivi.getPop();



    //si on a deja une matrice rejet on le vide (elle vient forc��Sment de la r��Sgle taille minimale or si le tac est atteint, tout va dor��Snavent dans les
    //rejets et on mais TOUTES les captures dans les rejets
        var matRejet = suivi.getRejet(date);

        if (matRejet!=null){
            suivi.getRejet(date).mults(0);
        }
        var matRejetBis= MatrixFactory.create(suivi.getCapture());
        suivi.addRejet(date,matRejetBis);
        suivi.getRejet(date).setName(&quot;Rejet par metier&quot;);
    }
}

writeln(&quot;fin de affecterCaptureRejet&quot;);

</attribute>
    <attribute name='description'>Regle_action_lib
modifit la matrice  rejet en affectant les captures au rejet.
A utiliser par le TAC dans actionApres</attribute>
    <attribute name='name'>affecterCaptureRejet</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616087703#0.1962801530985394'>
    <attribute name='attributs'></attribute>
    <attribute name='corps'>// import de classe java
var StringBuffer = Packages.java.lang.StringBuffer;
var Hashtable = Packages.java.util.Hashtable;
var Vector = Packages.java.util.Vector;

var MatrixFactory = Packages.org.codelutin.math.matrix.MatrixFactory.getInstance();

var Mois = Packages.fr.ifremer.nodb.Mois;
var SimulationSuivi = Packages.fr.ifremer.simulation.SimulationSuivi;
var Simulateur = Packages.fr.ifremer.simulation.Simulateur2;
var MetiersInterdits = new Packages.java.util.HashMap();//Metier Interdit par une regle de gestion
							//cl�: NomMetier-NumMois
var MetiersInterditsPresimu = new Packages.java.util.HashMap(); //Metier Interdit par un script de pr�simu
								//cl�: NomMetier
var nonActivite = new Packages.java.util.HashMap(); //cl�: date
</attribute>
    <attribute name='description'>Variable global</attribute>
    <attribute name='name'>Global</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086020#0.8273487790096247</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1088520995714#0.4078370116547927'>
    <attribute name='attributs'>suivie,metapop</attribute>
    <attribute name='corps'>writeln(&quot;deb TotalCcumpoids&quot;);
writeln(&quot;suivi.length=&quot;+suivie.size());
 
var res = 0;


for(var i=0; i&lt; suivie.size();i++){
	var current = suivie.get(i);
	var pop = current.getPop();

	if(metapop.equals(pop.getMetaPopulation())){
		writeln(&quot;ajout:&quot; + pop);
		var mat = current.getMatriceCaptureCumulee();
		

		if(mat!=null) {
			var temp= MatrixFactory.create(mat);
			temp=temp.sumOverDim(0);
			temp=temp.sumOverDim(1);
			temp=temp.sumOverDim(3);
			var BadStrat=temp.getSemantics(0);
			var Strats= new Packages.java.util.ArrayList(BadStrat);
			var BadMetiers=temp.getSemantics(1);
			var Metiers = new Packages.java.util.ArrayList(BadMetiers);
			var BadZones=temp.getSemantics(3);
			var Zones = new Packages.java.util.ArrayList(BadZones);
			var BadClasses=temp.getSemantics(2);
			var Classes=new Packages.java.util.ArrayList(BadClasses);


//on va maintenant affecter la valeur 0 aux rejets pour les classes de taille sup��Srieure ��S TailleMin			
			for (var ic=Classes.iterator(); ic.hasNext();){
				var c=ic.next();
				var poids=c.getPoidsMoyen();
				res+=(temp.getValue(Strats.get(0),Metiers.get(0),c,Zones.get(0))*poids/1000.0);
			}
		}
	}
}

writeln(&quot;totalCcumpoids pour &quot;+metapop+&quot;:&quot;+res);
return res;</attribute>
    <attribute name='description'>Regle_action_lib
Renvoit le total des captures  en poids pour une metapop  depuis le debut de l&apos;annee
@param suivie le tableau des suivie des pop
@param metapop l&apos;objet metapop sur lequel s&apos;applique le TAC</attribute>
    <attribute name='name'>totalCcumpoids</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086069#0.8422720856752968</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616089722#0.26417420492711297'>
    <attribute name='attributs'>date,metapop,metier</attribute>
    <attribute name='corps'>// on recupere la listes des especes capturables a cette date par ce metier
writeln(&quot;deb isCaptureDate\n&quot;);

var eC= this.getEspecesCapturablesDate(date,metier);
//eC=arraylist d&apos;especes capurable
for(var imeta=eC.iterator(); imeta.hasNext();){
  var meta=imeta.next();
  if(metapop.equals(meta.getMetaPopulation())){
    writeln(&quot;fin de isCaptureDate&quot;);
    return true; 
    //bool qui dit si la pop est principale
  }	
}
writeln(&quot;fin de isCaptureDate&quot;);
return false;</attribute>
    <attribute name='description'>Regle_libUtil
correction 14/6/01

</attribute>
    <attribute name='name'>isCaptureDate</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086074#0.5865907024004597</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616090234#0.6115821396609552'>
    <attribute name='attributs'>param</attribute>
    <attribute name='corps'>writeln(&quot;Dans Simul.simul&quot;);

writeln(&quot;pops: &quot; + param.getPopulations());
writeln(&quot;Ns:&quot; + param.getMatriceNs());
writeln(&quot;YearNumber:&quot; + param.getYearNumber());



//choix du simulateur
// simulateur java
//var sim = new Packages.fr.ifremer.simulation.Simulateur2(db, control);
//sim.simuler(param.getPopulations(), param.getMatriceNs(), param.getYearNumber());

// simulateur ECMAScript
var sim = new SimulateurES();
sim.simuler(param.getPopulations(), param.getMatriceNs(), param.getYearNumber(), param.getRegleParams(),param.getId1(),param.toString());

return &quot;&lt;result/&gt;&quot;</attribute>
    <attribute name='description'>Simulation utilisant complement 
le simulateur en java
@param paramXML [String] les parametres de la simulation en XML</attribute>
    <attribute name='name'>simul</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086120#0.2853775210438779</attribute>
    <attribute name='simulateur'>true</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1032170615832#0.34366679411551526'>
    <attribute name='attributs'>regle</attribute>
    <attribute name='corps'>var result=new Array();

//writeln(&quot;avant boucle&quot;);

for(var o=0; o&lt;regle.size();o++){
  var nom= regle.get(o).getRegleGestion().getNom();
writeln(&quot;recherche de la regle:&quot;+nom);
  var param= regle.get(o).getRegleGestionParameter();

  var oneregle = global[nom];
  oneregle = new oneregle(param);

//  var oneregle = eval(&amp;quot;new &amp;quot;+nom+&amp;quot;();&amp;quot;);
//  oneregle.init(param);

  result.push(oneregle);

//writeln(&amp;quot;Fini pour la regle:&amp;quot;+nom);

}

writeln(&quot;fin SimulateurES.initRegle&quot;);
return result;
</attribute>
    <attribute name='description'>SimulateurES
@param regle un Array d&apos;object
	@attribut nom: nom de la regle
	@attribut param : la hashtable decrivant les parametres specifiques</attribute>
    <attribute name='name'>initRegle</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086126#0.4404618778148415</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616086777#0.614056900247323'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var PDate=Packages.fr.ifremer.nodb.Date;
writeln(&quot;debut de export effort&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var result=&quot;&quot;;

var finsimu=resultats.getLastDate().getDate();

for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date, &quot;matriceEffortPerStrategyMet&quot;);
	writeln(&quot;on a la matrice&quot;);
	for (var iiterateur=temp.iterator();iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var metier=coordonnees[1];
		var strat=coordonnees[0];
		capture=iiterateur.getValue();
		result+=strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;;
	}
}

writeln(&quot;fin de EffortMetier&quot;);
return &quot;&quot;+result;



</attribute>
    <attribute name='description'>retourne un tableau
strategie;metier;date;effort</attribute>
    <attribute name='name'>EffortsMetier</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616090469#0.09967439367828224'>
    <attribute name='attributs'>pops,minit,nbAnnee,regle,nomsimu,chaineparam</attribute>
    <attribute name='corps'>var resManager = control.getResultatManager();
var simulateur = new Simulateur(db, control);

//On encapsule les pops et les effectifs dans l&apos;objet
// SimulationSuivi qui permet de suivre la pop. C&apos;est a dire
// de prendre en compte les repros et recrutements
var populations = new Vector();
for(var i=0; i&lt;pops.size(); i++){
  populations.add(new SimulationSuivi(pops.get(i), minit.get(i)));
}

writeln(&quot;deb de simuler&quot;);


writeln(&quot;2&quot;);
//construction des regles
var regles = this.initRegle(regle);

var gestionMetier= new GestionLicenceMetier_interdits();

//writeln(&quot;taille du tableau des regles:&quot;+regle.length);
while(date.getAnnee()&lt;nbAnnee){
  MetiersInterdits.clear();
  writeln(&quot;la date:&quot;+date.toString());
  control.setText(&quot;la date: &quot;+date.toString());
  db.beginTransaction();

  if(regles.length!=0){
    gestionMetier.clear(); // remise a 0 des metiers interdits et des licences
    if(date.getMois().getNumMois() == 0){ // on est au mois de janvier
      for(var x=0; x&lt;populations.size(); x++){
        populations.get(x).razCaptureCumulee();
      }
    }
    var allMetiers= SiMatrice.getListMetiers()
    for(var i=0; i&lt;allMetiers.size(); i++){
      var metier= allMetiers.get(i);
      control.setText(&quot;la date: &quot;+date.toString()+&quot; - Action Avant - m�tier: &quot;+metier.getNom());
//      writeln(&quot;metier:&quot;+metier.getNom());
      for(var r=0; r&lt; regles.length;r++){
	var _regle = regles[r];
//        writeln(&quot;dans simuler, nomRegle =&quot;+_regle.getNom());
//        control.setText(&quot;la date: &quot;+date.toString()+&quot; - ActionAvant Regle: &quot;+ _regle.getNom()+&quot; - Metier: &quot;+metier.getNom());
	
	var _gestionMetier = gestionMetier;

//	writeln(&quot;metier:&quot;+metier);
//	writeln(&quot;populations:&quot;+populations);
//	writeln(&quot;gestionMetier:&quot;+_gestionMetier);
//	writeln(&quot;code parametre:&quot;+_regle.parametre);

        _regle.parametre(date,metier,populations,_gestionMetier);
	
	if (_regle.oldValueCondition == undefined )
            _regle.oldValueCondition = new Object();

        _regle.oldValueCondition[metier.getNom()] = _regle.condition(_regle.p);
        if(_regle.oldValueCondition[metier.getNom()]){
          gestionMetier = _regle.actionAvant(_regle.p);
        }
      }
    }
  }


  // Sauvegarde de l&apos;effort
// 20041109 suppression de la sauvegarde apres reecriture du simulateur
//bb


  for (var k=0; k&lt;populations.size(); k++){
    writeln(&quot;CALCULMOIS&quot;);
    writeln(&quot;pop=   &quot;+pops.get(k).toString());
    control.setText(&quot;la date: &quot;+date.toString()+&quot; Calcul mois Pop: &quot;+pops.get(k).toString());
    simulateur.calculMois(SiMatrice, populations.get(k), date);
  }

  writeln(&quot;APRES CALCUL&quot;);
  if(regles.length!=0){
    var allMetiers= MetierFactory.findAll();
    for(var i=0; i&lt;allMetiers.size(); i++){
      var metier = allMetiers.get(i);
      for(var r=0; r!= regles.length;r++){
        var _regle = regles[r];
        control.setText(&quot;la date: &quot;+date.toString()+&quot; - ActionApres - Metier: &quot;+metier.getNom());

        //ajout pour la correction du bug #1 30/08/2001
        _regle.parametre(date,metier,populations,gestionMetier);
        //fin bug #1
        if(_regle.condition(_regle.p, _regle.oldValueCondition[metier.getNom()])){
          //on passe metier qui est le metier en cours de traitement
          gestionMetier = _regle.actionApres(_regle.p);
        }
      }
    }
  }
   control.setText(&quot;la date: &quot;+date.toString()+&quot; Ajout des matrices dans resultat&quot;);
   writeln(&quot;Verif rejet dans simulateurES&quot;);
  // ajout des resultats Rejet et debarquement


  for(var i=0; i&lt;populations.size(); i++){
    var suivi = populations.get(i);
    var matRejet = suivi.getRejet(date);
    var haveRejet = matRejet != null;
writeln(&quot;matrice de rejet &quot;+date+&quot; &quot;+suivi.getPop()+&quot;:&quot;+matRejet);
    if(!haveRejet){
      matRejet = MatrixFactory.create(&quot;Rejet par metier&quot;,
                               new Array(SiMatrice.getListStrategies(),
                                         SiMatrice.getListMetiers(),
                                         suivi.getInfoClasse(),
                                         suivi.getInfoZone()),
                               new Array(&quot;Strategies&quot;, &quot;Metiers&quot;, &quot;Classes&quot;, &quot;Zones&quot;));
    }

    if(haveRejet || date.getDate() == 0){
	
        //ajout du rejet
        // on ajoute les rejets que s&apos;il y en a, car avec la nouvelle implantation de rendu des resultats
        // les matrices manquantes seront automatiquement remplac��S par des matrices nulle
        // Mais quoi qu&apos;il arrive on en met un pour qu&apos;il apparaisse dans la combo
        resManager.addResult(date, suivi.getPop(), matRejet);
    }
    var mat=MatrixFactory.create(GravityModel.matriceOwnerMarginOverVariableCostsPerStrategyPerVessel(date));
    resManager.addResult(date,mat);
    var mat2=MatrixFactory.create(GravityModel.matriceVesselMarginOverVariableCostsPerStrategyPerVessel(date));
    resManager.addResult(date,mat2);
    var mat3=MatrixFactory.create(GravityModel.matriceGrossValueOfLandingsPerStrategyMet(date));
    resManager.addResult(date,mat3);

    //ajout du debarquement
    var pop = suivi.getPop();
    var matDebarquement = MatrixFactory.create(suivi.getCapture());
writeln(&quot;matrice suivi = &quot; + matDebarquement);
    matDebarquement.minus(matRejet);
    matDebarquement.setName(&quot;Debarquement par metier&quot;);
    resManager.addResult(date, pop, matDebarquement);

//ajout du temps de nonActivite
  var matNonActivite=nonActivite.get(date);
  var nonactivite=matNonActivite!=null;
  if(!nonactivite &amp;&amp; date.getDate() == 0){
	matNonActivite=MatrixFactory.create(&quot;nonActivite&quot;,
        new Array(SiMatrice.getListStrategies(),SiMatrice.getListMetiers())
	,new Array(&quot;Strategies&quot;, &quot;Metiers&quot;));
  }
    if(nonactivite || date.getDate() == 0){
	
        //ajout du rejet
        // on ajoute les rejets que s&apos;il y en a, car avec la nouvelle implantation de rendu des resultats
        // les matrices manquantes seront automatiquement remplac��S par des matrices nulle
        // Mais quoi qu&apos;il arrive on en met un pour qu&apos;il apparaisse dans la combo
        resManager.addResult(date, matNonActivite);
    }

 



  }

  // demontage des regles par les logs
  control.setText(&quot;la date: &quot;+date.toString()+&quot; d�montage des r�gles&quot;);
  writeln(&quot;rollback&quot;);
  db.rollbackTransaction();

  date.inc();

  if(control.isStopSimulationRequest())
    break;
  var runtime= java.lang.Runtime.getRuntime();
  var memoireutil=new Packages.java.lang.Float(runtime.totalMemory()/1048576.0)
  writeln(&quot;Memoire Utilisee: &quot;+memoireutil.intValue()+&quot;Mo&quot;);

  writeln(&quot;fin du pas de temps&quot;);
}


writeln(&quot;Fin de simulation&quot;);
//return 0;

// Si vous souhaitez faire des exports avant la sauvegarde, il vous suffit
// de retirer le return ci-dessus et de choisir les bon exports en dessous

var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat(&quot;dd_MM_yyyy-HHmm&quot;);

var Separateur=Packages.java.io.File.separator;
var chemin=Packages.fr.ifremer.Config.EXPORTPATH+Separateur+nomsimu+&quot;-&quot;+formatteur.format(dateexport)+Separateur;


var creation= new Packages.java.io.File(chemin);
creation.mkdirs();


var fichier=new Packages.java.io.FileWriter(chemin+&quot;Parametres.txt&quot;);
var buffer=new Packages.java.io.BufferedWriter(fichier);
buffer.write(chaineparam);
buffer.close();
fichier.close();

/*
fichier=new Packages.java.io.FileWriter(Packages.java.io.File(creation, &quot;Abondances.csv&quot;));
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.AbondancesSteph(pops,resManager,buffer);
buffer.close();
fichier.close();
*/
fichier=new Packages.java.io.FileWriter(chemin+&quot;Biomasses.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.BiomassesSteph(pops,resManager,buffer);
buffer.close();
fichier.close();

fichier=new Packages.java.io.FileWriter(chemin+&quot;OwnerMargin.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.OwnerMarginSteph(resManager,buffer);
buffer.close();
fichier.close();

fichier=new Packages.java.io.FileWriter(chemin+&quot;VesselMargin.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.VesselMarginSteph(resManager,buffer);
buffer.close();
fichier.close();


fichier=new Packages.java.io.FileWriter(chemin+&quot;GrossValueOfLandings.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.GrossValueOfLandingsSteph(resManager,buffer);
buffer.close();
fichier.close();


/*
fichier=new Packages.java.io.FileWriter(chemin+&quot;CapturesNombre.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.CapturesNombreSteph(pops,resManager,buffer);
buffer.close();
fichier.close();
*/

fichier=new Packages.java.io.FileWriter(chemin+&quot;CapturesPoids.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.CapturesPoidsSteph(pops,resManager,buffer);
buffer.close();
fichier.close();

fichier=new Packages.java.io.FileWriter(chemin+&quot;nonActivite.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.nonActiviteSteph(pops,resManager,buffer);
buffer.close();
fichier.close();
/*
fichier=new Packages.java.io.FileWriter(chemin+&quot;EffortsMetier.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.EffortsMetierSteph(pops,resManager,buffer);
buffer.close();
fichier.close();

fichier=new Packages.java.io.FileWriter(chemin+&quot;RejetsNombre.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.RejetsNombreSteph(pops,resManager,buffer);
buffer.close();
fichier.close();

fichier=new Packages.java.io.FileWriter(chemin+&quot;RejetsPoids.csv&quot;);
buffer=new Packages.java.io.BufferedWriter(fichier);
Export.RejetsPoidsSteph(pops,resManager,buffer);
buffer.close();
fichier.close();
*/
writeln(&quot;fin du script de simulation&quot;);
simulation.echouer();
return 0;

</attribute>
    <attribute name='description'>SimulateurES
@param regle Array d&apos;objets ayant pour attributs: 
	nom nom de la regle
	param hashtable de parametres specifiques
 
</attribute>
    <attribute name='name'>simuler</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616086126#0.4404618778148415</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1126798983063#0.22360838299619745'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var Populations=Parametre.getPopulations();
var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;
var result=&quot;&quot;;
writeln(&quot;debut de export captures poids&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop, &quot;matriceCatchWeightPerStrategyMet&quot;);
		writeln(&quot;on a la matrice&quot;);
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue();
				result+=pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;;
			}
		}
	}
}

writeln(&quot;fin de CapturesPoids&quot;);
return &quot;&quot;+result;
</attribute>
    <attribute name='description'>Export les captures en poids de la simulation.
tableau
pop;strat;metier;id;zone;date;nombre
</attribute>
    <attribute name='name'>CapturesPoids</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1126799343241#0.6522372747840206'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var Populations=Parametre.getPopulations();
var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;
var result=&quot;&quot;;
writeln(&quot;debut de export rejets poids&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date, pop, &quot;Rejet par metier&quot;);
		if (matrice==null){
			matrice=MatrixFactory.create(resultats.getMatrix(new PDate(0),pop ,&quot;Rejet par metier&quot;));
			matrice.mults(0);
		}
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue()*c.getPoidsMoyen();
				result+=pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;;
			}
		}
	}
}

writeln(&quot;fin de RejetsPoids&quot;);
return &quot;&quot;+result;
</attribute>
    <attribute name='description'>Export les rejets en poids de la simulation.
tableau
pop;strat;metier;id;zone;date;poids</attribute>
    <attribute name='name'>RejetsPoids</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1126798491306#0.38569601406189347'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var Populations=Parametre.getPopulations();
var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;
var result=&quot;&quot;;

writeln(&quot;debut de export captures nombre&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop, &quot;matriceCatchPerStrategyMet&quot;);
		writeln(&quot;on a la matrice&quot;);
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue();
				result+=pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;
			}
		}
	}
}

writeln(&quot;fin de CapturesNombre&quot;);



return &quot;&quot;+result;
</attribute>
    <attribute name='description'>Export les captures en nombre de la simulation.
tableau
pop;strat;metier;id;zone;date;nombre
</attribute>
    <attribute name='name'>CapturesNombre</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1126799302182#0.2715882257521902'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var Populations=Parametre.getPopulations();
var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;
var result=&quot;&quot;;
writeln(&quot;debut de export rejets nombre&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop ,&quot;Rejet par metier&quot;);
		if (matrice==null){
			matrice=MatrixFactory.create(resultats.getMatrix(new PDate(0),pop ,&quot;Rejet par metier&quot;));
			matrice.mults(0);
		}
		writeln(&quot;on a la matrice&quot;);
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue();
				result+=pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;;
			}
		}
	}
}

writeln(&quot;fin de RejetsNombre&quot;);
return &quot;&quot;+result;

</attribute>
    <attribute name='description'>Export les rejets en nombre de la simulation.
tableau
pop;strat;metier;id;zone;date;nombre</attribute>
    <attribute name='name'>RejetsNombre</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1129222121430#0.5662309258561612'>
    <attribute name='attributs'>Populations, resultats, buffer</attribute>
    <attribute name='corps'>var PDate=Packages.fr.ifremer.nodb.Date;
writeln(&quot;debut de export effort&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var result=&quot;&quot;;

var finsimu=resultats.getLastDate().getDate();

for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date, &quot;matriceEffortPerStrategyMet&quot;);
	writeln(&quot;on a la matrice&quot;);
	for (var iiterateur=matrice.iterator();iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var metier=coordonnees[1];
		var strat=coordonnees[0];
		capture=iiterateur.getValue();
		buffer.write(strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;);
	}
}


writeln(&quot;fin de EffortMetier&quot;);
return 0;





</attribute>
    <attribute name='description'>retourne un tableau
strategie;metier;date;effort</attribute>
    <attribute name='name'>EffortsMetierSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1129222078580#0.1941903789844418'>
    <attribute name='attributs'>Populations, resultats, buffer</attribute>
    <attribute name='corps'>var PDate=Packages.fr.ifremer.nodb.Date;
var finsimu=resultats.getLastDate().getDate();



writeln(&quot;debut export biomasse&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));


for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop, &quot;matriceBiomass&quot;);
		var BadZones=matrice.getSemantics(1);
		var Zones = new Packages.java.util.ArrayList(BadZones);
		var BadClasses=matrice.getSemantics(0);
		var Classes=new Packages.java.util.ArrayList(BadClasses);
  		for(var iz=Zones.iterator(); iz.hasNext();){
			var z=iz.next();
			for(var ic=Classes.iterator(); ic.hasNext();){
				var c = ic.next();
				buffer.write(pop.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+matrice.getValue(c,z)+&quot;\n&quot;);
			}
		}
	}
}
writeln(&quot;fin export biomasse&quot;);

return 0;</attribute>
    <attribute name='description'>Export les biomasses
tableau avec des lignes
pop;id;zone;date;nombre</attribute>
    <attribute name='name'>BiomassesSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1129222092750#0.48382026371696274'>
    <attribute name='attributs'>Populations, resultats, buffer</attribute>
    <attribute name='corps'>var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;


writeln(&quot;debut de export captures nombre&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop, &quot;matriceCatchPerStrategyMet&quot;);
		writeln(&quot;on a la matrice&quot;);
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue();
				buffer.write(pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;);
			}
		}
	}
}

writeln(&quot;fin de CapturesNombre&quot;);
return 0;

</attribute>
    <attribute name='description'>Export les captures en nombre de la simulation.
tableau
pop;strat;metier;id;zone;date;nombre
</attribute>
    <attribute name='name'>CapturesNombreSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1129222103460#0.759841499266446'>
    <attribute name='attributs'>Populations, resultats,buffer</attribute>
    <attribute name='corps'>var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;

writeln(&quot;debut de export captures poids&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop, &quot;matriceCatchWeightPerStrategyMet&quot;);
		writeln(&quot;on a la matrice&quot;);
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue();
				buffer.write(pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;);
			}
		}
	}
}

writeln(&quot;fin de CapturesPoids&quot;);
return 0;
</attribute>
    <attribute name='description'>Export les captures en poids de la simulation.
tableau
pop;strat;metier;id;zone;date;nombre
</attribute>
    <attribute name='name'>CapturesPoidsSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1129222220950#0.9607620539832165'>
    <attribute name='attributs'>Populations, resultats, buffer</attribute>
    <attribute name='corps'>
var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;

writeln(&quot;debut de export rejets nombre&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop ,&quot;Rejet par metier&quot;);
		if (matrice==null){
			matrice=MatrixFactory.create(resultats.getMatrix(new PDate(0),pop ,&quot;Rejet par metier&quot;));
			matrice.mults(0);
		}
		writeln(&quot;on a la matrice&quot;);
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue();
				buffer.write(pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;);
			}
		}
	}
}

writeln(&quot;fin de RejetsNombre&quot;);
return 0;
</attribute>
    <attribute name='description'>Export les rejets en nombre de la simulation.
tableau
pop;strat;metier;id;zone;date;nombre</attribute>
    <attribute name='name'>RejetsNombreSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1129222236110#0.6519289967310241'>
    <attribute name='attributs'>Populations, resultats, buffer</attribute>
    <attribute name='corps'>
var PDate=Packages.fr.ifremer.nodb.Date;

var capture=0.0;

writeln(&quot;debut de export rejets poids&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));
var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date, pop, &quot;Rejet par metier&quot;);
		if (matrice==null){
			matrice=MatrixFactory.create(resultats.getMatrix(new PDate(0),pop ,&quot;Rejet par metier&quot;));
			matrice.mults(0);
		}
		writeln(&quot;on a la matrice&quot;);
		for (var iiterateur=matrice.iterator();iiterateur.next();){
			var coordonnees=iiterateur.getSemanticsCoordinates();
			var strat=coordonnees[0];
			var metier=coordonnees[1];
			if (strat.getSetOfVessels().getMetiers().contains(metier)){
				var c=coordonnees[2];
				var z=coordonnees[3];
				capture=iiterateur.getValue();
				buffer.write(pop.getNom()+&quot;;&quot;+strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;);
			}
		}
	}
}

writeln(&quot;fin de RejetsPoids&quot;);
return 0;
</attribute>
    <attribute name='description'>Export les rejets en poids de la simulation.
tableau
pop;strat;metier;id;zone;date;poids</attribute>
    <attribute name='name'>RejetsPoidsSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1140518425336#0.3427013443559901'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var PDate=Packages.fr.ifremer.nodb.Date;
writeln(&quot;debut de export nonActivite&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var result=&quot;&quot;;

var finsimu=resultats.getLastDate().getDate();

for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date, &quot;nonActivite&quot;);
	if (matrice==null){
		matrice=MatrixFactory.create(resultats.getMatrix(new PDate(0),&quot;nonActivite&quot;));
		matrice.mults(0);
	}
	for (var iiterateur=temp.iterator();iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var metier=coordonnees[1];
		var strat=coordonnees[0];
		capture=iiterateur.getValue();
		result+=strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;;
	}
}

writeln(&quot;fin de nonActivite&quot;);
return &quot;&quot;+result;



</attribute>
    <attribute name='description'>retourne un tableau
strategie;metier;date;proportion</attribute>
    <attribute name='name'>nonActivite</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1140518555638#0.940120008064025'>
    <attribute name='attributs'>Populations, resultats, buffer</attribute>
    <attribute name='corps'>var PDate=Packages.fr.ifremer.nodb.Date;
writeln(&quot;debut de export nonActivite&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var result=&quot;&quot;;

var finsimu=resultats.getLastDate().getDate();

for (var idate=0;idate&lt;=finsimu;idate++){
	var date=new PDate(idate);
	var matrice=resultats.getMatrix(date, &quot;nonActivite&quot;);
	if (matrice==null){
		matrice=MatrixFactory.create(resultats.getMatrix(new PDate(0),&quot;nonActivite&quot;));
		matrice.mults(0);
	}
	writeln(&quot;on a la matrice&quot;);
	for (var iiterateur=matrice.iterator();iiterateur.next();){
		var coordonnees=iiterateur.getSemanticsCoordinates();
		var metier=coordonnees[1];
		var strat=coordonnees[0];
		capture=iiterateur.getValue();
		buffer.write(strat.getName()+&quot;;&quot;+metier.getNom()+&quot;;&quot;+idate+&quot;;&quot;+capture+&quot;\n&quot;);
	}
}


writeln(&quot;fin de nonActivite&quot;);
return 0;





</attribute>
    <attribute name='description'>retourne un tableau
strategie;metier;date;proportion</attribute>
    <attribute name='name'>nonActiviteSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1030616086630#0.05168264476792184'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>writeln(&quot;debut export abondances&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var Parametre=sim.getParametre();
var Populations=Parametre.getPopulations();
var PDate=Packages.fr.ifremer.nodb.Date;

var result=&quot;&quot;;

var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	writeln(&quot;population &quot;+pop.getNom());
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);

		var matrice=resultats.getMatrix(date,pop, &quot;Abondance&quot;);
		var BadZones=matrice.getSemantics(1);
		var Zones = new Packages.java.util.ArrayList(BadZones);
		var BadClasses=matrice.getSemantics(0);
		var Classes=new Packages.java.util.ArrayList(BadClasses);
  		for(var iz=Zones.iterator(); iz.hasNext();){
			var z=iz.next();
			for(var ic=Classes.iterator(); ic.hasNext();){
				var c = ic.next();
				result+=pop.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+matrice.getValue(c,z)+&quot;\n&quot;;
			}
		}
	}
}
writeln(&quot;fin export abondances&quot;);

return &quot;&quot;+result;</attribute>
    <attribute name='description'>Export les abondances en nombre
tableau avec des lignes
pop;id;zone;date;nombre.</attribute>
    <attribute name='name'>Abondances</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1129222047550#0.9289749781634259'>
    <attribute name='attributs'>Populations, resultats, buffer</attribute>
    <attribute name='corps'>writeln(&quot;debut export abondances&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));

var PDate=Packages.fr.ifremer.nodb.Date;



var finsimu=resultats.getLastDate().getDate();

for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	writeln(&quot;population &quot;+pop.getNom());
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);

		var matrice=resultats.getMatrix(date,pop, &quot;Abondance&quot;);
		var BadZones=matrice.getSemantics(1);
		var Zones = new Packages.java.util.ArrayList(BadZones);
		var BadClasses=matrice.getSemantics(0);
		var Classes=new Packages.java.util.ArrayList(BadClasses);
  		for(var iz=Zones.iterator(); iz.hasNext();){
			var z=iz.next();
			for(var ic=Classes.iterator(); ic.hasNext();){
				var c = ic.next();
				buffer.write(pop.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+matrice.getValue(c,z)+&quot;\n&quot;);
			}
		}
	}
}
writeln(&quot;fin export abondances&quot;);

return 0;</attribute>
    <attribute name='description'>Export les abondances en nombre
tableau avec des lignes
pop;id;zone;date;nombre.</attribute>
    <attribute name='name'>AbondancesSteph</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
  <dbobject type ='ScriptMethod' __id__='fr.ifremer.db.ScriptMethodFactory#1126798366776#0.9348996038124956'>
    <attribute name='attributs'>idSimul, sim, resultats</attribute>
    <attribute name='corps'>var Parametre=sim.getParametre();
var Populations=Parametre.getPopulations();
var PDate=Packages.fr.ifremer.nodb.Date;
var finsimu=resultats.getLastDate().getDate();


var result=&quot;&quot;;
writeln(&quot;debut export biomasse&quot;);
var dateexport=new Packages.java.util.Date();
var formatteur= new Packages.java.text.SimpleDateFormat();
writeln(&quot;heure de debut: &quot;+formatteur.format(dateexport));


for (var ipop=Populations.iterator();ipop.hasNext();){
	var pop=ipop.next();
	for (var idate=0;idate&lt;=finsimu;idate++){
		var date=new PDate(idate);
		var matrice=resultats.getMatrix(date,pop, &quot;matriceBiomass&quot;);
		var BadZones=matrice.getSemantics(1);
		var Zones = new Packages.java.util.ArrayList(BadZones);
		var BadClasses=matrice.getSemantics(0);
		var Classes=new Packages.java.util.ArrayList(BadClasses);
  		for(var iz=Zones.iterator(); iz.hasNext();){
			var z=iz.next();
			for(var ic=Classes.iterator(); ic.hasNext();){
				var c = ic.next();
				result+=pop.getNom()+&quot;;&quot;+c.getId()+&quot;;&quot;+z.getNom()+&quot;;&quot;+idate+&quot;;&quot;+matrice.getValue(c,z)+&quot;\n&quot;;
			}
		}
	}
}
writeln(&quot;fin export biomasse&quot;);

return &quot;&quot;+result;</attribute>
    <attribute name='description'>Export les biomasses
tableau avec des lignes
pop;id;zone;date;nombre</attribute>
    <attribute name='name'>Biomasses</attribute>
    <attribute name='scriptObject'>fr.ifremer.db.ScriptObjectFactory#1030616085951#0.9381792428704211</attribute>
    <attribute name='simulateur'>false</attribute>
  </dbobject>
</dbobjects>
