def get_value_by_parameter(self, parameter_id=None):
pass<EOL>if parameter_id is None:<EOL><INDENT>raise NullArgument<EOL><DEDENT>try:<EOL><INDENT>parameter_key = parameter_id.get_identifier() + '<STR_LIT:.>' + parameter_id.get_identifier_namespace()<EOL>parameter_map = self._catalog._config_map['<STR_LIT>'][parameter_key]<EOL><DEDENT>except KeyError:<EOL><INDENT>try:<EOL><INDENT>parameter_key = parameter_id.get_identifier()<EOL>parameter_map = self._catalog._config_map['<STR_LIT>'][parameter_key]<EOL><DEDENT>except KeyError:<EOL><INDENT>raise NotFound(str(parameter_id))<EOL><DEDENT><DEDENT>if len(parameter_map['<STR_LIT>']) == <NUM_LIT:0>:<EOL><INDENT>raise NotFound()<EOL><DEDENT>lowest_priority_value_map = None<EOL>for value_map in parameter_map['<STR_LIT>']:<EOL><INDENT>if lowest_priority_value_map is None or lowest_priority_value_map['<STR_LIT>'] < value_map['<STR_LIT>']:<EOL><INDENT>lowest_priority_value_map = value_map<EOL><DEDENT><DEDENT>return Value(lowest_priority_value_map, Parameter(parameter_map))<EOL>
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.*