use of org.xwiki.component.manager.ComponentManager in project xwiki-platform by xwiki.
the class ContextComponentManagerTest method testRegisterComponentInRootComponentManager.
@Test
public void testRegisterComponentInRootComponentManager() throws Exception {
final States state = getMockery().states("test");
getMockery().checking(new Expectations() {
{
allowing(mockWikiDescriptorManager).getCurrentWikiId();
when(state.isNot("otherwiki"));
will(returnValue("wiki"));
allowing(mockCurrentSpaceReferenceProvider).get();
when(state.isNot("otherwiki"));
will(returnValue(new SpaceReference("space", new WikiReference("wiki"))));
allowing(mockCurrentDocumentReferenceProvider).get();
when(state.isNot("otherwiki"));
will(returnValue(new DocumentReference("wiki", "space", "document")));
allowing(mockDocumentAccessBridge).getCurrentUserReference();
when(state.isNot("otherwiki"));
will(returnValue(new DocumentReference("wiki", "XWiki", "user")));
}
});
// Register in the current wiki.
DefaultComponentDescriptor<Role> cd = new DefaultComponentDescriptor<Role>();
cd.setRoleType(Role.class);
cd.setImplementation(RoleImpl.class);
getComponentManager().registerComponent(cd);
// Verify we can lookup the component from the context CM.
ComponentManager contextCM = getComponentManager().getInstance(ComponentManager.class, "context");
Assert.assertNotNull(contextCM.getInstance(Role.class));
}
use of org.xwiki.component.manager.ComponentManager in project xwiki-platform by xwiki.
the class ContextComponentManagerTest method testDeleteDocument.
@Test
public void testDeleteDocument() throws Exception {
getMockery().checking(new Expectations() {
{
allowing(mockWikiDescriptorManager).getCurrentWikiId();
will(returnValue("wiki"));
allowing(mockCurrentSpaceReferenceProvider).get();
will(returnValue(new SpaceReference("space", new WikiReference("wiki"))));
allowing(mockCurrentDocumentReferenceProvider).get();
will(returnValue(new DocumentReference("wiki", "space", "document")));
allowing(mockDocumentAccessBridge).getCurrentUserReference();
will(returnValue(new DocumentReference("wiki", "XWiki", "user")));
}
});
ComponentManager documentCM = getComponentManager().getInstance(ComponentManager.class, "document");
DefaultComponentDescriptor<Role> cd = new DefaultComponentDescriptor<Role>();
cd.setRoleType(Role.class);
cd.setImplementation(RoleImpl.class);
// Register component for the current user
documentCM.registerComponent(cd);
// Verify we can lookup the component from the Context CM
ComponentManager contextCM = getComponentManager().getInstance(ComponentManager.class, "context");
Assert.assertNotNull(contextCM.getComponentDescriptor(Role.class, "default"));
ObservationManager observationManager = getComponentManager().getInstance(ObservationManager.class);
observationManager.notify(new DocumentDeletedEvent(new DocumentReference("wiki", "space", "document")), null, null);
Assert.assertNull(contextCM.getComponentDescriptor(Role.class, "default"));
}
use of org.xwiki.component.manager.ComponentManager in project xwiki-platform by xwiki.
the class ContextComponentManagerTest method testRegisterComponentInSpaceComponentManager.
@Test
public void testRegisterComponentInSpaceComponentManager() throws Exception {
final States state = getMockery().states("test");
getMockery().checking(new Expectations() {
{
allowing(mockWikiDescriptorManager).getCurrentWikiId();
when(state.isNot("otherspace"));
will(returnValue("wiki1"));
allowing(mockCurrentSpaceReferenceProvider).get();
when(state.isNot("otherspace"));
will(returnValue(new SpaceReference("space1", new WikiReference("wiki1"))));
allowing(mockCurrentDocumentReferenceProvider).get();
when(state.isNot("otherspace"));
will(returnValue(new DocumentReference("wiki1", "space1", "document1")));
allowing(mockDocumentAccessBridge).getCurrentUserReference();
when(state.isNot("otherspace"));
will(returnValue(new DocumentReference("wiki", "XWiki", "user")));
}
});
ComponentManager userCM = getComponentManager().getInstance(ComponentManager.class, "space");
DefaultComponentDescriptor<Role> cd = new DefaultComponentDescriptor<Role>();
cd.setRoleType(Role.class);
cd.setImplementation(RoleImpl.class);
// Register component for the current user
userCM.registerComponent(cd);
// Verify we can lookup the component from the Context CM
ComponentManager contextCM = getComponentManager().getInstance(ComponentManager.class, "context");
Assert.assertNotNull(contextCM.getInstance(Role.class));
// Now verify that we cannot look it up anymore if there's another user in the context
state.become("otherspace");
getMockery().checking(new Expectations() {
{
exactly(1).of(mockDocumentAccessBridge).getCurrentUserReference();
will(returnValue(new DocumentReference("wiki", "XWiki", "user")));
allowing(mockWikiDescriptorManager).getCurrentWikiId();
will(returnValue("wiki2"));
allowing(mockCurrentSpaceReferenceProvider).get();
will(returnValue(new SpaceReference("space2", new WikiReference("wiki2"))));
allowing(mockCurrentDocumentReferenceProvider).get();
will(returnValue(new DocumentReference("wiki2", "space2", "document2")));
}
});
try {
contextCM.getInstance(Role.class);
Assert.fail("Should have raised an exception");
} catch (ComponentLookupException expected) {
// No need to assert the message, we just want to ensure an exception is raised.
}
}
use of org.xwiki.component.manager.ComponentManager in project xwiki-platform by xwiki.
the class ComponentScriptServiceTest method configure.
@Before
public void configure() throws Exception {
this.dab = this.mocker.getInstance(DocumentAccessBridge.class);
this.contextComponentManager = this.mocker.registerMockComponent(ComponentManager.class, "context");
Provider<ComponentManager> contextComponentManagerProvider = this.mocker.registerMockComponent(new DefaultParameterizedType(null, Provider.class, ComponentManager.class), "context");
when(contextComponentManagerProvider.get()).thenReturn(this.contextComponentManager);
this.contextrootComponentManager = this.mocker.registerMockComponent(ComponentManager.class, "context/root");
Provider<ComponentManager> contextrootComponentManagerProvider = this.mocker.registerMockComponent(new DefaultParameterizedType(null, Provider.class, ComponentManager.class), "context/root");
when(contextrootComponentManagerProvider.get()).thenReturn(this.contextrootComponentManager);
this.rootComponentManager = this.mocker.registerMockComponent(ComponentManager.class, "root");
this.componentManagerManager = this.mocker.getInstance(ComponentManagerManager.class);
when(this.componentManagerManager.getComponentManager(null, false)).thenReturn(this.rootComponentManager);
this.execution = this.mocker.getInstance(Execution.class);
}
use of org.xwiki.component.manager.ComponentManager in project xwiki-platform by xwiki.
the class DocumentDeletedListener method onEvent.
@Override
public void onEvent(Event event, Object o, Object context) {
String document = ((DocumentDeletedEvent) event).getEventFilter().getFilter();
ComponentManager componentManager = this.componentManagerManager.getComponentManager(new DocumentNamespace(document).serialize(), false);
if (componentManager instanceof Disposable) {
try {
((Disposable) componentManager).dispose();
} catch (ComponentLifecycleException e) {
this.logger.error(String.format("Failed to dispose component manager for document [%s]", document), e);
}
}
}
Aggregations