use of org.xwiki.component.manager.ComponentRepositoryException 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);
}
}
use of org.xwiki.component.manager.ComponentRepositoryException in project xwiki-platform by xwiki.
the class DefaultWikiComponentManager method registerWikiComponent.
@Override
public void registerWikiComponent(WikiComponent component) throws WikiComponentException {
// Save current context information
DocumentReference currentUserReference = this.wikiComponentManagerContext.getCurrentUserReference();
EntityReference currentEntityReference = this.wikiComponentManagerContext.getCurrentEntityReference();
try {
// Get the component role interface
Type roleType = component.getRoleType();
Class<?> roleTypeClass = ReflectionUtils.getTypeClass(roleType);
ComponentDescriptor componentDescriptor = createComponentDescriptor(roleType, component.getRoleHint());
// Set the proper information so the component manager use the proper keys to find components to register
this.wikiComponentManagerContext.setCurrentUserReference(component.getAuthorReference());
this.wikiComponentManagerContext.setCurrentEntityReference(component.getEntityReference());
// Since we are responsible to create the component instance, we also are responsible of its initialization
if (this.isInitializable(component.getClass().getInterfaces())) {
try {
((Initializable) component).initialize();
} catch (InitializationException e) {
this.logger.error("Failed to initialize wiki component", e);
}
}
// Register the wiki component against the Component Manager
getComponentManager(component.getScope()).registerComponent(componentDescriptor, roleTypeClass.cast(component));
// And add it the wiki component cache so that we can remove it later on. We need to do this since we need
// to be able to unregister a wiki component associated with a wiki page
cacheWikiComponent(component);
} catch (ComponentLookupException e) {
throw new WikiComponentException(String.format("Failed to find a component manager for scope [%s] wiki " + "component registration failed", component.getScope()), e);
} catch (ComponentRepositoryException e) {
throw new WikiComponentException("Failed to register wiki component against component repository", e);
} finally {
this.wikiComponentManagerContext.setCurrentUserReference(currentUserReference);
this.wikiComponentManagerContext.setCurrentEntityReference(currentEntityReference);
}
}
Aggregations