use of org.xwiki.component.wiki.WikiComponent in project xwiki-platform by xwiki.
the class WikiUIExtensionComponentBuilderTest method buildComponents.
@Test
public void buildComponents() throws Exception {
BaseObject extensionObject = createExtensionObject("name", "extensionPointId", "content", "key=value=foo\nkey2=value2\ninvalid=\n\n=invalid", "user");
ContentParser contentParser = this.mocker.getInstance(ContentParser.class);
VelocityManager velocityManager = this.mocker.getInstance(VelocityManager.class);
List<WikiComponent> components = this.mocker.getComponentUnderTest().buildComponents(extensionObject);
assertEquals(1, components.size());
verify(contentParser).parse("content", Syntax.XWIKI_2_1, DOC_REF);
UIExtension uiExtension = (UIExtension) components.get(0);
Map<String, String> parameters = uiExtension.getParameters();
assertEquals(2, parameters.size());
verify(velocityManager.getVelocityEngine()).evaluate(any(VelocityContext.class), any(StringWriter.class), eq("name:key"), eq("value=foo"));
verify(velocityManager.getVelocityEngine()).evaluate(any(VelocityContext.class), any(StringWriter.class), eq("name:key2"), eq("value2"));
}
use of org.xwiki.component.wiki.WikiComponent in project xwiki-platform by xwiki.
the class DefaultWikiComponentManagerEventListener method registerDocumentComponents.
/**
* Registers the components linked to the given document. For that, we get a list of providers that can build a
* component using this document, then the first available provider is selected in order to register a component.
*
* @param documentReference the document used to create the component
*/
private void registerDocumentComponents(DocumentReference documentReference) {
// Unregister all wiki components registered under the given entity. We do this as otherwise we would need to
// handle the specific cases of elements added, elements updated and elements deleted, etc.
// Instead we unregister all wiki components and re-register them all.
this.wikiComponentManagerEventListenerHelper.unregisterComponents(documentReference);
// Re-register all wiki components in the passed document
for (WikiComponentBuilder provider : this.wikiComponentProviders) {
// Check whether the given document has a wiki component defined in it.
if (provider.getDocumentReferences().contains(documentReference)) {
try {
List<WikiComponent> components = provider.buildComponents(documentReference);
this.wikiComponentManagerEventListenerHelper.registerComponentList(components);
} catch (WikiComponentException e) {
this.logger.warn("Failed to create wiki component(s) for document [{}]: {}", documentReference, ExceptionUtils.getRootCauseMessage(e));
}
break;
}
}
}
use of org.xwiki.component.wiki.WikiComponent in project xwiki-platform by xwiki.
the class DefaultWikiComponentManager method unregisterWikiComponent.
private void unregisterWikiComponent(Iterator<WikiComponent> iterator) throws WikiComponentException {
WikiComponent wikiComponent = iterator.next();
// Save current context information
DocumentReference currentUserReference = this.wikiComponentManagerContext.getCurrentUserReference();
EntityReference currentEntityReference = this.wikiComponentManagerContext.getCurrentEntityReference();
try {
// Set the proper information so the component manager use the proper keys to find components to
// unregister
this.wikiComponentManagerContext.setCurrentUserReference(wikiComponent.getAuthorReference());
this.wikiComponentManagerContext.setCurrentEntityReference(wikiComponent.getEntityReference());
// Remove from the Component Manager
getComponentManager(wikiComponent.getScope()).unregisterComponent(wikiComponent.getRoleType(), wikiComponent.getRoleHint());
// Remove from the wiki component cache
iterator.remove();
} catch (ComponentLookupException e) {
throw new WikiComponentException(String.format("Failed to find a component manager for scope [%s]", wikiComponent.getScope()), e);
} finally {
this.wikiComponentManagerContext.setCurrentUserReference(currentUserReference);
this.wikiComponentManagerContext.setCurrentEntityReference(currentEntityReference);
}
}
Aggregations