On Sun, Aug 9, 2009 at 9:37 PM, Vincent Massol<vincent(a)massol.net> wrote:
On Aug 9, 2009, at 9:12 PM, asiri (SVN) wrote:
Author: asiri
Date: 2009-08-09 21:12:30 +0200 (Sun, 09 Aug 2009)
New Revision: 22449
Modified:
platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/macro/DefaultMacroCategoriesManager.java
platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/test/java/org/xwiki/rendering/internal/macro/DefaultMacroCategoriesManagerTest.java
Log:
XWIKI-4131: Add support for organizing macros by category
* getMacroNames() should return only macro names, not macro hints.
* Fixed a NPE possibility.
* Added one more test case.
Modified:
platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/macro/DefaultMacroCategoriesManager.java
===================================================================
---
platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/macro/DefaultMacroCategoriesManager.java
2009-08-09 14:04:29 UTC (rev 22448)
+++
platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/macro/DefaultMacroCategoriesManager.java
2009-08-09 19:12:30 UTC (rev 22449)
@@ -19,25 +19,25 @@
*/
package org.xwiki.rendering.internal.macro;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
import org.xwiki.component.annotation.Component;
import org.xwiki.component.annotation.Requirement;
import org.xwiki.component.logging.AbstractLogEnabled;
import org.xwiki.component.manager.ComponentLookupException;
import org.xwiki.component.manager.ComponentManager;
+import org.xwiki.rendering.configuration.RenderingConfiguration;
import org.xwiki.rendering.macro.Macro;
import org.xwiki.rendering.macro.MacroCategoriesManager;
import org.xwiki.rendering.macro.MacroLookupException;
import org.xwiki.rendering.macro.MacroManager;
import org.xwiki.rendering.parser.Syntax;
-import org.xwiki.rendering.configuration.RenderingConfiguration;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Properties;
-import java.util.HashSet;
-
/**
* Default implementation of {@link MacroCategoriesManager}.
*
@@ -115,7 +115,7 @@
return true;
}
}).get(category);
- return Collections.unmodifiableSet(macros);
+ return (null != macros) ? Collections.unmodifiableSet(macros) :
Collections.<String>emptySet();
}
/**
@@ -131,7 +131,7 @@
return macroManager.exists(macroName, syntax);
}
}).get(category);
- return Collections.unmodifiableSet(macros);
+ return (null != macros) ? Collections.unmodifiableSet(macros) :
Collections.<String>emptySet();
}
/**
@@ -152,8 +152,21 @@
// Loop through all the macros and categorize them.
Properties categories = this.configuration.getMacroCategories();
- for (Map.Entry<String, Macro> entry : allMacros.entrySet()) {
- if (matcher.match(entry.getKey())) {
+ for (Map.Entry<String, Macro> entry : allMacros.entrySet()) {
+ // Extract macro name.
+ String [] hintParts = entry.getKey().split("/");
+ String macroName = null;
+ if (hintParts.length > 0) {
+ macroName = hintParts[0];
+ } else {
+ // Question: Will we ever reach this code?
+ getLogger().warn("Invalid macro hint : [" +
entry.getKey() + "]");
+ // Skip this macro.
+ continue;
+ }
This can be improved by sharing code with the MacroManager, by creating some
kind of macro syntax parser or factory.
Another solution is to rethink they way we register a
macro for a given
syntax.
[snip]
Thanks
-Vincent