Author: echatellier Date: 2012-08-24 14:19:40 +0200 (Fri, 24 Aug 2012) New Revision: 3728 Url: http://forge.codelutin.com/repositories/revision/isis-fish/3728 Log: fixes #1415 : ConverterUtil#getConverter must be cached to return only one instance instead of one for each call 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-16 13:05:04 UTC (rev 3727) +++ trunk/src/main/java/fr/ifremer/isisfish/util/ConverterUtil.java 2012-08-24 12:19:40 UTC (rev 3728) @@ -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, 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 @@ -36,6 +36,8 @@ import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.types.RangeOfValues; import fr.ifremer.isisfish.types.TimeUnit; +import java.util.Map; +import java.util.WeakHashMap; /** * ConverterUtil. @@ -50,28 +52,43 @@ */ public class ConverterUtil { + static protected Map<TopiaContext, ConvertUtilsBean> cache = new WeakHashMap<TopiaContext, ConvertUtilsBean>(); + static protected ConvertUtilsBean nullConverter = getConverterNoCache(null); + public static ConvertUtilsBean getConverter(TopiaContext context) { - BeanUtilsBean result = BeanUtilsBean.getInstance(); - ConvertUtilsBean cub = result.getConvertUtils(); + ConvertUtilsBean result; + if (context == null) { + result = nullConverter; + } else { + result = cache.get(context); + if (result == null) { + result = getConverterNoCache(context); + } + } + return result; + } + protected static ConvertUtilsBean getConverterNoCache(TopiaContext context) { + BeanUtilsBean bub = BeanUtilsBean.getInstance(); + ConvertUtilsBean result = bub.getConvertUtils(); + cache.put(context, result); + // mise en place de converter de string vers des objet ... - cub.register(new TopiaEntityConverter(context), TopiaEntity.class); - cub.register(new TimeStepConverter(), TimeStep.class); - cub.register(new MonthConverter(), Month.class); - cub.register(new TimeUnitConverter(), TimeUnit.class); - cub.register(new RangeOfValuesConverter(), RangeOfValues.class); - + result.register(new TopiaEntityConverter(context), TopiaEntity.class); + result.register(new TimeStepConverter(), TimeStep.class); + result.register(new MonthConverter(), Month.class); + result.register(new TimeUnitConverter(), TimeUnit.class); + result.register(new RangeOfValuesConverter(), RangeOfValues.class); + // Not used since mexico file format use // Still used in sensivity analysis prescript - cub.register(new MatrixConverter(), MatrixND.class); + result.register(new MatrixConverter(), MatrixND.class); // dans les prescripts generé on a MatrixNDImpl.class // c'est tres étrange, mais ca ne fonctionne pas par MatrixND.class - cub.register(new MatrixConverter(), MatrixNDImpl.class); + result.register(new MatrixConverter(), MatrixNDImpl.class); // ... et inversement - cub.register(new StringConverter(), String.class); - - return cub; + result.register(new StringConverter(), String.class); + return result; } - }