def get_plate_values(self, plate_definition):
        """
        Gets the plate values from the global meta data according to the given plate definition
        :param plate_definition: The plate definition
        :return: The plate values
        :type plate_definition: PlateDefinitionModel
        """
        if not plate_definition.values and not plate_definition.complement:
            raise PlateDefinitionError()

        values = []
        for n in self.meta_data_manager.global_plate_definitions.all_nodes():
            if n.tag == plate_definition.meta_data_id:
                if not plate_definition.values or n.data in plate_definition.values:
                    if plate_definition.parent_plate:
                        # This plate has parent plates, so we need to get parent data for the node
                        parent_plate_value = self.get_parent_plate_value(
                            self.meta_data_manager.global_plate_definitions, n)
                        # if tuple(parent_plate_value) not in self.plates[plate_definition.parent_plate].values:
                        if set(parent_plate_value) not in map(set, self.plates[plate_definition.parent_plate].values):
                            continue
                        values.insert(0, self.get_parent_data(
                            self.meta_data_manager.global_plate_definitions, n, [(n.tag, n.data), ]))
                    else:
                        values.insert(0, [(n.tag, n.data), ])
        if not values:
            # raise PlateEmptyError(plate_definition.plate_id)
            logging.warn("Plate {} is empty during the creation".format(plate_definition.plate_id))
        return values