Skip to content
Snippets Groups Projects
Commit 457225b1 authored by Thomas Mortagne's avatar Thomas Mortagne
Browse files

XWIKI-19272: Make easier to get the right UI extensions from Java

parent a26a479d
No related branches found
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@
import javax.inject.Provider;
import javax.inject.Singleton;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.xwiki.component.annotation.Component;
import org.xwiki.component.manager.ComponentLookupException;
......@@ -67,10 +68,28 @@ public List<UIExtension> get(String extensionPointId)
{
List<UIExtension> extensions = new ArrayList<>();
ComponentManager componentManager = this.contextComponentManagerProvider.get();
// Look for a specific UI extension manager for the given extension point
if (StringUtils.isNotEmpty(extensionPointId) && !extensionPointId.equals("default")
&& componentManager.hasComponent(UIExtensionManager.class, extensionPointId)) {
try {
UIExtensionManager manager = componentManager.getInstance(UIExtensionManager.class, extensionPointId);
return manager.get(extensionPointId);
} catch (ComponentLookupException e) {
this.logger.error("Failed to initialize lookup a specific UIExtensionManager for the hint [{}]",
extensionPointId, e);
return extensions;
}
}
// Fallback on the default behavior
try {
List<UIExtension> allExtensions = contextComponentManagerProvider.get().getInstanceList(UIExtension.class);
List<UIExtension> allExtensions = componentManager.getInstanceList(UIExtension.class);
for (UIExtension extension : allExtensions) {
if (extension.getExtensionPointId().equals(extensionPointId)) {
if (StringUtils.equals(extension.getExtensionPointId(), extensionPointId)) {
extensions.add(extension);
}
}
......@@ -79,7 +98,7 @@ public List<UIExtension> get(String extensionPointId)
// soon as a UIExtension component is modified
this.asyncContext.useComponent(UIExtension.class);
} catch (ComponentLookupException e) {
this.logger.error("Failed to lookup UIExtension instances, error: [{}]", e);
this.logger.error("Failed to lookup UIExtension instances", e);
}
return extensions;
......
......@@ -88,19 +88,7 @@ private String[] parseFilterParameters(String nameList)
*/
public List<UIExtension> getExtensions(String extensionPointId)
{
UIExtensionManager manager = this.uiExtensionManager;
ComponentManager componentManager = contextComponentManagerProvider.get();
if (componentManager.hasComponent(UIExtensionManager.class, extensionPointId)) {
try {
// Look for a specific UI extension manager for the given extension point
manager = componentManager.getInstance(UIExtensionManager.class, extensionPointId);
} catch (ComponentLookupException e) {
this.logger.error("Failed to initialize UI extension manager", e);
}
}
return manager.get(extensionPointId);
return this.uiExtensionManager.get(extensionPointId);
}
/**
......
......@@ -19,41 +19,65 @@
*/
package org.xwiki.uiextension;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.HashSet;
import org.junit.Rule;
import org.junit.Test;
import javax.inject.Named;
import org.junit.jupiter.api.Test;
import org.xwiki.component.internal.ContextComponentManagerProvider;
import org.xwiki.test.annotation.ComponentList;
import org.xwiki.test.mockito.MockitoComponentMockingRule;
import org.xwiki.test.junit5.mockito.ComponentTest;
import org.xwiki.test.junit5.mockito.InjectMockComponents;
import org.xwiki.test.junit5.mockito.MockComponent;
import org.xwiki.test.mockito.MockitoComponentManager;
import org.xwiki.uiextension.internal.DefaultUIExtensionManager;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
@ComponentTest
@ComponentList(ContextComponentManagerProvider.class)
public class UIExtensionManagerTest
class UIExtensionManagerTest
{
@Rule
public MockitoComponentMockingRule<UIExtensionManager> mocker =
new MockitoComponentMockingRule<UIExtensionManager>(DefaultUIExtensionManager.class);
@MockComponent
@Named("uix1")
private UIExtension uix1;
@MockComponent
@Named("uix2")
private UIExtension uix2;
@InjectMockComponents
private DefaultUIExtensionManager manager;
@MockComponent
@Named("notuix")
private UIExtension notuix;
@Test
public void testGet() throws Exception
void get() throws Exception
{
assertEquals(Arrays.asList(), this.mocker.getComponentUnderTest().get("extensionpoint"));
assertEquals(Arrays.asList(), this.manager.get("extensionpoint"));
when(this.uix1.getExtensionPointId()).thenReturn("extensionpoint");
when(this.uix2.getExtensionPointId()).thenReturn("extensionpoint");
when(this.notuix.getExtensionPointId()).thenReturn("notuix");
UIExtension uix1 = mocker.registerMockComponent(UIExtension.class, "uix1");
when(uix1.getExtensionPointId()).thenReturn("extensionpoint");
assertEquals(new HashSet<>(Arrays.asList(this.uix1, this.uix2)),
new HashSet<>(this.manager.get("extensionpoint")));
}
UIExtension uix2 = mocker.registerMockComponent(UIExtension.class, "uix2");
when(uix2.getExtensionPointId()).thenReturn("extensionpoint");
@Test
void getWithSpecificUIExtensionManager(MockitoComponentManager componentManager) throws Exception
{
assertEquals(Arrays.asList(), this.manager.get("extensionpoint"));
UIExtension notuix = mocker.registerMockComponent(UIExtension.class, "notuix");
when(notuix.getExtensionPointId()).thenReturn("notuix");
UIExtensionManager specificManager =
componentManager.registerMockComponent(UIExtensionManager.class, "extensionpoint");
when(specificManager.get("extensionpoint")).thenReturn(Arrays.asList(this.uix1, this.uix2));
assertEquals(new HashSet<UIExtension>(Arrays.asList(uix1, uix2)), new HashSet<UIExtension>(this.mocker
.getComponentUnderTest().get("extensionpoint")));
assertEquals(new HashSet<>(Arrays.asList(this.uix1, this.uix2)),
new HashSet<>(this.manager.get("extensionpoint")));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment