'Control then set a metadata field.'

def set(self, name, value):

    name = self._convert_name(name)
    if (((name in _ELEMENTSFIELD) or (name == u'Platform')) and (not isinstance(value, (list, tuple)))):
        if isinstance(value, string_types):
            value = [v.strip() for v in value.split(u',')]
        else:
            value = []
    elif ((name in _LISTFIELDS) and (not isinstance(value, (list, tuple)))):
        if isinstance(value, string_types):
            value = [value]
        else:
            value = []
    if logger.isEnabledFor(logging.WARNING):
        project_name = self[u'Name']
        scheme = get_scheme(self.scheme)
        if ((name in _PREDICATE_FIELDS) and (value is not None)):
            for v in value:
                if (not scheme.is_valid_matcher(v.split(u';')[0])):
                    logger.warning(u'%r:    %r    is    not    valid    (field    %r)', project_name, v, name)
        elif ((name in _VERSIONS_FIELDS) and (value is not None)):
            if (not scheme.is_valid_constraint_list(value)):
                logger.warning(u'%r:    %r    is    not    a    valid    version    (field    %r)', project_name, value, name)
        elif ((name in _VERSION_FIELDS) and (value is not None)):
            if (not scheme.is_valid_version(value)):
                logger.warning(u'%r:    %r    is    not    a    valid    version    (field    %r)', project_name, value, name)
    if (name in _UNICODEFIELDS):
        if (name == u'Description'):
            value = self._remove_line_prefix(value)
    self._fields[name] = value
