use of org.xwiki.rendering.macro.wikibridge.WikiMacro in project xwiki-platform by xwiki.
the class DefaultWikiMacroInitializer method registerMacro.
/**
* Register a wiki macro in the component manager, if the macro author has the required rights.
*
* @param wikiMacroDocumentReference the document holding the macro definition
* @param wikiMacroDocumentAuthor the author of the macro document
* @param xcontext the current request context
*/
private void registerMacro(DocumentReference wikiMacroDocumentReference, String wikiMacroDocumentAuthor, XWikiContext xcontext) {
this.logger.debug("Registering macro in document [{}]...", wikiMacroDocumentReference);
DocumentReference originalAuthor = xcontext.getUserReference();
try {
WikiMacro macro = this.wikiMacroFactory.createWikiMacro(wikiMacroDocumentReference);
this.wikiMacroManager.registerWikiMacro(wikiMacroDocumentReference, macro);
this.logger.debug("Macro [{}] from document [{}] is now registered.", macro.getDescriptor().getId().getId(), wikiMacroDocumentReference);
} catch (InsufficientPrivilegesException ex) {
// Just log the exception and skip to the next.
// We only log at the debug level here as this is not really an error
this.logger.debug(ex.getMessage(), ex);
} catch (WikiMacroException ex) {
// Just log the exception and skip to the next.
this.logger.error(ex.getMessage(), ex);
} finally {
xcontext.setUserReference(originalAuthor);
}
}
use of org.xwiki.rendering.macro.wikibridge.WikiMacro in project xwiki-platform by xwiki.
the class DefaultWikiMacroManager method registerWikiMacro.
@Override
public void registerWikiMacro(DocumentReference documentReference, WikiMacro wikiMacro) throws InsufficientPrivilegesException, WikiMacroException {
WikiMacroDescriptor macroDescriptor = (WikiMacroDescriptor) wikiMacro.getDescriptor();
// Verify that the user has the right to register this wiki macro the chosen visibility
if (this.wikiMacroFactory.isAllowed(documentReference, macroDescriptor.getVisibility())) {
DefaultComponentDescriptor<Macro> componentDescriptor = new DefaultComponentDescriptor<>();
componentDescriptor.setRoleType(Macro.class);
componentDescriptor.setRoleHint(wikiMacro.getDescriptor().getId().getId());
// Save current context informations
String currentUser = this.bridge.getCurrentUser();
EntityReference currentEntityReference = this.modelContext.getCurrentEntityReference();
try {
// Put the proper context information to let components manager use the proper keys to find
// components to unregister
this.bridge.setCurrentUser(this.serializer.serialize(wikiMacro.getAuthorReference() != null ? wikiMacro.getAuthorReference() : this.bridge.getCurrentUserReference()));
this.modelContext.setCurrentEntityReference(documentReference);
// Register the macro against the right Component Manager, depending on the defined macro visibility.
findComponentManager(macroDescriptor.getVisibility()).registerComponent(componentDescriptor, wikiMacro);
this.wikiMacroMap.put(documentReference, new WikiMacroData(componentDescriptor.getRoleHint(), wikiMacro));
} catch (Exception e) {
throw new WikiMacroException(String.format("Failed to register macro [%s] in [%s] for visibility [%s]", wikiMacro.getDescriptor().getId().getId(), documentReference, macroDescriptor.getVisibility()), e);
} finally {
// Restore previous context informations
this.bridge.setCurrentUser(currentUser);
this.modelContext.setCurrentEntityReference(currentEntityReference);
}
} else {
throw new InsufficientPrivilegesException(String.format("Unable to register macro [%s] in [%s] for visibility [%s] due to insufficient privileges", wikiMacro.getDescriptor().getId().getId(), documentReference, macroDescriptor.getVisibility()));
}
}
use of org.xwiki.rendering.macro.wikibridge.WikiMacro in project xwiki-platform by xwiki.
the class WikiMacroEventListener method registerMacro.
/**
* @param documentReference the reference of the document containing the macro to register
*/
private void registerMacro(DocumentReference documentReference) {
// Unregister any existing macro registered under this document.
if (unregisterMacro(documentReference)) {
// Check whether the given document has a wiki macro defined in it.
if (this.macroFactory.containsWikiMacro(documentReference)) {
// Attempt to create a wiki macro.
WikiMacro wikiMacro;
try {
wikiMacro = this.macroFactory.createWikiMacro(documentReference);
} catch (WikiMacroException e) {
this.logger.debug(String.format("Failed to create wiki macro [%s]", documentReference), e);
return;
}
// Register the macro.
registerMacro(documentReference, wikiMacro);
}
}
}
use of org.xwiki.rendering.macro.wikibridge.WikiMacro in project xwiki-platform by xwiki.
the class DefaultWikiMacroFactoryTest method testCreateWikiMacro.
public void testCreateWikiMacro() throws Exception {
// Build a wiki macro.
WikiMacro macro = this.wikiMacroFactory.createWikiMacro(new DocumentReference("xwiki", "Macros", "Test"));
assertNotNull(macro);
// Check if the macro was built correctly.
assertEquals("testmacro", macro.getId());
assertEquals("Test Macro", macro.getDescriptor().getName());
assertEquals("This is a macro used for testing purposes.", macro.getDescriptor().getDescription());
assertEquals("Test", macro.getDescriptor().getDefaultCategory());
assertEquals(WikiMacroVisibility.USER, ((WikiMacroDescriptor) macro.getDescriptor()).getVisibility());
assertTrue(macro.supportsInlineMode());
assertNull(macro.getDescriptor().getContentDescriptor());
// Verify that the wiki macro descriptor has a macro id without a syntax since wiki macros are registered for
// all syntaxes.
assertNull(macro.getDescriptor().getId().getSyntax());
}
use of org.xwiki.rendering.macro.wikibridge.WikiMacro in project xwiki-platform by xwiki.
the class DefaultWikiMacroFactoryTest method testCreateWikiMacroWithoutName.
public void testCreateWikiMacroWithoutName() throws Exception {
BaseObject obj = macroDefinitionDoc.getObject("XWiki.WikiMacroClass");
obj.setStringValue("name", "");
// Build a wiki macro.
WikiMacro macro = this.wikiMacroFactory.createWikiMacro(new DocumentReference("xwiki", "Macros", "Test"));
assertNotNull(macro);
// Check if the macro was built correctly.
assertEquals("testmacro", macro.getDescriptor().getName());
}
Aggregations