Isis-fish-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- 3175 discussions
r3741 - trunk/src/main/java/fr/ifremer/isisfish/util
by echatellier@users.forge.codelutin.com 27 Aug '12
by echatellier@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: echatellier
Date: 2012-08-27 21:35:53 +0200 (Mon, 27 Aug 2012)
New Revision: 3741
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3741
Log:
Retrait du cache des converters (ya un truc qui ne fonctionne pas)
Modified:
trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java 2012-08-27 18:37:56 UTC (rev 3740)
+++ trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java 2012-08-27 19:35:53 UTC (rev 3741)
@@ -52,7 +52,7 @@
*/
public class ConverterUtil {
- static protected Map<TopiaContext, ConvertUtilsBean> cache = new WeakHashMap<TopiaContext, ConvertUtilsBean>();
+ //static protected Map<TopiaContext, ConvertUtilsBean> cache = new WeakHashMap<TopiaContext, ConvertUtilsBean>();
static protected ConvertUtilsBean nullConverter = getConverterNoCache(null);
public static ConvertUtilsBean getConverter(TopiaContext context) {
@@ -60,10 +60,10 @@
if (context == null) {
result = nullConverter;
} else {
- result = cache.get(context);
- if (result == null) {
+ /*result = cache.get(context);
+ if (result == null) {*/
result = getConverterNoCache(context);
- }
+ //}
}
return result;
}
@@ -71,7 +71,7 @@
protected static ConvertUtilsBean getConverterNoCache(TopiaContext context) {
BeanUtilsBean bub = BeanUtilsBean.getInstance();
ConvertUtilsBean result = bub.getConvertUtils();
- cache.put(context, result);
+ //cache.put(context, result);
// mise en place de converter de string vers des objet ...
result.register(new TopiaEntityConverter(context), TopiaEntity.class);
1
0
Author: echatellier
Date: 2012-08-27 20:37:56 +0200 (Mon, 27 Aug 2012)
New Revision: 3740
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3740
Log:
Update to nuiton-matrix 2.3.1
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-27 17:56:21 UTC (rev 3739)
+++ trunk/pom.xml 2012-08-27 18:37:56 UTC (rev 3740)
@@ -62,14 +62,14 @@
<dependency>
<groupId>org.nuiton.matrix</groupId>
<artifactId>nuiton-matrix</artifactId>
- <version>2.3.1-SNAPSHOT</version>
+ <version>2.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.nuiton.matrix</groupId>
<artifactId>nuiton-matrix-gui</artifactId>
- <version>2.3.1-SNAPSHOT</version>
+ <version>2.3.1</version>
<scope>compile</scope>
</dependency>
1
0
r3739 - trunk/src/main/java/fr/ifremer/isisfish/datastore
by echatellier@users.forge.codelutin.com 27 Aug '12
by echatellier@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: echatellier
Date: 2012-08-27 19:56:21 +0200 (Mon, 27 Aug 2012)
New Revision: 3739
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3739
Log:
Auto commit des resultats directement (au lieu d'en fin de pas de temps)
Modified:
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2012-08-27 17:55:39 UTC (rev 3738)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2012-08-27 17:56:21 UTC (rev 3739)
@@ -369,6 +369,14 @@
addAvailableResult(step, name);
putInCache(step, name, newMat, tx);
+ // depuis isis fish 4.1.1, le commit est automatique à chaque
+ // résultat (gain de performance de 20% avec le clearCache)
+ tx.commitTransaction();
+ // vide le cache hibernate. Sans cela, les resultats ne sont
+ // jamais supprimé du cache car la session n'est close
+ // qu'à la fin de la simulation
+ tx.clearCache();
+
// remove from cache result computed by #getMatrix(name)
// beacause, if a new step is added, result become false
// but DO NOT REMOVE result named step + name
1
0
r3738 - trunk/src/main/java/fr/ifremer/isisfish/simulator
by echatellier@users.forge.codelutin.com 27 Aug '12
by echatellier@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: echatellier
Date: 2012-08-27 19:55:39 +0200 (Mon, 27 Aug 2012)
New Revision: 3738
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3738
Log:
Ajout d'une method pour vider le cache ?\195?\160 la fin d'un pas de temps.
Modified:
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2012-08-27 17:51:40 UTC (rev 3737)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2012-08-27 17:55:39 UTC (rev 3738)
@@ -25,8 +25,6 @@
package fr.ifremer.isisfish.simulator;
-import fr.ifremer.isisfish.aspect.CacheAspect;
-import fr.ifremer.isisfish.aspect.TraceAspect;
import java.io.File;
import java.util.HashMap;
import java.util.LinkedHashSet;
@@ -41,6 +39,7 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
+import fr.ifremer.isisfish.types.TimeStep;
import fr.ifremer.isisfish.util.Cache;
import fr.ifremer.isisfish.util.Trace;
@@ -329,6 +328,17 @@
}
/**
+ * Clear isis fish cache for specified time step.
+ *
+ * @param step time step to remove data
+ * @since 4.1.1.0
+ * @throws TopiaException
+ */
+ public void clearCache(TimeStep step) throws TopiaException {
+ getCache().clear(step);
+ }
+
+ /**
* @return Returns the scriptDirectory.
*/
public File getScriptDirectory() {
1
0
Author: echatellier
Date: 2012-08-27 19:51:40 +0200 (Mon, 27 Aug 2012)
New Revision: 3737
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3737
Log:
Use topia 2.6.13
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-27 17:21:00 UTC (rev 3736)
+++ trunk/pom.xml 2012-08-27 17:51:40 UTC (rev 3737)
@@ -525,7 +525,7 @@
<!-- Dependencies version -->
<jaxxVersion>2.4.2</jaxxVersion>
<eugeneVersion>2.4.2</eugeneVersion>
- <topiaVersion>2.6.13-SNAPSHOT</topiaVersion>
+ <topiaVersion>2.6.13</topiaVersion>
<hibernateVersion>3.6.10.Final</hibernateVersion>
<nuitonUtilsVersion>2.4.7</nuitonUtilsVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
1
0
r3736 - in trunk/src/main/java/fr/ifremer/isisfish: aspect simulator simulator/launcher util
by bpoussin@users.forge.codelutin.com 27 Aug '12
by bpoussin@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: bpoussin
Date: 2012-08-27 19:21:00 +0200 (Mon, 27 Aug 2012)
New Revision: 3736
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3736
Log:
reecrire du cache et des traces pour qu'il n'y ait plus rien
de statiques, les informations sont toutes stockees dans
le SimualtionContext.
Il est possible de faire un getCache().clear() ou getCache().clear(TimeStep)
Trace et Cache sont vide lors du remove du SimualtionContext.
Added:
trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java
trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java
trunk/src/main/java/fr/ifremer/isisfish/util/Cache.java
Removed:
trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java
trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java
Modified:
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java
trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java
Deleted: trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java 2012-08-27 15:20:25 UTC (rev 3735)
+++ trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -1,306 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-2.0.html>.
- * #L%
- */
-
-package fr.ifremer.isisfish.aspect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.commons.collections.map.ReferenceMap;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.aspectwerkz.annotation.Around;
-import org.codehaus.aspectwerkz.annotation.Aspect;
-import org.codehaus.aspectwerkz.annotation.Expression;
-import org.codehaus.aspectwerkz.definition.Pointcut;
-import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
-import org.codehaus.aspectwerkz.joinpoint.MethodRtti;
-import org.codehaus.aspectwerkz.joinpoint.MethodSignature;
-import org.nuiton.topia.persistence.TopiaEntity;
-
-import fr.ifremer.isisfish.IsisFishRuntimeException;
-import fr.ifremer.isisfish.simulator.SimulationContext;
-import fr.ifremer.isisfish.types.TimeStep;
-import fr.ifremer.isisfish.util.Nocache;
-
-/**
- * Cache aspect.
- *
- * Created: 25 août 06 22:42:47
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-@Aspect("perJVM")
-public class Cache {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(Cache.class);
-
- static private List<Cache> instances = new ArrayList<Cache>();
-
- protected long totalCall = 0;
- protected long cacheUsed = 0;
-
- protected Map cache = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.SOFT);
-// protected Map cache = new AdaptaptativeCache(1000, 95);
-
- @Expression("execution(* scripts..*(..))")
- Pointcut scriptsMethod;
-
- public Cache() {
- instances.add(this);
- }
-
- /**
- * Return trace object from context.
- *
- * @return trace object from context
- */
- protected fr.ifremer.isisfish.util.Trace getTrace() {
- SimulationContext context = SimulationContext.get();
-
- fr.ifremer.isisfish.util.Trace result = (fr.ifremer.isisfish.util.Trace) context
- .getValue(fr.ifremer.isisfish.util.Trace.class.getName());
-
- if (result == null) {
- throw new IsisFishRuntimeException("No trace object found in context");
- }
-
- return result;
- }
-
-// @Before("scriptsMethod")
-// public void traceBeforeExecute (JoinPoint jp) {
-// System.out.println("before !!!");
-// }
-//
-// @AfterThrowing("scriptsMethod")
-// public void traceAfterThrowingExecute (JoinPoint jp) {
-// System.out.println("throwing !!!");
-// }
-//
-// @After("scriptsMethod")
-// public void traceAfterExecute (JoinPoint jp) {
-// System.out.println("After !!!");
-// }
-
-
- @Around("scriptsMethod")
- public Object call(final JoinPoint jp) throws Throwable {
- totalCall++;
-
- Object result = null;
- Method method = ((MethodSignature)jp.getSignature()).getMethod();
- if (method.getAnnotation(Nocache.class) != null ||
- method.getDeclaringClass().getAnnotation(Nocache.class) != null) {
- result = realCall(jp);
- } else {
- Object key = computeKey(jp);
- result = cache.get(key);
- if (result == null) {
-
- // computation increment (/ by 0)
- // FIXME need to be called, but fail with empty stack
- //Method method = ((MethodSignature)jp.getSignature()).getMethod();
- //getTrace().traceAfterComputation(method);
-
- result = realCall(jp);
- // addListenerFor(key); // pas necessaire car on a la date et pour une date donnée rien ne peut changer
- if (result != null) { // util pour les methodes retournant void, ne fonctionne pas si on met AND !execute(void *(..)) dans l'aspect. En fait fonction seulement si utilisé avec les traces :(
- cache.put(key, result);
- }
- } else {
- cacheUsed++;
- }
- }
-
- if (log.isTraceEnabled()) {
- log.trace(((MethodSignature)jp.getSignature()).getMethod()
- + " args " + Arrays.toString(((MethodRtti)jp.getRtti()).getParameterValues())
- + " result = " + result);
- }
- return result;
- }
-
- /**
- * On fait l'appel reel dans une autre methode pour pouvoir le savoir
- * dans les traces
- *
- * @param jp
- * @return ?
- * @throws Throwable
- */
- protected Object realCall(final JoinPoint jp) throws Throwable {
- Object result = jp.proceed();
- return result;
- }
-
- /**
- * Attention pour avoir une chaine en sortie on prend la reprensentation
- * toString des arguments. Mais en utilisant la methode toString implanté
- * dans Object.
- * <p>
- * Pour les objets de style Number ou String, il faut prendre le vrai
- * toString, pour que 2 soit bien egal a 2.
- *
- * @param jp
- * @return ?
- */
- protected Object computeKey(JoinPoint jp) {
- Method method = ((MethodSignature)jp.getSignature()).getMethod();
- Object[] args = ((MethodRtti)jp.getRtti()).getParameterValues();
-
- //String result = method.toString();
- String result = method.getDeclaringClass().getSimpleName() + "." +
- method.getName();
- for (Object o : args) {
- result += ";";
- if (o instanceof Number || o instanceof String) {
- result += o.toString();
- } else if (o instanceof TimeStep) {
- result += ((TimeStep)o).getStep();
- } else if (o instanceof TopiaEntity) {
- result += ((TopiaEntity)o).getTopiaId().replaceAll("fr.ifremer.isisfish.entities.", "");
- } else {
- result += ObjectUtils.identityToString(o);
- result = result.replaceAll("org.nuiton.math.matrix.", "");
- }
- }
-
- return result;
-
-// Method method = ((MethodSignature)jp.getSignature()).getMethod();
-// Object[] args = ((MethodRtti)jp.getRtti()).getParameterValues();
-//
-// Object[] keys = new Object[args.length + 1];
-// keys[0] = method;
-// System.arraycopy(args, 0, keys, 1, args.length);
-//
-// MultiKey result = new MultiKey(keys, false);
-//
-// return result;
- }
-// protected HashMapMultiKey.Key computeKey(JoinPoint jp) {
-// Method method = ((MethodSignature)jp.getSignature()).getMethod();
-// Object[] args = ((MethodRtti)jp.getRtti()).getParameterValues();
-//
-// HashMapMultiKey.Key result = new HashMapMultiKey.Key();
-// result.add(method);
-// for (Object arg : args) {
-// result.add(arg);
-// }
-//
-// return result;
-// }
-
-
- /**
- * @return Returns the cacheUsed.
- */
- static public long getCacheUsed() {
- long result = 0;
- for (Cache cache : instances) {
- result += cache.cacheUsed;
- }
- return result;
- }
-
- /**
- * @return Returns the totalCall.
- */
- static public long getTotalCall() {
- long result = 0;
- for (Cache cache : instances) {
- result += cache.totalCall;
- }
- return result;
- }
-
- /**
- * Affiche les statistiques
- *
- */
- static public String printStatistiqueAndClear() {
- StringBuffer result = new StringBuffer();
- for (Cache cache : instances) {
- result.append("--- Cache Statistiques ---\n");
- result.append("Total call: " + cache.totalCall + "\n");
- result.append("Cache used: " + cache.cacheUsed + "\n");
- result.append("Cache usage: " + (100*cache.cacheUsed/cache.totalCall) + "%" + "\n");
- result.append("--------------------\n");
- cache.cache.clear();
- }
- System.out.println(result.toString());
- instances.clear();
- return result.toString();
- }
-
-// /**
-// * Parcours les elements de la cle et pour ceux du type Entities se
-// * met listener pour pouvoir supprimer l'entre du cache lors de leur
-// * modification
-// *
-// * @param key
-// */
-// protected void addListenerFor(HashMapMultiKey.Key key) {
-// }
-
-
- class AdaptaptativeCache extends LinkedHashMap<String, Object> {
- protected int maxMemory = 95;
- /**
- *
- * @param capacity initial capacity
- * @param maxMemory maximum memory used (0-100)
- */
- public AdaptaptativeCache(int capacity, int maxMemory) {
- super(capacity, 0.75f, true);
- this.maxMemory = maxMemory;
- }
-
- /* (non-Javadoc)
- * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry)
- */
- @Override
- protected boolean removeEldestEntry(Entry<String, Object> eldest) {
- double free = 100.0 * Runtime.getRuntime().freeMemory() / Runtime.getRuntime().maxMemory() ;
- boolean result = 100 - free > maxMemory;
- return result;
- }
- }
-}
-
-
Copied: trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java (from rev 3734, trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java)
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java (rev 0)
+++ trunk/src/main/java/fr/ifremer/isisfish/aspect/CacheAspect.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -0,0 +1,93 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-2.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.aspect;
+
+import fr.ifremer.isisfish.IsisFishRuntimeException;
+import fr.ifremer.isisfish.simulator.SimulationContext;
+import fr.ifremer.isisfish.util.Cache;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.aspectwerkz.annotation.Around;
+import org.codehaus.aspectwerkz.annotation.Aspect;
+import org.codehaus.aspectwerkz.annotation.Expression;
+import org.codehaus.aspectwerkz.definition.Pointcut;
+import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
+import org.codehaus.aspectwerkz.joinpoint.MethodRtti;
+import org.codehaus.aspectwerkz.joinpoint.MethodSignature;
+
+/**
+ * CacheAspect aspect.
+ *
+ * Created: 25 août 06 22:42:47
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+@Aspect("perJVM")
+public class CacheAspect {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(CacheAspect.class);
+
+ @Expression("execution(* scripts..*(..))")
+ Pointcut scriptsMethod;
+
+ public CacheAspect() {
+ }
+
+ /**
+ * Return trace object from context.
+ *
+ * @return trace object from context
+ */
+ protected Cache getCache() {
+ SimulationContext context = SimulationContext.get();
+ Cache result = context.getCache();
+ return result;
+ }
+
+ @Around("scriptsMethod")
+ public Object call(final JoinPoint jp) throws Throwable {
+ Method method = ((MethodSignature)jp.getSignature()).getMethod();
+ Object[] args = ((MethodRtti)jp.getRtti()).getParameterValues();
+ Object result = getCache().get(method, args, jp);
+
+ if (log.isTraceEnabled()) {
+ log.trace(((MethodSignature)jp.getSignature()).getMethod()
+ + " args " + Arrays.toString(((MethodRtti)jp.getRtti()).getParameterValues())
+ + " result = " + result);
+ }
+ return result;
+ }
+
+}
+
+
Deleted: trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java 2012-08-27 15:20:25 UTC (rev 3735)
+++ trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -1,127 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2006 - 2011 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, Chatellier Eric
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-2.0.html>.
- * #L%
- */
-
-package fr.ifremer.isisfish.aspect;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.aspectwerkz.annotation.After;
-import org.codehaus.aspectwerkz.annotation.AfterThrowing;
-import org.codehaus.aspectwerkz.annotation.Aspect;
-import org.codehaus.aspectwerkz.annotation.Before;
-import org.codehaus.aspectwerkz.annotation.Expression;
-import org.codehaus.aspectwerkz.definition.Pointcut;
-import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
-import org.codehaus.aspectwerkz.joinpoint.MethodSignature;
-
-import fr.ifremer.isisfish.IsisFishRuntimeException;
-import fr.ifremer.isisfish.simulator.SimulationContext;
-
-/**
- * Permet de tracer les appels aux methodes utilisateur ainsi que l'execution
- * a ces methodes. La difference entre les deux est lors de l'utilisation du
- * cache les appels seront superieur a l'execution car certaine valeur seront
- * reutilisé dans le cache
- *
- * Created: 25 août 06 22:19:21
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-@Aspect("perJVM")
-public class Trace {
-
- /** to use log facility, just put in your code: log.info("..."); */
- static private Log log = LogFactory.getLog(Trace.class);
-
- static private List<Trace> instances = new ArrayList<Trace>();
-
- @Expression("execution(* scripts..*(..))"
- + " || execution(* simulators..*(..))"
- + " || execution(* rules..*(..)) "
- + " || execution(* simulationplans..*(..)) "
- + " || execution(* formules..*(..))")
- Pointcut executeMethod;
-
- public Trace() {
- instances.add(this);
- }
-
- /**
- * Return trace object from context.
- *
- * @return trace object from context
- */
- protected fr.ifremer.isisfish.util.Trace getTrace() {
- SimulationContext context = SimulationContext.get();
-
- fr.ifremer.isisfish.util.Trace result = (fr.ifremer.isisfish.util.Trace) context
- .getValue(fr.ifremer.isisfish.util.Trace.class.getName());
-
- if (result == null) {
- throw new IsisFishRuntimeException("No trace object found in context");
- }
-
- return result;
- }
-
- @Before("executeMethod")
- public void traceBeforeExecute(JoinPoint jp) {
- getTrace().traceBefore();
- }
-
- @AfterThrowing(type = "java.lang.Exception", pointcut = "executeMethod")
- public void traceAfterThrowingExecute(JoinPoint jp) {
- // si une exeption est leve, il faut faire la meme chose
- traceAfterExecute(jp);
- }
-
- @After("executeMethod")
- public void traceAfterExecute(JoinPoint jp) {
- Method method = ((MethodSignature) jp.getSignature()).getMethod();
- getTrace().traceAfterCall(method);
- }
-
- /**
- * Affiche les statistiques
- *
- * @return statistics as string
- */
- public static String printStatistiqueAndClear() {
- StringBuffer result = new StringBuffer();
- for (Trace trace : instances) {
- result.append(trace.getTrace().printStatisticAndClear());
- }
- instances.clear();
- return result.toString();
- }
-}
Copied: trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java (from rev 3734, trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java)
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java (rev 0)
+++ trunk/src/main/java/fr/ifremer/isisfish/aspect/TraceAspect.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -0,0 +1,104 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2006 - 2011 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-2.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.aspect;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.aspectwerkz.annotation.After;
+import org.codehaus.aspectwerkz.annotation.AfterThrowing;
+import org.codehaus.aspectwerkz.annotation.Aspect;
+import org.codehaus.aspectwerkz.annotation.Before;
+import org.codehaus.aspectwerkz.annotation.Expression;
+import org.codehaus.aspectwerkz.definition.Pointcut;
+import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
+import org.codehaus.aspectwerkz.joinpoint.MethodSignature;
+
+import fr.ifremer.isisfish.IsisFishRuntimeException;
+import fr.ifremer.isisfish.simulator.SimulationContext;
+import fr.ifremer.isisfish.util.Trace;
+
+/**
+ * Permet de tracer les appels aux methodes utilisateur ainsi que l'execution
+ * a ces methodes. La difference entre les deux est lors de l'utilisation du
+ * cache les appels seront superieur a l'execution car certaine valeur seront
+ * reutilisé dans le cache
+ *
+ * Created: 25 août 06 22:19:21
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+@Aspect("perJVM")
+public class TraceAspect {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory.getLog(TraceAspect.class);
+
+ @Expression("execution(* scripts..*(..))"
+ + " || execution(* simulators..*(..))"
+ + " || execution(* rules..*(..)) "
+ + " || execution(* simulationplans..*(..)) "
+ + " || execution(* formules..*(..))")
+ Pointcut executeMethod;
+
+ public TraceAspect() {
+ }
+
+ /**
+ * Return trace object from context.
+ *
+ * @return trace object from context
+ */
+ protected Trace getTrace() {
+ SimulationContext context = SimulationContext.get();
+ Trace result = context.getTrace();
+ return result;
+ }
+
+ @Before("executeMethod")
+ public void traceBeforeExecute(JoinPoint jp) {
+ getTrace().traceBefore();
+ }
+
+ @AfterThrowing(type = "java.lang.Exception", pointcut = "executeMethod")
+ public void traceAfterThrowingExecute(JoinPoint jp) {
+ // si une exeption est leve, il faut faire la meme chose
+ traceAfterExecute(jp);
+ }
+
+ @After("executeMethod")
+ public void traceAfterExecute(JoinPoint jp) {
+ Method method = ((MethodSignature) jp.getSignature()).getMethod();
+ getTrace().traceAfterCall(method);
+ }
+}
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2012-08-27 15:20:25 UTC (rev 3735)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationContext.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -25,6 +25,8 @@
package fr.ifremer.isisfish.simulator;
+import fr.ifremer.isisfish.aspect.CacheAspect;
+import fr.ifremer.isisfish.aspect.TraceAspect;
import java.io.File;
import java.util.HashMap;
import java.util.LinkedHashSet;
@@ -39,6 +41,8 @@
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
+import fr.ifremer.isisfish.util.Cache;
+import fr.ifremer.isisfish.util.Trace;
/**
* Keep all information on one simulation.
@@ -72,6 +76,10 @@
protected Set<SimulationListener> simulationListeners = new LinkedHashSet<SimulationListener>();
protected ClassLoader classLoader = null;
protected File scriptDirectory;
+ /** l'objet trace qui conserve les donnees statistiques des appels de methodes */
+ protected Trace trace;
+ /** cache used by aspect for this simulation */
+ protected Cache cache;
/** TopiaContext must be used by rule action to modify data */
protected TopiaContext db = null;
@@ -79,7 +87,7 @@
/** TopiaContext must be used to save result */
protected TopiaContext dbResult = null;
- /** Cache des variables d'entités. Topia id > map of attributes. */
+ /** CacheAspect des variables d'entités. Topia id > map of attributes. */
protected Map<TopiaEntity, SimulationVariable> variablesCache = new HashMap<TopiaEntity, SimulationVariable>();
/** Context value used in equation. */
@@ -107,6 +115,10 @@
*/
public static void remove() {
SimulationContext current = get();
+ current.getCache().clear();
+ current.cache = null;
+ current.getTrace().clear();
+ current.trace = null;
current.values.clear();
current.classLoader = null;
simulationContext.remove();
@@ -190,6 +202,19 @@
this.classLoader = classLoader;
}
+ public Trace getTrace() {
+ if (trace == null) {
+ trace = new Trace();
+ }
+ return trace;
+ }
+
+ public Cache getCache() {
+ if (cache == null) {
+ cache = new Cache();
+ }return cache;
+ }
+
/**
* Permet de recuperer une valeur prealablement stocker avec un setValue
* @param name le nom de la valeur souhaitée
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2012-08-27 15:20:25 UTC (rev 3735)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -54,9 +54,9 @@
import fr.ifremer.isisfish.IsisFish;
import fr.ifremer.isisfish.IsisFishRuntimeException;
import fr.ifremer.isisfish.aspect.AspectClassLoader;
-import fr.ifremer.isisfish.aspect.Cache;
+import fr.ifremer.isisfish.aspect.CacheAspect;
import fr.ifremer.isisfish.aspect.RuleAspect;
-import fr.ifremer.isisfish.aspect.Trace;
+import fr.ifremer.isisfish.aspect.TraceAspect;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.datastore.SimulatorStorage;
import fr.ifremer.isisfish.simulator.SimulationContext;
@@ -354,20 +354,14 @@
// Activation de l'OAP demandée
//
if (parameters.getUseStatistic() || parameters.getUseOptimization()) {
-
- // il est necessaire de passer un object trace/cache
- // commun, donc on le met dans le context
- // pas moyen de le passer autrement plus simplement
- fr.ifremer.isisfish.util.Trace traceObject = new fr.ifremer.isisfish.util.Trace("");
- context.setValue(fr.ifremer.isisfish.util.Trace.class.getName(), traceObject);
-
+
if (parameters.getUseStatistic()) {
message(control, _("isisfish.message.setting.trace.aspects"));
- classLoader.deploy(Trace.class);
+ classLoader.deploy(TraceAspect.class);
}
if (parameters.getUseOptimization()) {
message(control, _("isisfish.message.setting.cache.aspects"));
- classLoader.deploy(Cache.class);
+ classLoader.deploy(CacheAspect.class);
}
}
@@ -472,11 +466,11 @@
(end - start) / 1000000, "s'.'S"));
SimulationParameter param = simulation.getParameter();
if (param.getUseStatistic()) {
- String trace = Trace.printStatistiqueAndClear();
+ String trace = context.getTrace().printStatisticAndClear();
simulation.getInformation().setStatistic(trace);
}
if (param.getUseOptimization()) {
- String cache = Cache.printStatistiqueAndClear();
+ String cache = context.getCache().printStatistiqueAndClear();
simulation.getInformation().setOptimizationUsage(cache);
}
@@ -487,7 +481,7 @@
}
FileUtil.deleteRecursively(simulationBuildDirectory);
- // context is used in Trace.printStatistiqueAndClear()
+ // context is used in TraceAspect.printStatistiqueAndClear()
SimulationContext.remove();
}
return result;
Copied: trunk/src/main/java/fr/ifremer/isisfish/util/Cache.java (from rev 3734, trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java)
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/util/Cache.java (rev 0)
+++ trunk/src/main/java/fr/ifremer/isisfish/util/Cache.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -0,0 +1,288 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-2.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.util;
+
+import fr.ifremer.isisfish.IsisFishRuntimeException;
+import fr.ifremer.isisfish.simulator.SimulationContext;
+import fr.ifremer.isisfish.types.TimeStep;
+import java.lang.reflect.Method;
+import java.util.Map;
+import org.apache.commons.collections.map.ReferenceMap;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
+import org.nuiton.topia.persistence.TopiaEntity;
+
+/**
+ * Cache utilise pour mettre les resultats de methode durant la simulation
+ * pour minimiser les appels
+ *
+ * Created: 25 août 06 22:42:47
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class Cache {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(Cache.class);
+
+ // la longueur du package pour minimiser la longueur des topiaId
+ static final private int entityPackageLenght = "fr.ifremer.isisfish.entities.".length();
+ // la valeur NULL a utilise a la place de null pour les timeStep
+ static final private Object NULL = new Object();
+
+// static private List<CacheAspect> instances = new ArrayList<CacheAspect>();
+
+ protected long totalCall = 0;
+ protected long cacheUsed = 0;
+
+ /**
+ * map<TimeStep, Map<Key, Value>>
+ * TimeStep peut etre null via l'objet NULL
+ * Key est la cle calcule par computeKey
+ * Value est la valeur du cache
+ *
+ * TimeStep est en WEAK pour que des que l'on passe au pas de temps suivant
+ * ils soit efface de la memoire si plus personne n'a de reference sur
+ * ce pas de temps. L'autre moyen est de force l'effacement via clear(TimeStep)
+ *
+ * Value est en SOFT reference pour que les valeurs soit effacee du cache
+ * lorsqu'il n'y a plus de place memoire
+ */
+ protected Map cache = new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.HARD);
+// protected Map cache = new AdaptaptativeCache(1000, 95);
+
+ public Cache() {
+ }
+
+ /**
+ * Return trace object from context.
+ *
+ * @return trace object from context
+ */
+ protected Trace getTrace() {
+ SimulationContext context = SimulationContext.get();
+ Trace result = context.getTrace();
+ return result;
+ }
+
+ /**
+ * Recupere pour un pas de temps donnes une valeur calcule pour une cle
+ * @param step le pas de temps pour lequel on souhaite ajouter (ou null)
+ * @param key la cle de storage
+ * @param defaultValue la valeur par defaut a retourner si elle n'est pas en cache
+ * si defaultValue est une JoinPoint alors un proceed est appele dessus et le
+ * resultat de l'appel est utiliser comme valeur par defaut
+ * @return la valeur dans le cache ou defaultValue
+ */
+ public Object get(Method method, Object[] args, Object defaultValue) throws Throwable {
+ totalCall++;
+
+ Object result = null;
+ if (method.getAnnotation(Nocache.class) != null ||
+ method.getDeclaringClass().getAnnotation(Nocache.class) != null) {
+ result = realCall(defaultValue);
+ } else {
+ // compute key and keep TimeStep objet
+ StringBuilder sbKey = new StringBuilder();
+ // le pas de temps trouve dans les arguments
+ TimeStep step = computeKey(sbKey, method, args);
+
+ Object key = sbKey.toString();
+ result = get(step, key);
+ if (result == null) {
+
+ // computation increment (/ by 0)
+ // FIXME need to be called, but fail with empty stack
+ //getTrace().traceAfterComputation(method);
+
+ result = realCall(defaultValue);
+ if (result != null) { // util pour les methodes retournant void, ne fonctionne pas si on met AND !execute(void *(..)) dans l'aspect. En fait fonction seulement si utilisé avec les traces :(
+ put(step, key, result);
+ }
+ } else {
+ cacheUsed++;
+ }
+ }
+ return result;
+ }
+
+ protected TimeStep computeKey(StringBuilder sbKey, Method method, Object[] args) {
+ TimeStep result = null;
+ sbKey.append(method.getDeclaringClass().getSimpleName());
+ sbKey.append(".");
+ sbKey.append(method.getName());
+ for (Object o : args) {
+ sbKey.append(";");
+ if (o == null) {
+ sbKey.append("null");
+ } else if (o instanceof Number || o instanceof String) {
+ sbKey.append(o.toString());
+ } else if (o instanceof TimeStep) {
+ result = (TimeStep)o;
+ sbKey.append(((TimeStep)o).getStep());
+ } else if (o instanceof TopiaEntity) {
+ sbKey.append( ((TopiaEntity)o).getTopiaId().substring(entityPackageLenght));
+ } else {
+ // on minimise en prenant que le nom de la classe (pas le package)
+ sbKey.append(o.getClass().getSimpleName());
+ sbKey.append('@');
+ // et en lui ajoutant son adresse memoire en Hexa
+ sbKey.append(Integer.toHexString(System.identityHashCode(o)));
+ }
+ }
+ return result;
+ }
+
+ protected Map getCacheTimeStep(TimeStep step) {
+ Object key = step;
+ if (step == null) {
+ key = NULL;
+ }
+ Map result = (Map)cache.get(key);
+ if (result == null) {
+ result = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.SOFT);
+ cache.put(key, result);
+ }
+ return result;
+ }
+
+ protected Object get(TimeStep step, Object key) {
+ Object result = null;
+ Map cacheTimeStep = getCacheTimeStep(step);
+ if (cacheTimeStep != null) {
+ result = cacheTimeStep.get(key);
+ }
+ return result;
+ }
+
+ protected void put(TimeStep step, Object key, Object value) {
+ getCacheTimeStep(step).put(key, value);
+ }
+
+ /**
+ * On fait l'appel reel dans une autre methode pour pouvoir le savoir
+ * dans les traces
+ *
+ * @param jp
+ * @return ?
+ * @throws Throwable
+ */
+ protected Object realCall(Object defaultValue) throws Throwable {
+ Object result = defaultValue;
+ if (defaultValue instanceof JoinPoint) {
+ result = ((JoinPoint)defaultValue).proceed();
+ }
+ return result;
+ }
+
+ /**
+ * remove all values in cache
+ */
+ public void clear() {
+ cache.clear();
+ }
+
+ /**
+ * remove all values in cache for the specied TimeStep
+ */
+ public void clear(TimeStep step) {
+ Object key = step;
+ if (key == null) {
+ key = NULL;
+ }
+ cache.remove(key);
+ }
+
+ /**
+ * @return Returns the cacheUsed.
+ */
+ public long getCacheUsed() {
+ long result = cacheUsed;
+ return result;
+ }
+
+ /**
+ * @return Returns the totalCall.
+ */
+ public long getTotalCall() {
+ long result = totalCall;
+ return result;
+ }
+
+ /**
+ * Affiche les statistiques
+ *
+ */
+ public String printStatistiqueAndClear() {
+ StringBuilder result = new StringBuilder();
+ result.append("--- Cache Statistiques ---\n");
+ result.append("Total call: ").append(totalCall).append("\n");
+ result.append("Cache used: ").append(cacheUsed).append("\n");
+ long percent = 0;
+ if (totalCall != 0) {
+ percent = 100*cacheUsed/totalCall;
+ }
+ result.append("Cache usage: ").append(percent).append("%\n");
+ result.append("--------------------\n");
+ cache.clear();
+
+ System.out.println(result.toString());
+ return result.toString();
+ }
+
+ // EN COURS D'ECRITURE MAIS JAMAIS FINI :(
+ // l'idee est de prendre la place memoire qu'il y a, mais s'il n'y en
+ // a plus on commence par enlever les objets les plus vieux
+// class AdaptaptativeCache extends LinkedHashMap<String, Object> {
+// protected int maxMemory = 95;
+// /**
+// *
+// * @param capacity initial capacity
+// * @param maxMemory maximum memory used (0-100)
+// */
+// public AdaptaptativeCache(int capacity, int maxMemory) {
+// super(capacity, 0.75f, true);
+// this.maxMemory = maxMemory;
+// }
+//
+// /* (non-Javadoc)
+// * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry)
+// */
+// @Override
+// protected boolean removeEldestEntry(Entry<String, Object> eldest) {
+// double free = 100.0 * Runtime.getRuntime().freeMemory() / Runtime.getRuntime().maxMemory() ;
+// boolean result = 100 - free > maxMemory;
+// return result;
+// }
+// }
+}
+
+
Modified: trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java 2012-08-27 15:20:25 UTC (rev 3735)
+++ trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java 2012-08-27 17:21:00 UTC (rev 3736)
@@ -71,17 +71,13 @@
/** heure de depart de l'appel a la methode (avec le temps des autres methodes) */
final static private int STACK_TIME_START_NEST_METHOD = 2;
-
- protected String name = "";
-
/** array : [call's numbers, call do, min time, max time, total time, total time with child]*/
protected Map<String, long[]> statistics = new LinkedHashMap<String, long[]>();
/** array : [nest e call, start time, start time with child] */
protected Stack<long[]> callStack = new Stack<long[]>();
- public Trace(String name) {
- this.name = name;
+ public Trace() {
}
public long[] getStatistics(Object e) {
@@ -93,7 +89,14 @@
}
return result;
}
-
+
+ /**
+ * Clear current value statistics (all is reset)
+ */
+ public void clear() {
+ statistics.clear();
+ }
+
public void traceBefore () {
// ajout dans le stack
long current = System.nanoTime();
@@ -167,7 +170,7 @@
long call = 0;
long computation = 0;
StringBuffer result = new StringBuffer();
- result.append("--- " + name + " Statistics ---\n");
+ result.append("--- " + " Statistics ---\n");
for (String e : statistics.keySet()) {
long[] stat = getStatistics(e);
1
0
r3735 - in trunk: . src/main/java/fr/ifremer/isisfish/datastore src/main/java/fr/ifremer/isisfish/datastore/migration src/main/java/fr/ifremer/isisfish/simulator src/main/java/fr/ifremer/isisfish/ui/sensitivity src/main/java/fr/ifremer/isisfish/ui/widget/editor
by echatellier@users.forge.codelutin.com 27 Aug '12
by echatellier@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: echatellier
Date: 2012-08-27 17:20:25 +0200 (Mon, 27 Aug 2012)
New Revision: 3735
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3735
Log:
Update to topia 2.6.13
Modified:
trunk/pom.xml
trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java
trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java
trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/pom.xml 2012-08-27 15:20:25 UTC (rev 3735)
@@ -525,7 +525,7 @@
<!-- Dependencies version -->
<jaxxVersion>2.4.2</jaxxVersion>
<eugeneVersion>2.4.2</eugeneVersion>
- <topiaVersion>2.6.9</topiaVersion>
+ <topiaVersion>2.6.13-SNAPSHOT</topiaVersion>
<hibernateVersion>3.6.10.Final</hibernateVersion>
<nuitonUtilsVersion>2.4.7</nuitonUtilsVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/FormuleStorage.java 2012-08-27 15:20:25 UTC (rev 3735)
@@ -178,7 +178,7 @@
try {
@SuppressWarnings("unchecked")
- List<String> contextCategory = (List<String>) context.find(
+ List<String> contextCategory = (List<String>) context.findAll(
"SELECT DISTINCT category FROM Equation");
all.addAll(contextCategory);
} catch (TopiaException eee) {
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultStorage.java 2012-08-27 15:20:25 UTC (rev 3735)
@@ -168,7 +168,7 @@
mustClose = true;
}
- List<String> result = (List<String>) tx.find("Select " + Result.PROPERTY_RESULT_STEP + "||':'||name from fr.ifremer.isisfish.entities.Result");
+ List<String> result = (List<String>) tx.findAll("Select " + Result.PROPERTY_RESULT_STEP + "||':'||name from fr.ifremer.isisfish.entities.Result");
if (mustClose) {
tx.closeContext();
}
@@ -430,7 +430,7 @@
ResultDAO resultPS = IsisFishDAOHelper.getResultDAO(tx);
result = (List<String>) resultPS.getContext()
- .find("Select distinct name from fr.ifremer.isisfish.entities.Result order by name");
+ .findAll("Select distinct name from fr.ifremer.isisfish.entities.Result order by name");
if (mustClose) {
tx.closeContext();
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/src/main/java/fr/ifremer/isisfish/datastore/migration/MigrationV33V40.java 2012-08-27 15:20:25 UTC (rev 3735)
@@ -120,7 +120,7 @@
}
// build new equation for maturity group and reproduction rate
- List<Population> pops = tx.find("from " + Population.class.getName());
+ List<Population> pops = tx.findAll("from " + Population.class.getName());
for (Population pop : pops) {
String content = getReproductionRateContent(pop, reproductionResults);
((PopulationImpl)pop).setReproductionRateEquationContent(content);
@@ -129,7 +129,7 @@
// start equation migration
if (IsisFish.config.isLaunchUI()) {
- List<Equation> equations = tx.find("from " + Equation.class.getName());
+ List<Equation> equations = tx.findAll("from " + Equation.class.getName());
for (Equation equation : equations) {
// empty is empty and stay empty
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/MetierMonitor.java 2012-08-27 15:20:25 UTC (rev 3735)
@@ -269,7 +269,7 @@
TopiaContext tx = metier.getTopiaContext();
List<StrategyMonthInfo> res = null;
// FIXME, c faux car il ne faut prendre que les str selectionnée pour la simulation
- res = tx.find("select * from fr.ifremer.isisfish.entities.StrategyMonthInfo where strategyMonthInfo.month=?",
+ res = tx.findAll("select * from fr.ifremer.isisfish.entities.StrategyMonthInfo where strategyMonthInfo.month=?",
month, metier);
for(StrategyMonthInfo smi : res){
@@ -298,7 +298,7 @@
TopiaContext tx = metier.getTopiaContext();
List<SetOfVessels> res = null;
// FIXME, c faux car il ne faut prendre que les str selectionnée pour la simulation
- res = tx.find("select setOfVessels from fr.ifremer.isisfish.entities.EffortDescription where possibleMetiers=?",
+ res = tx.findAll("select setOfVessels from fr.ifremer.isisfish.entities.EffortDescription where possibleMetiers=?",
metier);
for(SetOfVessels sov : res){
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationVariable.java 2012-08-27 15:20:25 UTC (rev 3735)
@@ -75,7 +75,7 @@
Variable v = variablesCache.get(name);
if (v == null) {
TopiaContext topiaContext = simulationContext.getDB();
- List<Variable> vindb = topiaContext.find("FROM " + Variable.class.getName() +
+ List<Variable> vindb = topiaContext.findAll("FROM " + Variable.class.getName() +
" WHERE " + Variable.PROPERTY_ENTITY_ID + " = :id" +
" AND " + Variable.PROPERTY_NAME + " = :name",
"id", topiaEntity.getTopiaId(),
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2012-08-27 15:20:25 UTC (rev 3735)
@@ -883,7 +883,7 @@
TopiaContext context = null;
try {
context = regionStorage.getStorage().beginTransaction();
- List list = context.find("from " + value.getClass().getName());
+ List list = context.findAll("from " + value.getClass().getName());
JComboBox c = new JComboBox(list.toArray());
c.setSelectedItem(value);
result = c;
@@ -1041,7 +1041,7 @@
TopiaContext context = null;
try {
context = regionStorage.getStorage().beginTransaction();
- List list = context.find("from " + type.getName());
+ List list = context.findAll("from " + type.getName());
JComboBox c = new JComboBox(list.toArray());
result = c;
} catch (TopiaException ex) {
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java 2012-08-27 15:05:05 UTC (rev 3734)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java 2012-08-27 15:20:25 UTC (rev 3735)
@@ -154,7 +154,7 @@
}
TopiaContext context = regionStorage.getStorage().beginTransaction();
if (context != null) {
- List list = context.find("from " + type.getName());
+ List list = context.findAll("from " + type.getName());
c = new JComboBox(list.toArray());
c.setSelectedItem(value);
editor = c;
1
0
r3734 - trunk/src/main/java/fr/ifremer/isisfish/aspect
by echatellier@users.forge.codelutin.com 27 Aug '12
by echatellier@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: echatellier
Date: 2012-08-27 17:05:05 +0200 (Mon, 27 Aug 2012)
New Revision: 3734
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3734
Log:
Improve cache key length
Modified:
trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java
Modified: trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java 2012-08-27 15:04:12 UTC (rev 3733)
+++ trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java 2012-08-27 15:05:05 UTC (rev 3734)
@@ -25,6 +25,7 @@
package fr.ifremer.isisfish.aspect;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
@@ -44,9 +45,11 @@
import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
import org.codehaus.aspectwerkz.joinpoint.MethodRtti;
import org.codehaus.aspectwerkz.joinpoint.MethodSignature;
+import org.nuiton.topia.persistence.TopiaEntity;
import fr.ifremer.isisfish.IsisFishRuntimeException;
import fr.ifremer.isisfish.simulator.SimulationContext;
+import fr.ifremer.isisfish.types.TimeStep;
import fr.ifremer.isisfish.util.Nocache;
/**
@@ -180,13 +183,20 @@
Method method = ((MethodSignature)jp.getSignature()).getMethod();
Object[] args = ((MethodRtti)jp.getRtti()).getParameterValues();
- String result = method.toString();
+ //String result = method.toString();
+ String result = method.getDeclaringClass().getSimpleName() + "." +
+ method.getName();
for (Object o : args) {
result += ";";
if (o instanceof Number || o instanceof String) {
result += o.toString();
+ } else if (o instanceof TimeStep) {
+ result += ((TimeStep)o).getStep();
+ } else if (o instanceof TopiaEntity) {
+ result += ((TopiaEntity)o).getTopiaId().replaceAll("fr.ifremer.isisfish.entities.", "");
} else {
result += ObjectUtils.identityToString(o);
+ result = result.replaceAll("org.nuiton.math.matrix.", "");
}
}
1
0
r3733 - in trunk/src/main: java/fr/ifremer/isisfish/simulator java/fr/ifremer/isisfish/simulator/launcher java/fr/ifremer/isisfish/ui/sensitivity java/fr/ifremer/isisfish/ui/simulator resources/i18n
by echatellier@users.forge.codelutin.com 27 Aug '12
by echatellier@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: echatellier
Date: 2012-08-27 17:04:12 +0200 (Mon, 27 Aug 2012)
New Revision: 3733
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3733
Log:
fixes #1420: Add option to delete sensitivity analysis result
Modified:
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx
trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx
trunk/src/main/resources/i18n/isis-fish_en_GB.properties
trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2012-08-27 15:04:12 UTC (rev 3733)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 - 2011 Ifremer, Code Lutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Code Lutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -96,30 +96,30 @@
*
* @return Description property.
*/
- public abstract String getDescription();
+ public String getDescription();
/**
* Set simulation description.
*
* @param description the description to set.
*/
- public abstract void setDescription(String description);
+ public void setDescription(String description);
/**
* Load region corresponding to {@link #getRegionName()}.
*
* @return the region
*/
- public abstract RegionStorage getRegion();
+ public RegionStorage getRegion();
- public abstract MatrixND getNumberOf(Population pop);
+ public MatrixND getNumberOf(Population pop);
/**
* Get extra rules list.
*
* @return Returns the extraRules.
*/
- public abstract List<String> getExtraRules();
+ public List<String> getExtraRules();
/**
* Add extra rules.
@@ -129,19 +129,19 @@
*
* @param extraRules extra rules to add
*/
- public abstract void addExtraRules(String... extraRules);
+ public void addExtraRules(String... extraRules);
/**
* Get instantiated population list.
*
* @return Returns the populations.
*/
- public abstract List<Population> getPopulations();
+ public List<Population> getPopulations();
/**
* @param populations The populations to set.
*/
- public abstract void setPopulations(List<Population> populations);
+ public void setPopulations(List<Population> populations);
/**
* Get instantiated strategies list.
@@ -150,21 +150,21 @@
*
* @return Returns the strategies.
*/
- public abstract List<Strategy> getStrategies();
+ public List<Strategy> getStrategies();
/**
* Set strategies list.
*
* @param strategies strategies list to set
*/
- public abstract void setStrategies(List<Strategy> strategies);
+ public void setStrategies(List<Strategy> strategies);
/**
* Add new simulation plan.
*
* @param plan simulation plan to add
*/
- public abstract void addSimulationPlan(SimulationPlan plan);
+ public void addSimulationPlan(SimulationPlan plan);
/**
* Remove a plan.
@@ -172,7 +172,7 @@
* @param plan
* @return {@code true} if this list contained the specified element
*/
- public abstract boolean removeSimulationPlan(SimulationPlan plan);
+ public boolean removeSimulationPlan(SimulationPlan plan);
/**
* Get instantiated simulation plan list.
@@ -181,32 +181,32 @@
*
* @return the plans.
*/
- public abstract List<SimulationPlan> getSimulationPlans();
+ public List<SimulationPlan> getSimulationPlans();
/**
* Set plans list.
*
* @param plans plans to set
*/
- public abstract void setSimulationPlans(List<SimulationPlan> plans);
+ public void setSimulationPlans(List<SimulationPlan> plans);
/**
* Return {@code true} if simulation is composed of independent plan only.
*
* @return {@code true} if all {@link SimulationPlan} are {@link SimulationPlanIndependent}
*/
- public abstract boolean isIndependentPlan();
+ public boolean isIndependentPlan();
/**
* Clear plan list.
*/
- public abstract void clearPlans();
+ public void clearPlans();
/**
* Add new rule to rules list.
* @param rule rule to add
*/
- public abstract void addRule(Rule rule);
+ public void addRule(Rule rule);
/**
* Remove a rule.
@@ -214,26 +214,26 @@
* @param rule rule to remove
* @return {@code true} if this list contained the specified element
*/
- public abstract boolean removeRule(Rule rule);
+ public boolean removeRule(Rule rule);
/**
* Get parameters rules list.
*
* @return the rules
*/
- public abstract List<Rule> getRules();
+ public List<Rule> getRules();
/**
* Set simulation rules.
*
* @param rules rules to set
*/
- public abstract void setRules(List<Rule> rules);
+ public void setRules(List<Rule> rules);
/**
* Clear rule list.
*/
- public abstract void clearRules();
+ public void clearRules();
/**
* Return if optimization sould be used.
@@ -242,14 +242,14 @@
*
* @return use optimization
*/
- public abstract boolean getUseOptimization();
+ public boolean getUseOptimization();
/**
* Change use optimization parameter.
*
* @param useOptimization use optimization to set
*/
- public abstract void setUseOptimization(boolean useOptimization);
+ public void setUseOptimization(boolean useOptimization);
/**
* Return if statistic sould be used.
@@ -258,28 +258,28 @@
*
* @return use statistic
*/
- public abstract boolean getUseStatistic();
+ public boolean getUseStatistic();
/**
* Change use statistic property.
*
* @param useStatistic use statistic to set
*/
- public abstract void setUseStatistic(boolean useStatistic);
+ public void setUseStatistic(boolean useStatistic);
/**
* Get export names list.
*
* @return export names list
*/
- public abstract List<String> getExportNames();
+ public List<String> getExportNames();
/**
* Set export names list.
*
* @param exportNames export names list to set
*/
- public abstract void setExportNames(List<String> exportNames);
+ public void setExportNames(List<String> exportNames);
/**
* Get number of sensitivity simulation.
@@ -288,44 +288,59 @@
*
* @return the numberOfSensitivitySimulation
*/
- public abstract int getNumberOfSensitivitySimulation();
+ public int getNumberOfSensitivitySimulation();
/**
* Set number of sensitivity simulation.
*
* @param numberOfSensitivitySimulation number of sensitivity simulation to set
*/
- public abstract void setNumberOfSensitivitySimulation(
+ public void setNumberOfSensitivitySimulation(
int numberOfSensitivitySimulation);
/**
- * Get instantiated sensitivity calculator.
+ * Get instantiated sensitivity analysis.
*
* Default to : null.
*
* @return the sensitivityAnalysis
*/
- public abstract SensitivityAnalysis getSensitivityAnalysis();
+ public SensitivityAnalysis getSensitivityAnalysis();
/**
* @param sensitivityAnalysis the sensitivityAnalysis to set
*/
- public abstract void setSensitivityAnalysis(
- SensitivityAnalysis sensitivityAnalysis);
+ public void setSensitivityAnalysis(SensitivityAnalysis sensitivityAnalysis);
+
+ /**
+ * Get only keep first result policy.
+ *
+ * @return only keep first result policy
+ * @since 4.1.1.0
+ */
+ public boolean isSensitivityAnalysisOnlyKeepFirst();
/**
+ * Change only keep first result policy.
+ *
+ * @param onlyKeepFirst only keep first result policy
+ * @since 4.1.1.0
+ */
+ public void setSensitivityAnalysisOnlyKeepFirst(boolean onlyKeepFirst);
+
+ /**
* Return loaded sensitivity export.
*
* If exports are null or empty, try to load it from last ready parameters.
*
* @return the sensitivityExportNames
*/
- public abstract List<SensitivityExport> getSensitivityExport();
+ public List<SensitivityExport> getSensitivityExport();
/**
* @param sensitivityExport the sensitivityExportNames to set
*/
- public abstract void setSensitivityExport(
+ public void setSensitivityExport(
List<SensitivityExport> sensitivityExport);
/**
@@ -333,42 +348,42 @@
*
* @return use simulation plan.
*/
- public abstract boolean getUseSimulationPlan();
+ public boolean getUseSimulationPlan();
/**
* Set use simulation plans property.
*
* @param useSimulationPlan use simulation plan to set
*/
- public abstract void setUseSimulationPlan(boolean useSimulationPlan);
+ public void setUseSimulationPlan(boolean useSimulationPlan);
/**
* Get simulation number in simulation plan.
*
* @return simulation number in simulation plan
*/
- public abstract int getSimulationPlanNumber();
+ public int getSimulationPlanNumber();
/**
* Set simulation number in simulation plan.
*
* @param simulationPlanNumber simulation plan number to set
*/
- public abstract void setSimulationPlanNumber(int simulationPlanNumber);
+ public void setSimulationPlanNumber(int simulationPlanNumber);
/**
* Get number of year to run to simulate.
*
* @return number of year
*/
- public abstract int getNumberOfYear();
+ public int getNumberOfYear();
/**
* Set number of year to run to simulate.
*
* @param numberOfYear number of year to set
*/
- public abstract void setNumberOfYear(int numberOfYear);
+ public void setNumberOfYear(int numberOfYear);
/**
* Get use prescript.
@@ -377,70 +392,70 @@
*
* @return Returns the usePreScript.
*/
- public abstract boolean getUsePreScript();
+ public boolean getUsePreScript();
/**
* Set use prescript property
*
* @param usePreScript use preScript to set
*/
- public abstract void setUsePreScript(boolean usePreScript);
+ public void setUsePreScript(boolean usePreScript);
/**
* Get prescript content.
*
* @return preScript content
*/
- public abstract String getPreScript();
+ public String getPreScript();
/**
* Set pre script content.
*
* @param preScript prescript content
*/
- public abstract void setPreScript(String preScript);
+ public void setPreScript(String preScript);
/**
* Get region name.
*
* @return region name
*/
- public abstract String getRegionName();
+ public String getRegionName();
/**
* Set region name.
*
* @param regionName region name to set
*/
- public abstract void setRegionName(String regionName);
+ public void setRegionName(String regionName);
/**
* Set simulator name.
*
* @return simulator name.
*/
- public abstract String getSimulatorName();
+ public String getSimulatorName();
/**
* Set simulator name.
*
* @param simulatorName simulator name to set
*/
- public abstract void setSimulatorName(String simulatorName);
+ public void setSimulatorName(String simulatorName);
/**
* Get enabled result names list.
*
* @return enabled result names list
*/
- public abstract Collection<String> getResultEnabled();
+ public Collection<String> getResultEnabled();
/**
* Set enabled result names list.
*
* @param resultEnabled enabled result names list
*/
- public abstract void setResultEnabled(Collection<String> resultEnabled);
+ public void setResultEnabled(Collection<String> resultEnabled);
/**
* Get tag values.
@@ -449,14 +464,14 @@
*
* @return Returns the tagValue.
*/
- public abstract Map<String, String> getTagValue();
+ public Map<String, String> getTagValue();
/**
* Set tag values.
*
* @param tagValue tagValues to set.
*/
- public abstract void setTagValue(Map<String, String> tagValue);
+ public void setTagValue(Map<String, String> tagValue);
/**
* Get simulator log level.
@@ -465,14 +480,14 @@
*
* @return simualtor log level
*/
- public abstract String getSimulLogLevel();
+ public String getSimulLogLevel();
/**
* Set simulator log level.
*
* @param logLevel simulator log level
*/
- public abstract void setSimulLogLevel(String logLevel);
+ public void setSimulLogLevel(String logLevel);
/**
* Get script log level.
@@ -481,14 +496,14 @@
*
* @return script log level
*/
- public abstract String getScriptLogLevel();
+ public String getScriptLogLevel();
/**
* Set script log level.
*
* @param logLevel script log level
*/
- public abstract void setScriptLogLevel(String logLevel);
+ public void setScriptLogLevel(String logLevel);
/**
* Get librairies log level.
@@ -497,38 +512,38 @@
*
* @return librairies log level
*/
- public abstract String getLibLogLevel();
+ public String getLibLogLevel();
/**
* Set lib log level.
*
* @param logLevel
*/
- public abstract void setLibLogLevel(String logLevel);
+ public void setLibLogLevel(String logLevel);
- public abstract boolean isSimulErrorLevel();
+ public boolean isSimulErrorLevel();
- public abstract boolean isSimulWarnLevel();
+ public boolean isSimulWarnLevel();
- public abstract boolean isSimulInfoLevel();
+ public boolean isSimulInfoLevel();
- public abstract boolean isSimulDebugLevel();
+ public boolean isSimulDebugLevel();
- public abstract boolean isScriptErrorLevel();
+ public boolean isScriptErrorLevel();
- public abstract boolean isScriptWarnLevel();
+ public boolean isScriptWarnLevel();
- public abstract boolean isScriptInfoLevel();
+ public boolean isScriptInfoLevel();
- public abstract boolean isScriptDebugLevel();
+ public boolean isScriptDebugLevel();
- public abstract boolean isLibErrorLevel();
+ public boolean isLibErrorLevel();
- public abstract boolean isLibWarnLevel();
+ public boolean isLibWarnLevel();
- public abstract boolean isLibInfoLevel();
+ public boolean isLibInfoLevel();
- public abstract boolean isLibDebugLevel();
+ public boolean isLibDebugLevel();
/**
* Permet d'ajouter des parametres directement à partir de leur
@@ -551,7 +566,7 @@
*
* @return a copy of this instance
*/
- public abstract SimulationParameter copy();
+ public SimulationParameter copy();
/**
* Make a deep copy of current parameters.
@@ -561,14 +576,14 @@
*
* @return new parameters instance
*/
- public abstract SimulationParameter deepCopy();
+ public SimulationParameter deepCopy();
/**
* The toString() method call getters.
*
* So make instances of rules/export/plans...
*/
- public abstract String toString();
+ public String toString();
/**
* Permet de convertir l'objet SimulationParameter en un objet Properties
@@ -586,14 +601,14 @@
* @return L'objet Properties representant les parametres
* @see #fromProperties(Properties)
*/
- public abstract Properties toProperties();
+ public Properties toProperties();
/**
* Load properties from file.
*
* @param props property to read
*/
- public abstract void fromProperties(Properties props);
+ public void fromProperties(Properties props);
/**
* Reload parameters du to context change.
@@ -604,6 +619,6 @@
*
* @throws TopiaException
*/
- public abstract void reloadContextParameters() throws TopiaException;
+ public void reloadContextParameters() throws TopiaException;
}
\ No newline at end of file
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2012-08-27 15:04:12 UTC (rev 3733)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 Ifremer, Code Lutin, Benjamin Poussin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Code Lutin, Benjamin Poussin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -533,9 +533,21 @@
SimulationParameter param = getParam();
param.setSimulationPlanNumber(simulationPlanNumber);
store(param);
-
}
+ @Override
+ public boolean isSensitivityAnalysisOnlyKeepFirst() {
+ SimulationParameter param = getParam();
+ return param.isSensitivityAnalysisOnlyKeepFirst();
+ }
+
+ @Override
+ public void setSensitivityAnalysisOnlyKeepFirst(boolean onlyKeepFirst) {
+ SimulationParameter param = getParam();
+ param.setSensitivityAnalysisOnlyKeepFirst(onlyKeepFirst);
+ store(param);
+ }
+
/*
* @see fr.ifremer.isisfish.simulator.SimulationParameter#getNumberOfYear()
*/
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2012-08-27 15:04:12 UTC (rev 3733)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
+ * Copyright (C) 2006 - 2012 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
@@ -141,7 +141,7 @@
/** Utilisation du plan de simulation. */
protected Boolean useSimulationPlan;
- /**
+ /**
* Le numero de sequence de la liste des plans de simulation. Le premier
* élement du plan doit etre 0. Si la simulation ne fait pas partie d'un
* plan la valeur est -1. */
@@ -160,6 +160,14 @@
*/
protected Integer numberOfSensitivitySimulation;
+ /**
+ * Dans une analyze de sensibilite, conserver les résultats de toutes
+ * les simulations est inutile, seule les résultats de la premières
+ * sont nécéssaires. Les resultats peuvent être supprimés après les
+ * export de données.
+ */
+ protected Boolean sensitivityAnalysisOnlyKeepFirst;
+
/** Script utilisé pour les analyses de sensibilités. */
protected SensitivityAnalysis sensitivityAnalysis;
@@ -866,7 +874,7 @@
useSimulationPlan = Boolean.FALSE;
}
}
- return this.useSimulationPlan;
+ return useSimulationPlan;
}
/*
@@ -892,7 +900,7 @@
}
}
- return this.simulationPlanNumber.intValue();
+ return simulationPlanNumber.intValue();
}
/*
@@ -903,6 +911,25 @@
this.simulationPlanNumber = simulationPlanNumber;
}
+ @Override
+ public boolean isSensitivityAnalysisOnlyKeepFirst() {
+ if (sensitivityAnalysisOnlyKeepFirst == null) {
+
+ if (propertiesParameters != null) {
+ sensitivityAnalysisOnlyKeepFirst = Boolean.valueOf(propertiesParameters.getProperty("sensitivityAnalysisOnlyKeepFirst", "-1"));
+ } else {
+ sensitivityAnalysisOnlyKeepFirst = Boolean.FALSE;
+ }
+ }
+
+ return sensitivityAnalysisOnlyKeepFirst.booleanValue();
+ }
+
+ @Override
+ public void setSensitivityAnalysisOnlyKeepFirst(boolean onlyKeepFirst) {
+ sensitivityAnalysisOnlyKeepFirst = onlyKeepFirst;
+ }
+
/*
* @see fr.ifremer.isisfish.simulator.SimulationParameter#getNumberOfYear()
*/
@@ -1620,6 +1647,9 @@
}
}
+ // sensitivity params
+ result.setProperty("sensitivityAnalysisOnlyKeepFirst", String.valueOf(isSensitivityAnalysisOnlyKeepFirst()));
+
result.setProperty("usePreScript", String.valueOf(getUsePreScript()));
result.setProperty("preScript", getPreScript());
result.setProperty("useSimulationPlan", String.valueOf(getUseSimulationPlan()));
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2012-08-27 15:04:12 UTC (rev 3733)
@@ -48,6 +48,7 @@
import org.nuiton.util.FileUtil;
import org.nuiton.util.ObjectUtil;
import org.nuiton.util.StringUtil;
+import org.nuiton.util.ZipUtil;
import fr.ifremer.isisfish.IsisConfig;
import fr.ifremer.isisfish.IsisFish;
@@ -425,6 +426,12 @@
// quand date =progressMax
control.setProgress(control.getProgress() + 1);
+ // suppression des résultats si l'utilisateur a demande à ne conserver
+ // que les resultats de seulement la première simulation d'une AS
+ if (parameters.isSensitivityAnalysisOnlyKeepFirst() && !control.getId().endsWith("_0")) {
+ context.getDbResult().clear(true);
+ }
+
} catch (OutOfMemoryError eee) {
log.error(_("isisfish.error.during.simulation"), eee);
simulation.getInformation().setException(eee);
@@ -479,7 +486,7 @@
log.debug("Delete simulation build directory : " + simulationBuildDirectory.getAbsolutePath());
}
FileUtil.deleteRecursively(simulationBuildDirectory);
-
+
// context is used in Trace.printStatistiqueAndClear()
SimulationContext.remove();
}
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2012-08-27 15:04:12 UTC (rev 3733)
@@ -414,14 +414,7 @@
if (resultArchiveFile != null) {
- // FIXME big hacks here, only extract non first simulation
- // only for AS
- if (control.getId().startsWith("as_") && !control.getId().endsWith("_0")) {
- ZipUtil.uncompressFiltred(resultArchiveFile, SimulationStorage.getSimulationDirectory(), ".*/data/.*");
- }
- else {
- ZipUtil.uncompressFiltred(resultArchiveFile, SimulationStorage.getSimulationDirectory());
- }
+ ZipUtil.uncompressFiltred(resultArchiveFile, SimulationStorage.getSimulationDirectory());
if (log.isDebugEnabled()) {
log.debug("Simulation imported : " + resultArchiveFile.getAbsolutePath());
Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2012-08-27 15:04:12 UTC (rev 3733)
@@ -223,7 +223,9 @@
}
/**
- * @return les SimulatorLauncher et leurs noms
+ * Retour les lanceurs ayant un executor.
+ *
+ * @return les SimulatorLauncher
*/
public List<SimulatorLauncher> getSimulationLaunchers() {
List<SimulatorLauncher> result = new ArrayList<SimulatorLauncher>(
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2012-08-27 15:04:12 UTC (rev 3733)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ Copyright (C) 2009 - 2012 Ifremer, CodeLutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2012-08-27 15:04:12 UTC (rev 3733)
@@ -135,19 +135,19 @@
});
}
}
-protected void setPreScript() {
+protected void initSimulationParams() {
if (!isSensitivity()){
+ // prescript
String preScript = simulAction.getSimulationParameter().getPreScript();
fieldUseSimulPreScripts.setSelected(preScript != null && !preScript.isEmpty());
getParentContainer(SimulUI.class).getPreScriptUI().getFieldSimulPreScript().setText(preScript);
- }
-}
-protected void setSimulationPlan() {
- if (!isSensitivity()){
+
+ // simulation plan
fieldSimulUseSimulationPlan.setSelected(simulAction.getSimulationParameter().getUseSimulationPlan());
getParentContainer(SimulUI.class).getSensUI().refresh();
}
}
+
protected void setSensitivityTabRegion() {
if (isSensitivity()) {
try {
@@ -167,24 +167,19 @@
}
}
}
-protected void setFactor() {
+protected void initSensitivityParams() {
if (isSensitivity()) {
+ getParentContainer(SensitivityUI.class).getSensitivityChooserUI().refreshSelectedSensitivityAnalysis();
getParentContainer(SensitivityUI.class).getSensitivityTabUI().setFactorModel();
- }
-}
-protected void setExportSens() {
- if (isSensitivity()) {
getParentContainer(SensitivityUI.class).getSensitivityChooserUI().setSensitivityExportListModel();
+ sensitivityOnlyKeepFirstResultCheckBox.setSelected(simulAction.getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst());
}
}
-protected void setSensitivityAnalysis() {
- if (isSensitivity()){
- getParentContainer(SensitivityUI.class).getSensitivityChooserUI().refreshSelectedSensitivityAnalysis();
- }
-}
+
public void setSimulationParameter(SimulAction simulAction){
simulAction.setSimulationParameter(simulAction.getSimulationParameter());
}
+
protected void loadOldSimulation() {
final String selected = fieldSimulParamsSelect.getSelectedItem().toString();
// le premier item est " " pour ne pas avoir de selection par defaut
@@ -198,11 +193,8 @@
fieldSimulParamsRegion.setSelectedItem(getContextValue(SimulAction.class).getSimulationParameter().getRegionName());
// mise a jour des années
fieldSimulParamsNbAnnees.setText(String.valueOf(simulAction.getNumberOfYear()));
- setPreScript();
- setSimulationPlan();
- setExportSens();
- setSensitivityAnalysis();
- setFactor();
+ initSimulationParams();
+ initSensitivityParams();
// regles
ruleChooser.setRulesList(simulAction.getSimulationParameter().getRules());
@@ -502,14 +494,14 @@
<cell fill="horizontal" weightx="1.0">
<Table>
<row>
- <cell fill="horizontal" weightx="0.3">
+ <cell fill="horizontal" weightx="1">
<JCheckBox text="isisfish.params.usePreSimulationScript"
id="fieldUseSimulPreScripts"
selected='{simulAction.getSimulationParameter().getUsePreScript()}'
visible='{!isSensitivity()}'
onItemStateChanged='enablePreScript()' />
</cell>
- <cell fill="horizontal" weightx="0.3">
+ <cell fill="horizontal" weightx="1">
<JCheckBox text="isisfish.params.useSimulationPlan"
id="fieldSimulUseSimulationPlan"
selected='{simulAction.getSimulationParameter().getUseSimulationPlan()}'
@@ -517,6 +509,14 @@
onItemStateChanged='enableSimulationPlan()'
enabled="{getRegionStorage() != null}" />
</cell>
+ <cell fill="horizontal" weightx="1">
+ <JCheckBox text="isisfish.params.sensitivityOnlyKeepFirstResult"
+ id="sensitivityOnlyKeepFirstResultCheckBox"
+ selected='{simulAction.getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()}'
+ visible='{isSensitivity()}'
+ onItemStateChanged='simulAction.getSimulationParameter().setSensitivityAnalysisOnlyKeepFirst(sensitivityOnlyKeepFirstResultCheckBox.isSelected())'
+ enabled="{getRegionStorage() != null}" />
+ </cell>
</row>
</Table>
</cell>
Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2012-08-27 15:04:12 UTC (rev 3733)
@@ -628,6 +628,7 @@
isisfish.params.rules.availables=Available rules
isisfish.params.rules.selected=Selected rules
isisfish.params.sensitivityName=Sensitivity name
+isisfish.params.sensitivityOnlyKeepFirstResult=Only keep results for first simulation
isisfish.params.simulationLauncher=Simulation launcher
isisfish.params.simulationName=Simulation name
isisfish.params.stategiesAndPopulations=Strategies and populations
Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-08-27 12:11:46 UTC (rev 3732)
+++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-08-27 15:04:12 UTC (rev 3733)
@@ -628,6 +628,7 @@
isisfish.params.rules.availables=Règles disponibles
isisfish.params.rules.selected=Règles sélectionnées
isisfish.params.sensitivityName=Nom de l'analyse de sensibilité
+isisfish.params.sensitivityOnlyKeepFirstResult=Ne conserver les résultats que pour la première simulation.
isisfish.params.simulationLauncher=Lanceur de simulation
isisfish.params.simulationName=Nom de la simulation
isisfish.params.stategiesAndPopulations=Stratégies et populations
1
0
r3732 - in trunk: . src/main/java/fr/ifremer/isisfish
by echatellier@users.forge.codelutin.com 27 Aug '12
by echatellier@users.forge.codelutin.com 27 Aug '12
27 Aug '12
Author: echatellier
Date: 2012-08-27 14:11:46 +0200 (Mon, 27 Aug 2012)
New Revision: 3732
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3732
Log:
Update next isis version.
Modified:
trunk/pom.xml
trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-08-25 06:38:45 UTC (rev 3731)
+++ trunk/pom.xml 2012-08-27 12:11:46 UTC (rev 3732)
@@ -11,7 +11,7 @@
<groupId>fr.ifremer</groupId>
<artifactId>isis-fish</artifactId>
- <version>4.1.0.4-SNAPSHOT</version>
+ <version>4.1.1.0-SNAPSHOT</version>
<!-- POM Relationships : Inheritance : Dependencies -->
<dependencies>
Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java
===================================================================
--- trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2012-08-25 06:38:45 UTC (rev 3731)
+++ trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2012-08-27 12:11:46 UTC (rev 3732)
@@ -119,7 +119,7 @@
* migration de donnees demande automatiquement un changement de version
* d'application.
*/
- protected final static Version version = new Version(4, 1, 0, 3);
+ protected final static Version version = new Version(4, 1, 1, 0);
protected final static Version majorVersion = new Version(version.getNumber(0));
protected final static Version databaseVersion = new Version(
1
0