def get_value_by_parameter(self, parameter_id=None):
        """Gets a ``Value`` for the given parameter ``Id``.

        If more than one value exists for the given parameter, the most
        preferred value is returned. This method can be used as a
        convenience when only one value is expected.
        ``get_values_by_parameters()`` should be used for getting all
        the active values.

        arg:    parameter_id (osid.id.Id): the ``Id`` of the
                ``Parameter`` to retrieve
        return: (osid.configuration.Value) - the value
        raise:  NotFound - the ``parameter_id`` not found or no value
                available
        raise:  NullArgument - the ``parameter_id`` is ``null``
        raise:  OperationFailed - unable to complete request
        raise:  PermissionDenied - authorization failure
        *compliance: mandatory -- This method must be implemented.*

        """
        pass
        if parameter_id is None:
            raise NullArgument
        try:
            parameter_key = parameter_id.get_identifier() + '.' + parameter_id.get_identifier_namespace()
            parameter_map = self._catalog._config_map['parameters'][parameter_key]
        except KeyError:
            try:
                parameter_key = parameter_id.get_identifier()
                parameter_map = self._catalog._config_map['parameters'][parameter_key]
            except KeyError:
                raise NotFound(str(parameter_id))
        if len(parameter_map['values']) == 0:
            raise NotFound()
        lowest_priority_value_map = None
        for value_map in parameter_map['values']:
            if lowest_priority_value_map is None or lowest_priority_value_map['priority'] < value_map['priority']:
                lowest_priority_value_map = value_map
        return Value(lowest_priority_value_map, Parameter(parameter_map))