use of org.xwiki.component.descriptor.DefaultComponentDescriptor in project xwiki-platform by xwiki.
the class ContextComponentManagerTest method testRegisterComponentInWikiComponentManager.
@Test
public void testRegisterComponentInWikiComponentManager() throws Exception {
final States state = getMockery().states("test");
getMockery().checking(new Expectations() {
{
allowing(mockWikiDescriptorManager).getCurrentWikiId();
when(state.isNot("otherwiki"));
will(returnValue("wiki1"));
allowing(mockCurrentSpaceReferenceProvider).get();
when(state.isNot("otherwiki"));
will(returnValue(new SpaceReference("space1", new WikiReference("wiki1"))));
allowing(mockCurrentDocumentReferenceProvider).get();
when(state.isNot("otherwiki"));
will(returnValue(new DocumentReference("wiki1", "space1", "document1")));
allowing(mockDocumentAccessBridge).getCurrentUserReference();
when(state.isNot("otherwiki"));
will(returnValue(new DocumentReference("wiki", "XWiki", "user")));
}
});
// Register in the current wiki.
ComponentManager wikiCM = getComponentManager().getInstance(ComponentManager.class, "wiki");
DefaultComponentDescriptor<Role> cd = new DefaultComponentDescriptor<Role>();
cd.setRoleType(Role.class);
cd.setImplementation(RoleImpl.class);
wikiCM.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"));
// Now verify that we cannot look it up anymore if there's another wiki in the context
state.become("otherwiki");
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.descriptor.DefaultComponentDescriptor in project xwiki-platform by xwiki.
the class ContextComponentManagerTest method testRegisterComponentInDocumentComponentManager.
@Test
public void testRegisterComponentInDocumentComponentManager() throws Exception {
final States state = getMockery().states("test");
getMockery().checking(new Expectations() {
{
allowing(mockWikiDescriptorManager).getCurrentWikiId();
when(state.isNot("otherdocument"));
will(returnValue("wiki1"));
allowing(mockCurrentSpaceReferenceProvider).get();
when(state.isNot("otherdocument"));
will(returnValue(new SpaceReference("space1", new WikiReference("wiki"))));
allowing(mockCurrentDocumentReferenceProvider).get();
when(state.isNot("otherdocument"));
will(returnValue(new DocumentReference("wiki1", "space1", "document1")));
allowing(mockDocumentAccessBridge).getCurrentUserReference();
when(state.isNot("otherdocument"));
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.getInstance(Role.class));
// Now verify that we cannot look it up anymore if there's another user in the context
state.become("otherdocument");
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.descriptor.DefaultComponentDescriptor in project xwiki-platform by xwiki.
the class ContextComponentManagerTest method testDeleteWiki.
@Test
public void testDeleteWiki() throws ComponentLookupException, 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")));
}
});
// Register in the current wiki.
ComponentManager wikiCM = getComponentManager().getInstance(ComponentManager.class, "wiki");
DefaultComponentDescriptor<Role> cd = new DefaultComponentDescriptor<Role>();
cd.setRoleType(Role.class);
cd.setImplementation(RoleImpl.class);
wikiCM.registerComponent(cd);
ComponentManager contextCM = getComponentManager().getInstance(ComponentManager.class, "context");
Assert.assertNotNull(contextCM.getComponentDescriptor(Role.class, "default"));
ObservationManager observationManager = getComponentManager().getInstance(ObservationManager.class);
observationManager.notify(new WikiDeletedEvent("wiki"), null, null);
Assert.assertNull(contextCM.getComponentDescriptor(Role.class, "default"));
}
use of org.xwiki.component.descriptor.DefaultComponentDescriptor in project xwiki-platform by xwiki.
the class ContextComponentManagerTest method testRegisterComponentInUserComponentManager.
@Test
public void testRegisterComponentInUserComponentManager() throws Exception {
final States state = getMockery().states("test");
getMockery().checking(new Expectations() {
{
allowing(mockDocumentAccessBridge).getCurrentUserReference();
when(state.isNot("otheruser"));
will(returnValue(new DocumentReference("wiki", "XWiki", "user1")));
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")));
}
});
ComponentManager contextCM = getComponentManager().getInstance(ComponentManager.class, "context");
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.
}
// Register component for the current user
ComponentManager userCM = getComponentManager().getInstance(ComponentManager.class, "user");
DefaultComponentDescriptor<Role> cd = new DefaultComponentDescriptor<Role>();
cd.setRoleType(Role.class);
cd.setImplementation(RoleImpl.class);
userCM.registerComponent(cd);
// Verify we can lookup the component from the Context CM
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("otheruser");
getMockery().checking(new Expectations() {
{
allowing(mockDocumentAccessBridge).getCurrentUserReference();
will(returnValue(new DocumentReference("wiki", "XWiki", "user2")));
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")));
}
});
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.descriptor.DefaultComponentDescriptor in project xwiki-platform by xwiki.
the class StandardExtendedURLResourceTypeResolver method registerEntityResourceReferenceResolver.
private void registerEntityResourceReferenceResolver(String registrationHint, Class<? extends ResourceReferenceResolver<ExtendedURL>> registrationImplementation, String wikiExtractorHint) throws InitializationException {
DefaultComponentDescriptor<ResourceReferenceResolver<ExtendedURL>> resolverDescriptor = new DefaultComponentDescriptor<>();
resolverDescriptor.setImplementation(registrationImplementation);
resolverDescriptor.setInstantiationStrategy(ComponentInstantiationStrategy.SINGLETON);
String hint = computeHint(registrationHint);
resolverDescriptor.setRoleHint(hint);
resolverDescriptor.setRoleType(new DefaultParameterizedType(null, ResourceReferenceResolver.class, ExtendedURL.class));
// Register dependencies
DefaultComponentDependency<WikiReferenceExtractor> wikiReferenceExtractorDependency = new DefaultComponentDependency<>();
wikiReferenceExtractorDependency.setRoleType(WikiReferenceExtractor.class);
wikiReferenceExtractorDependency.setRoleHint(wikiExtractorHint);
wikiReferenceExtractorDependency.setName("wikiExtractor");
resolverDescriptor.addComponentDependency(wikiReferenceExtractorDependency);
DefaultComponentDependency<EntityReferenceResolver<EntityReference>> entityReferenceResolverDependency = new DefaultComponentDependency<>();
entityReferenceResolverDependency.setRoleType(new DefaultParameterizedType(null, EntityReferenceResolver.class, EntityReference.class));
entityReferenceResolverDependency.setName("defaultReferenceEntityReferenceResolver");
resolverDescriptor.addComponentDependency(entityReferenceResolverDependency);
DefaultComponentDependency<StandardURLConfiguration> standardURLConfigurationDependency = new DefaultComponentDependency<>();
standardURLConfigurationDependency.setRoleType(StandardURLConfiguration.class);
standardURLConfigurationDependency.setName("configuration");
resolverDescriptor.addComponentDependency(standardURLConfigurationDependency);
DefaultComponentDependency<EntityResourceActionLister> entityResourceActionListerDependency = new DefaultComponentDependency<>();
entityResourceActionListerDependency.setRoleType(EntityResourceActionLister.class);
entityResourceActionListerDependency.setName("entityResourceActionLister");
resolverDescriptor.addComponentDependency(entityResourceActionListerDependency);
try {
this.rootComponentManager.registerComponent(resolverDescriptor);
} catch (ComponentRepositoryException e) {
throw new InitializationException(String.format("Failed to dynamically register Resource Reference Resolver for hint [%s]", hint), e);
}
}
Aggregations