/** Helper method to initialize the comparator for this page. */
 private void initSorter(WikiContext context, Map params) {
   String order = (String) params.get(PARAM_SORTORDER);
   if (order == null || order.length() == 0) {
     // Use the configured comparator
     m_sorter = context.getEngine().getPageSorter();
   } else if (order.equalsIgnoreCase(PARAM_SORTORDER_JAVA)) {
     // use Java "natural" ordering
     m_sorter = new PageSorter(JavaNaturalComparator.DEFAULT_JAVA_COMPARATOR);
   } else if (order.equalsIgnoreCase(PARAM_SORTORDER_LOCALE)) {
     // use this locale's ordering
     m_sorter = new PageSorter(LocaleComparator.DEFAULT_LOCALE_COMPARATOR);
   } else if (order.equalsIgnoreCase(PARAM_SORTORDER_HUMAN)) {
     // use human ordering
     m_sorter = new PageSorter(HumanComparator.DEFAULT_HUMAN_COMPARATOR);
   } else
     try {
       Collator collator = new RuleBasedCollator(order);
       collator.setStrength(Collator.PRIMARY);
       m_sorter = new PageSorter(new CollatorComparator(collator));
     } catch (ParseException pe) {
       log.info("Failed to parse requested collator - using default ordering", pe);
       m_sorter = context.getEngine().getPageSorter();
     }
 }
  // FIXME: The compiled pattern strings should really be cached somehow.
  public void initialize(WikiContext context, Map params) throws PluginException {
    m_dateFormat = Preferences.getDateFormat(context, TimeFormat.DATETIME);
    m_engine = context.getEngine();
    m_maxwidth = TextUtil.parseIntParameter((String) params.get(PARAM_MAXWIDTH), Integer.MAX_VALUE);
    if (m_maxwidth < 0) m_maxwidth = 0;

    String s = (String) params.get(PARAM_SEPARATOR);

    if (s != null) {
      m_separator = s;
      // pre-2.1.145 there was a separator at the end of the list
      // if they set the parameters, we use the new format of
      // before Item1 after separator before Item2 after separator before Item3 after
      m_after = "";
    }

    s = (String) params.get(PARAM_BEFORE);

    if (s != null) {
      m_before = s;
    }

    s = (String) params.get(PARAM_AFTER);

    if (s != null) {
      m_after = s;
    }

    s = (String) params.get(PARAM_EXCLUDE);

    if (s != null) {
      try {
        PatternCompiler pc = new GlobCompiler();

        String[] ptrns = StringUtils.split(s, ",");

        m_exclude = new Pattern[ptrns.length];

        for (int i = 0; i < ptrns.length; i++) {
          m_exclude[i] = pc.compile(ptrns[i]);
        }
      } catch (MalformedPatternException e) {
        throw new PluginException("Exclude-parameter has a malformed pattern: " + e.getMessage());
      }
    }

    // TODO: Cut-n-paste, refactor
    s = (String) params.get(PARAM_INCLUDE);

    if (s != null) {
      try {
        PatternCompiler pc = new GlobCompiler();

        String[] ptrns = StringUtils.split(s, ",");

        m_include = new Pattern[ptrns.length];

        for (int i = 0; i < ptrns.length; i++) {
          m_include[i] = pc.compile(ptrns[i]);
        }
      } catch (MalformedPatternException e) {
        throw new PluginException("Include-parameter has a malformed pattern: " + e.getMessage());
      }
    }

    // log.debug( "Requested maximum width is "+m_maxwidth );
    s = (String) params.get(PARAM_SHOW);

    if (s != null) {
      if (s.equalsIgnoreCase("count")) {
        m_show = "count";
      }
    }

    s = (String) params.get(PARAM_LASTMODIFIED);

    if (s != null) {
      if (s.equalsIgnoreCase("true")) {
        if (m_show.equals("count")) {
          m_lastModified = true;
        } else {
          throw new PluginException(
              "showLastModified=true is only valid if show=count is also specified");
        }
      }
    }

    initSorter(context, params);
  }