<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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))