private static String getDataTypeName(final Type type) {
        try {
            if (type instanceof Class) {
                final Class<?> valueClass = (Class<?>) type;
                String dataTypeName;

                if (valueClass.equals(int.class)) {
                    dataTypeName = "Integer";
                } else if (valueClass.equals(Enum.class)) {
                    dataTypeName = "Enumeration";
                } else if (valueClass.equals(List.class) || valueClass.equals(Map.class)) {
                    dataTypeName = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL,
                            valueClass.getSimpleName()) + " of ";
                } else {
                    dataTypeName = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, valueClass.getSimpleName());
                }
                return dataTypeName;
            } else if (type instanceof ParameterizedType) {
                final ParameterizedType parameterizedType = (ParameterizedType) type;
                final String rawTypeName = getDataTypeName(parameterizedType.getRawType());

                if (parameterizedType.getActualTypeArguments() != null) {
                    final String genericTypes = Arrays.stream(parameterizedType.getActualTypeArguments())
                            .map(ConfigMapper::getDataTypeName)
                            .collect(Collectors.joining(", "));
                    return rawTypeName + genericTypes;
                } else {
                    return rawTypeName;
                }
            } else {
                return "";
            }
        } catch (Exception e) {
            throw new RuntimeException(LogUtil.message(
                    "Error getting type name for {}: {}", type, e.getMessage()));
        }
    }
@param dbConfigProperty The config property object obtained from the database
@return The updated typed value from the object model
stroom-config/stroom-config-global-impl/src/main/java/stroom/config/global/impl/ConfigMapper.java