public Case Reuse(System.Collections.ArrayList stats)
    {
        if (stats == null || stats.Count <= 0)
        {
            return(null);
        }
        if (_env == null)
        {
            throw new ContextException("environment variable is not set");
        }

        ICBRContext ctx = CBRContextManager.GetCBRContext(_env);

        if (ctx == null)
        {
            throw new ContextException("ctx is not set");
        }

        Case problem = ctx.GetCurrentCase();

        if (problem == null)
        {
            throw new ContextException(
                      "interface ICBRContext's GetCurrentCase return null");
        }
        ArrayList list = problem.GetFeatures();

        for (int i = 0; i < list.Count; i++)
        {
            Feature f = (Feature)list[i];
            if (f.GetIsKey() && TypeHandle.IsNumericFeature(f))
            {
                //compute the mean value of features
                f.SetFeatureValue(ComputeMeanValue(stats,
                                                   f.GetFeatureName()));
            }
        }
        return(problem);
    }