LocalCategoryRepository.java

package com.github.quizclash.plugin.database;

import com.github.quizclash.adapter.JSONCategoryParser;
import com.github.quizclash.domain.Category;
import com.github.quizclash.domain.CategoryRepository;
import com.github.quizclash.domain.InvalidQuestionFormatException;
import org.json.JSONArray;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class LocalCategoryRepository implements CategoryRepository {
  private final Category[] categories;

  public LocalCategoryRepository() throws IOException, InvalidQuestionFormatException {
    JSONArray jsonCategories = JSONResourceReader.from(JSONResourceEnum.CATEGORIES);
    categories = JSONCategoryParser.parseFromJSONArray(jsonCategories, true);
  }

  public Category[] getCategorySelection(int amountOfCategories) {
    final Category[] categoryResult = new Category[amountOfCategories];
    final List<Integer> categoryResultIndexes = new ArrayList<>();
    while (categoryResultIndexes.size() < amountOfCategories) {
      final int newIndex = (int) (Math.random() * categories.length);
      if (!categoryResultIndexes.contains(newIndex)) {
        categoryResult[categoryResultIndexes.size()] = categories[newIndex];
        categoryResultIndexes.add(newIndex);
      }
    }
    return categoryResult;
  }
}