/** 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); }