@SuppressWarnings({"unchecked", "rawtypes"})
  public void execute(
      Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
      throws TemplateException, IOException {
    Long articleCategoryId =
        FreemarkerUtils.getParameter(ARTICLE_CATEGORY_ID_PARAMETER_NAME, Long.class, params);

    ArticleCategory articleCategory = articleCategoryService.find(articleCategoryId);

    List<ArticleCategory> articleCategories;
    if (articleCategoryId != null && articleCategory == null) {
      articleCategories = new ArrayList<ArticleCategory>();
    } else {
      boolean useCache = useCache(env, params);
      String cacheRegion = getCacheRegion(env, params);
      Integer count = getCount(params);
      if (useCache) {
        articleCategories =
            articleCategoryService.findChildren(articleCategory, count, cacheRegion);
      } else {
        articleCategories = articleCategoryService.findChildren(articleCategory, count);
      }
    }
    setLocalVariable(VARIABLE_NAME, articleCategories, env, body);
  }