Package com.madgnome.jira.plugins.jirachievements.data.services.impl

Source Code of com.madgnome.jira.plugins.jirachievements.data.services.impl.LevelDaoService

package com.madgnome.jira.plugins.jirachievements.data.services.impl;

import com.atlassian.activeobjects.external.ActiveObjects;
import com.madgnome.jira.plugins.jirachievements.data.ao.Category;
import com.madgnome.jira.plugins.jirachievements.data.ao.Level;
import com.madgnome.jira.plugins.jirachievements.data.ao.StatisticRef;
import com.madgnome.jira.plugins.jirachievements.data.ao.StatisticRefEnum;
import com.madgnome.jira.plugins.jirachievements.data.services.ILevelDaoService;
import com.madgnome.jira.plugins.jirachievements.data.services.IStatisticRefDaoService;
import net.java.ao.Query;

import java.util.Arrays;
import java.util.List;

public class LevelDaoService extends BaseDaoService<Level> implements ILevelDaoService
{
  private final IStatisticRefDaoService statisticRefDaoService;

  @Override
  protected Class<Level> getClazz()
  {
    return Level.class;
  }

  public LevelDaoService(ActiveObjects ao, IStatisticRefDaoService statisticRefDaoService)
  {
    super(ao);
    this.statisticRefDaoService = statisticRefDaoService;
  }

  @Override
  public Level get(Category category, int number)
  {
    Level[] levels = ao.find(getClazz(), "CATEGORY = ? AND LEVEL_NUMBER = ?", category, number);
    if (levels.length > 1)
    {
      throw new IllegalStateException("Found more than one level of <" + category.name() + "-" + number + ">");
    }

    return levels.length > 0 ? levels[0] : null;
  }

  @Override
  public Level getOrCreate(Category category, int number, StatisticRefEnum statisticRefEnum, int min, int max)
  {
    Level level = get(category, number);

    return level == null ? create(category, number, statisticRefEnum, min, max) : level;
  }

  @Override
  public List<Level> all(Category category)
  {
    Query query = Query.select().where("CATEGORY = ?", category).order("LEVEL_NUMBER ASC");
    return Arrays.asList(ao.find(getClazz(), query));
  }

  @Override
  public Level findMatchingLevel(Category category, int value)
  {
    Level[] levels = ao.find(getClazz(), "CATEGORY = ? AND MIN_THRESHOLD <= ? AND MAX_THRESHOLD > ?", category, value, value);

    return levels.length > 0 ? levels[0] : null;
  }

  @Override
  public Level findNextLevel(Category category, int value)
  {
    Query query = Query.select().where("CATEGORY = ? AND MIN_THRESHOLD > ?", category, value)
                                .order("LEVEL_NUMBER ASC");
    Level[] levels = ao.find(getClazz(), query);

    return levels.length > 0 ? levels[0] : null;
  }

  private Level create(Category category, int number, StatisticRefEnum statisticRefEnum, int min, int max)
  {
    StatisticRef statisticRef = statisticRefDaoService.get(statisticRefEnum);
    if (statisticRef != null)
    {
      return create(category, number, statisticRef, min, max);
    }

    return null;
  }

  private Level create(Category category, int number, StatisticRef statisticRef, int min, int max)
  {
    Level level = ao.create(getClazz());
    level.setCategory(category);
    level.setLevelNumber(number);
    level.setStatisticRef(statisticRef);
    level.setMinThreshold(min);
    level.setMaxThreshold(max);
    level.save();

    return level;
  }
}
TOP

Related Classes of com.madgnome.jira.plugins.jirachievements.data.services.impl.LevelDaoService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.