<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def on_drag_data_received(self, widget, context, x, y, data, info, time):
 """Receives state_id from LibraryTree and moves the state to the position of the mouse :param widget: :param context: :param x: Integer: x-position of mouse :param y: Integer: y-position of mouse :param data: SelectionData: contains state_id :param info: :param time: """

        state_id_insert = data.get_text()
        parent_m = self.model.selection.get_selected_state()
        if not isinstance(parent_m, ContainerStateModel):
            return
        state_v = self.canvas.get_view_for_model(parent_m.states[state_id_insert])
        pos_start = state_v.model.get_meta_data_editor()['rel_pos']
        motion = InMotion(state_v, self.view.editor)
        motion.start_move(self.view.editor.get_matrix_i2v(state_v).transform_point(pos_start[0], pos_start[1]))
        motion.move((x, y))
        motion.stop_move()
        state_v.model.set_meta_data_editor('rel_pos', motion.item.position)
        self.canvas.wait_for_update(trigger_update=True)
        self._meta_data_changed(None, state_v.model, 'append_to_last_change', True)