class ForumServiceImpl implements ForumService {

    protected Message cloneMessageAndAssignNewParent(Identity updater, final Message msg, final Message topMsg) {
        final List<Message> oldThreadList = getThread(msg.getThreadtop().getKey());
        final List<Message> subThreadList = new ArrayList<Message>();
        this.getSubthread(msg, oldThreadList, subThreadList);
        // one has to set a new parent for all children of the moved message
        // first message of sublist has to get the parent from the moved message
        for (Message childMessage : subThreadList) {
            childMessage = forumDao.loadMessage(childMessage);
            childMessage.setParent(msg.getParent());
            updateMessage(updater, childMessage, false, null, PublishEventTO.getNoPublishInstance());
        }
        // now move the message to the choosen thread
        final Message oldMessage = forumDao.loadMessage(msg);
        final Message message = createMessage();
        message.setCreator(oldMessage.getCreator());
        message.setForum(oldMessage.getForum());
        message.setModifier(oldMessage.getModifier());
        message.setTitle(oldMessage.getTitle());
        message.setBody(oldMessage.getBody());
        message.setThreadtop(topMsg);
        message.setParent(topMsg);
        final Status status = Status.getStatus(oldMessage.getStatusCode());
        status.setMoved(true);
        message.setStatusCode(Status.getStatusCode(status));
        forumDao.saveMessage(message);
        return message;
    }

      ForumServiceImpl();
      ForumServiceImpl(ForumDao forumManagerMock);

}