private <S extends LogicalComponent<?>> URI generateCallbackUri(S source, ServiceContract contract, String referenceName) throws GenerationException { LogicalService candidate = null; for (LogicalService entry : source.getServices()) { MatchResult result = matcher.isAssignableFrom(contract, entry.getServiceContract(), false); if (result.isAssignable()) { candidate = entry; break; } } if (candidate == null) { String name = contract.getInterfaceName(); URI uri = source.getUri(); throw new CallbackServiceNotFoundException("Callback service not found: " + name + " on component: " + uri + " originating from reference :" + referenceName, name); } return URI.create(source.getUri().toString() + "#" + candidate.getDefinition().getName()); }
private void createServices(ComponentDefinition<?> definition, LogicalComponent<?> component, ComponentType componentType) { for (AbstractService<?> service : componentType.getServices().values()) { String name = service.getName(); URI serviceUri = component.getUri().resolve('#' + name); LogicalService logicalService = new LogicalService(serviceUri, service, component); for (BindingDefinition binding : service.getBindings()) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalService); logicalService.addBinding(logicalBinding); } for (BindingDefinition binding : service.getCallbackBindings()) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalService); logicalService.addCallbackBinding(logicalBinding); } // service is configured in the component definition ComponentService componentService = definition.getServices().get(name); if (componentService != null) { logicalService.addIntents(componentService.getIntents()); for (BindingDefinition binding : componentService.getBindings()) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalService); logicalService.addBinding(logicalBinding); } for (BindingDefinition binding : componentService.getCallbackBindings()) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalService); logicalService.addCallbackBinding(logicalBinding); } } component.addService(logicalService); } }