Author: jcouteau Date: 2010-01-08 11:29:18 +0000 (Fri, 08 Jan 2010) New Revision: 2891 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java Log: Add method to handle nominal values Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java 2010-01-08 10:45:28 UTC (rev 2890) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityCalculator.java 2010-01-08 11:29:18 UTC (rev 2891) @@ -23,6 +23,9 @@ import java.util.Iterator; import java.util.List; +import fr.ifremer.isisfish.util.ConverterUtil; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.beanutils.ConvertUtilsBean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.j2r.REngine; @@ -33,10 +36,14 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.persistence.TopiaEntity; public abstract class AbstractSensitivityCalculator implements SensitivityCalculator { + TopiaContext context; + /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory .getLog(AbstractSensitivityCalculator.class); @@ -61,10 +68,18 @@ String binfValues = ""; String bsup = "Bsup<-c(%s)"; String bsupValues = ""; - String attributes = "attributes(isis.factors)<-list(%s\"nomModel\"=\"isis-fish-externeR\",names=c(\"nomFacteur\",\"Nominal\",\"Continu\",\"Binf\",\"Bsup\"))"; + String attributes = "attributes(isis.factors)<-list(" + + "%s" + + "\"nomModel\"=\"isis-fish-externeR\"," + + "names=c(\"nomFacteur\",\"Nominal\",\"Continu\",\"Binf\",\"Bsup\"))"; String attribute = "attr(isis.factors,\"%s\")<-\"%s\""; String attributesValues = ""; - String isisfactors = "isis.factors<-data.frame(\"nomFacteur\"=nomFacteur,\"Nominal\"=Nominal,\"Continu\"=Continu,\"Binf\"=Binf,\"Bsup\"=Bsup)"; + String isisfactors = "isis.factors<-data.frame(" + + "\"nomFacteur\"=nomFacteur," + + "\"Nominal\"=Nominal," + + "\"Continu\"=Continu," + + "\"Binf\"=Binf," + + "\"Bsup\"=Bsup)"; //Create the vectors List<Factor<?, ?>> factors = plan.getFactors(); @@ -81,19 +96,10 @@ //Factor names factorNames += "\"" + factor.getName() + "\""; - //Nominal values - /*ConvertUtilsBean beanUtils = ConverterUtil.getConverter(null); - String path = factor.getPath(); - String topiaId = path.substring(0,path.lastIndexOf("#")); - String propertyName=path.substring(path.lastIndexOf("#") + 1); - //Object value = beanUtils.convert("${serializedValue}", ${value.class.name}.class); - TopiaEntity entity = db.findByTopiaId(topiaId); - Object value = BeanUtils.getProperty(entity, propertyName);*/ - if (factor.getDomain() instanceof MatrixContinuousDomain) { //Continu values, binf values, bsup values and discrete factors attributes - nominalValues += 1.0; + nominalValues += getNominalValue(factor); //Continu values continuValues += "TRUE"; @@ -126,7 +132,7 @@ } else if (factor.getDomain() instanceof ContinuousDomain) { //Continu values, binf values, bsup values and discrete factors attributes - nominalValues += 0.0; + nominalValues += getNominalValue(factor); //Continu values continuValues += "TRUE"; @@ -141,10 +147,8 @@ .getMaxBound(); } else { + nominalValues += getNominalValue(factor); - //FIXME créer une méthode pour getNominalValue - nominalValues += ""; - //Continu values continuValues += "FALSE"; @@ -220,4 +224,27 @@ } + public void setTopiaContext(TopiaContext context){ + this.context = context; + } + + String getNominalValue(Factor factor){ + ConvertUtilsBean beanUtils = ConverterUtil.getConverter(null); + String path = factor.getPath(); + String topiaId = path.substring(0,path.lastIndexOf("#")); + String propertyName=path.substring(path.lastIndexOf("#") + 1); + Object value = null; + try { + TopiaEntity entity = context.findByTopiaId(topiaId); + value = BeanUtils.getProperty(entity, propertyName); + } catch (Exception ee) { + log.error("An error occurred while trying to get nominal value",ee); + } + if (null!=value){ + return value.toString(); + } else { + return null; + } + } + }