def set_provider_links(self, resource_ids=None):
if resource_ids is None:<EOL><INDENT>raise NullArgument()<EOL><DEDENT>metadata = Metadata(**settings.METADATA['<STR_LIT>'])<EOL>if metadata.is_read_only():<EOL><INDENT>raise NoAccess()<EOL><DEDENT>if self._is_valid_input(resource_ids, metadata, array=True):<EOL><INDENT>self._my_map['<STR_LIT>'] = []<EOL>for i in resource_ids:<EOL><INDENT>self._my_map['<STR_LIT>'].append(str(i))<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise InvalidArgument()<EOL><DEDENT>
Sets a provider chain in order from the most recent source to
        the originating source.

        :param resource_ids: the new source
        :type resource_ids: ``osid.id.Id[]``
        :raise: ``InvalidArgument`` -- ``resource_ids`` is invalid
        :raise: ``NoAccess`` -- ``Metadata.isReadOnly()`` is ``true``
        :raise: ``NullArgument`` -- ``resource_ids`` is ``null``

        *compliance: mandatory -- This method must be implemented.*