private static Object evaluate(final Object problem, final String expression)
			throws SecurityException, NoSuchMethodException,
			IllegalArgumentException, IllegalAccessException,
			InvocationTargetException
	{
		final StringTokenizer tok = new StringTokenizer(expression, ".");

		Object result = problem;

		if (tok.hasMoreTokens())
		{
			final String problemToken = tok.nextToken();

			if ("problem".equals(problemToken))
			{
				while (tok.hasMoreTokens())
				{
					final String nextMethodName = tok.nextToken();

					final Class<?> clazz = result.getClass();
					final Method method = clazz.getMethod(nextMethodName,
							NO_ARGS);

					if (method != null)
					{
						result = ReflectionUtils.getValueOfMethod(method,
								result);
					}
					else
					{
						break;
					}
				}
			}
		}

		return result;
	}