private void addLists(OpenAcdAgent agent, OpenAcdAgentRestInfoFull agentRestInfo) {
    Set<OpenAcdSkill> skills = new LinkedHashSet<OpenAcdSkill>();
    List<OpenAcdSkillRestInfo> skillsRestInfo = agentRestInfo.getSkills();

    for (OpenAcdSkillRestInfo skillRestInfo : skillsRestInfo) {
      skills.add(m_openAcdContext.getSkillById(skillRestInfo.getId()));
    }

    Set<OpenAcdQueue> queues = new LinkedHashSet<OpenAcdQueue>();
    List<OpenAcdQueueRestInfo> queuesRestInfo = agentRestInfo.getQueues();

    for (OpenAcdQueueRestInfo queueRestInfo : queuesRestInfo) {
      queues.add(m_openAcdContext.getQueueById(queueRestInfo.getId()));
    }

    Set<OpenAcdClient> clients = new LinkedHashSet<OpenAcdClient>();
    List<OpenAcdClientRestInfo> clientsRestInfo = agentRestInfo.getClients();

    for (OpenAcdClientRestInfo clientRestInfo : clientsRestInfo) {
      clients.add(m_openAcdContext.getClientById(clientRestInfo.getId()));
    }

    agent.setSkills(skills);
    agent.setQueues(queues);
    agent.setClients(clients);
  }
  private void addLists(
      OpenAcdQueueGroup queueGroup, OpenAcdQueueGroupRestInfoFull queueGroupRestInfo) {
    // remove all skills
    queueGroup.getSkills().clear();

    // set skills
    OpenAcdSkill skill;
    List<OpenAcdSkillRestInfo> skillsRestInfo = queueGroupRestInfo.getSkills();
    for (OpenAcdSkillRestInfo skillRestInfo : skillsRestInfo) {
      skill = m_openAcdContext.getSkillById(skillRestInfo.getId());
      queueGroup.addSkill(skill);
    }

    // remove all agent groups
    queueGroup.getAgentGroups().clear();

    // set agent groups
    OpenAcdAgentGroup agentGroup;
    List<OpenAcdAgentGroupRestInfo> agentGroupsRestInfo = queueGroupRestInfo.getAgentGroups();
    for (OpenAcdAgentGroupRestInfo agentGroupRestInfo : agentGroupsRestInfo) {
      agentGroup = m_openAcdContext.getAgentGroupById(agentGroupRestInfo.getId());
      queueGroup.addAgentGroup(agentGroup);
    }

    // remove all current steps
    queueGroup.getSteps().clear();

    // set steps
    OpenAcdRecipeStep step;
    OpenAcdRecipeCondition condition;
    OpenAcdRecipeAction action;
    OpenAcdRecipeActionRestInfo actionRestInfo;

    List<OpenAcdRecipeStepRestInfo> recipeStepsRestInfo = queueGroupRestInfo.getSteps();
    for (OpenAcdRecipeStepRestInfo recipeStepRestInfo : recipeStepsRestInfo) {
      step = new OpenAcdRecipeStep();
      step.setFrequency(recipeStepRestInfo.getFrequency());

      // add conditions
      step.getConditions().clear();
      for (OpenAcdRecipeConditionRestInfo recipeConditionRestInfo :
          recipeStepRestInfo.getConditions()) {
        condition = new OpenAcdRecipeCondition();
        condition.setCondition(recipeConditionRestInfo.getCondition());
        condition.setRelation(recipeConditionRestInfo.getRelation());
        condition.setValueCondition(recipeConditionRestInfo.getValueCondition());

        step.addCondition(condition);
      }

      // add action
      action = new OpenAcdRecipeAction();
      actionRestInfo = recipeStepRestInfo.getAction();
      action.setAction(actionRestInfo.getAction());
      action.setActionValue(actionRestInfo.getActionValue());

      // set action skills (separate from skills assigned to queue
      for (OpenAcdSkillRestInfo skillRestInfo : actionRestInfo.getSkills()) {
        skill = m_openAcdContext.getSkillById(skillRestInfo.getId());
        action.addSkill(skill);
      }

      step.setAction(action);

      queueGroup.addStep(step);
    }
  }