if (imp == null) {
// Add the missing requirement
ServiceDependencyHandler handler = (ServiceDependencyHandler) getHandler(HandlerFactory.IPOJO_NAMESPACE + ":subservice");
if (handler == null) {
// Look for the ServiceDependencyHandler factory
HandlerManager handlerManager = null;
try {
ServiceReference[] refs = m_context.getServiceReferences(Factory.class.getName(), "(&(handler.name=subservice)(handler.namespace=" + HandlerFactory.IPOJO_NAMESPACE + ")(handler.type=composite))");
Factory factory = (Factory) m_context.getService(refs[0]);
handlerManager = (HandlerManager) factory.createComponentInstance(null, getCompositeManager().getServiceContext());
} catch (InvalidSyntaxException e) {
// Should not happen
} catch (UnacceptableConfiguration e) {
// Should not happen
} catch (MissingHandlerException e) {
// Should not happen
} catch (ConfigurationException e) {
// Should not happen
}
// Add the required handler
try {
handlerManager.init(getCompositeManager(), new Element("composite", ""), new Properties());
} catch (ConfigurationException e) {
error("Internal error : cannot configure the Import Handler : " + e.getMessage());
throw new CompositionException("Internal error : cannot configure the Import Handler", e);
}
handler = (ServiceDependencyHandler) handlerManager.getHandler();
getCompositeManager().addCompositeHandler(handlerManager);
}
String spec = elem.getAttribute("specification");
String filter = "(&(objectClass=" + spec + ")(!(instance.name=" + getCompositeManager().getInstanceName() + ")))"; // Cannot import yourself